Komplexa tal. F4 (5): Datastrukturer (kap. 6 7)

Relevanta dokument
F4: Datastrukturer (kap. 6 7) Komplexa tal Ö3: 5.2, 5.7, 5.14, 5.20

F4 (5): Datastrukturer (kap. 6 7)

F8: Resterna. Substitutionschiffer. Permutationer. ASCII och char. Substitutionschiffer (Lab 3) Permutationer Rekursion

F8: Resterna. Substitutionschiffer (Lab 3) Permutationer Rekursion Formelbehandling Simulering Iteration, frekvens-dubbling och kaos Radplanering

Matlab-repetition. p 1 (25) Staffan Romberger, CSC, KTH,

Föreläsning 12: Datastrukturer & filer

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 8 december 2015 Sida 1 / 22

Läsning, skrivning, tangentbord, skärm. F6: Filhantering (kap. 8) Tabell på skärmen. save

HI1024 Programmering, grundkurs TEN

Läsning, skrivning, tangentbord, skärm. F6: Filhantering (kap. 8) Tabell på skärmen

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Börja programmera. Kapitel 4 i kompendiet Jämförande uttryck Villkorssatser Loopar (slingor) Funktioner. Läs inte avsnitt 4.2.3

Introduktion till MATLAB

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 14:e januari klockan

Enkla datatyper minne

Variabler. TANA81: Beräkningar med Matlab. Matriser. I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde:

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Matlabövning 1 Funktioner och grafer i Matlab

Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Numeriska Metoder och Grundläggande Programmering för P1, VT2014

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

PROGRAMMERING-JAVA TENTAMINA

Laboration 1: Linjär algebra

MATLAB the Matrix Laboratory. Introduktion till MATLAB. Martin Nilsson. Enkel användning: Variabler i MATLAB. utvecklat av MathWorks, Inc.

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

TDIU01 - Programmering i C++, grundkurs

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

Mer om linjära ekvationssystem

Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

% Föreläsning 4 22/2. clear hold off. % Vi repeterar en liten del av förra föreläsningen:

Tentamen i Grundläggande Programvaruutveckling, TDA548

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Övning 6 - Tillämpad datalogi 2012

Tentamen i Grundläggande Programvaruutveckling, TDA548

Uppgift 1 - programmet, Uppg6.m, visade jag på föreläsning 1. Luftmotståndet på ett objekt som färdas genom luft ges av formeln

Kontouppställningen kan t.ex. användas för att bygga Balansräkning, Resultaträkning, Nyckeltalsrapport eller Försäljningsstatistik.

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

Uppgift 1 (grundläggande konstruktioner)

Tentamen i. TDDC67 Funktionell programmering och Lisp

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Beräkningsvetenskap föreläsning 2

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

TAIU07 Matematiska beräkningar med MATLAB för MI. Fredrik Berntsson, Linköpings Universitet. 15 januari 2016 Sida 1 / 26

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Textsträngar från/till skärm eller fil

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

TDDC74 Programmering: Abstraktion och modellering Datortenta

Läsning, skrivning, tangentbord, skärm. F6: Filhantering (kap. 8) Tabell på skärmen. Tabell på skärmen, test

Övning från förra gången: readword

Platser för att skriva och testa kod online. Workshop om programmering i matematikkurser, version 0.7 senast sparat

Introduktion till programmering SMD180. Föreläsning 7: Strängar

MMA132: Laboration 2 Matriser i MATLAB

#include <stdio.h> #include <string.h>

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Numeriska Metoder och Grundläggande Programmering för P1, VT2014

Funktioner och grafritning i Matlab

Tentamen Grundläggande programmering

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Matlabövning 1 Funktioner och grafer i Matlab

Hur man programmerar. Exempel på problemlösning i Python

TANA17 Matematiska beräkningar med Matlab

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 27 oktober 2015 Sida 1 / 31

TDIU01 - Programmering i C++, grundkurs

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 4 december 2015 Sida 1 / 26

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

Programmeringsteknik med C och Matlab

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Introduktion C-programmering

Tentamen OOP

Klassdeklaration. Metoddeklaration. Parameteröverföring

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

2 februari 2016 Sida 1 / 23

KARLSTADS UNIVERSITET 12/8/09 informatik & datavetenskap Johan Öfverberg, Kerstin Andersson Laboration 4, ISG A04 och DVG A08 HT-09

[] Arrayer = Indexerad variabel

Flyttal kan också hantera vanliga tal som både 16- och 32-bitars dataregister hanterar.

Repetition C-programmering

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 9 november 2015 Sida 1 / 28

Objektorienterad programmering i Java I

SMD 134 Objektorienterad programmering

Parameteröverföring. Exempel. Exempel. Metodkropp

Motivering för programmering. F1: Introduktion, Matlabrepetition (kap. 1 2) Att kunna programmera. Interpreterat/kompilerat

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

DD1314 Programmeringsteknik

DD1361 Programmeringsparadigm. Carina Edlund

Erfarenheter från labben

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Föreläsning 3-4 Innehåll

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

Matlabföreläsningen. Lite mer och lite mindre!

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 9p av totalt 20p Hjälpmedel: MATLAB

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

F2 Datarepresentation talbaser, dataformat och teckenkodning EDAA05 Datorer i system! Roger Henriksson!

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Transkript:

F4 (5): Datastrukturer (kap. 6 7) komplexa tal strängar och textbehandling glesa tabeller celltabeller posttabeller logisk tabell och mask formelbehandling Komplexa tal Den imaginära enheten skrivs i eller j om man inte har gjort om i eller j till vanlig variabel. Kommandot clear i j återställer. Kommandot isreal undersöker om alla element har imaginärdelen 0. Funktioner som är definierade i matematiken för komplexa argument eller kan ge komplexa resultat fungerar så i Matlab. Exempel: Skriv en funktion som ritar bilden av +/-s kvadraten z = s (1+t i, t+i, 1 t i, t i) för 1<=t<=1 under avbildningen w=f(z) function ritakomplex(fun,s,step) p 1 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 p 2 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 % rita bild av "+/- s" kvadrat i komplexa z-planet if nargin < 3 step = 0.02; if nargin < 2 s = 1; t = [-1:step:1]; z = s*[1+t*i -t+i -1-t*i t-i]; % varför denna ordning % på de fyra delarna? w = feval(fun,z); % fun är : namn på funktion myplot(w,'-'); % tjocka kurvor & stort % typsnitt Testa med ritakomplex('exp'); exp(x+i*y)= exp(x)*(cos y+i*sin y) De 4 delarna blir: (t: -1 1) 1: e*(cos t+i*sin t) 2: exp(-t)*(cos 1+i*sin 1) 3: (1/e)*(cos t-i*sin t) 4: exp(t)*(cos 1-i*sin 1) 2 1 0-1 -2 2 3 1 4-1 0 1 2 3 4 p 3 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 p 4 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09

Funktioner som har med komplexa tal att göra är: real(z) realdelen imag(z) imagimärdelen isreal(z) imaginärdelen är 0 abs(z) beloppet angle(z) argumentet conj(z) komplex-konjugat, negera imaginärdelen Strängar och textbehandling Lagring, utskrift, operatorer, funktioner, ischar, double/int16/abs, char, [ ; ], char(' ',' '), deblank, strcat, strvcat (med utfyllnad), strcmp, strcmpi, strncmp, strncmpi, findstr, lower, upper, strings, tecken enligt Latin1 konverteras ok, strtok, p 5 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 p 6 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 Radplanering Skriv en funktion som radplanerar en text, t, till angiven radlängd. t = ['Här har vi ett exempel på en text '... 'som ska radplaneras. Jag hoppas att det '... 'går bra.']; paragraph(t,12) Algoritm: Hitta alla blanktecken (findstr( )). Ord kan börja efter ett blanktecken och kan sluta med textens sista tecken, lägg därför till 0 före och numel(t)+1 efter Antag att nästa ord börjar efter nästa blanktecken och slutar före följande blanktecken. Ignorera tomma ord (flera blanka i rad). Om ordet ryms på raden lägg till blanktecken och ordet och håll reda på radens längd. Om ordet inte ryms, lägg till raden i textmatrisen och lägg det nya ordet först på raden. När texten är slut, lägg sista raden till textmatrisen. function text = paragraph(t,llength) % Radplanerar texten t till radlängden llength. bpos = [0 findstr(t,' ') numel(t)+1]; % Index för blanka text = ''; % Det blivande stycket (textmatris), tom ''; % Aktuell rad, tom llength+1; % Antalet använda platser på aktuell rad: % se till att ny rad startas omedelbart for bno = 1:numel(bpos)-1 % För varje möjligt ord % Sök nästa ord, deblank ignorerar avslutande blanka word = deblank(t(bpos(bno)+1:bpos(bno+1)-1)); if ~isempty(word) % kunde ju vara bara blanka if llength<lpos+1+numel(word); p 7 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 p 8 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09

% Ordet ryms ej, initiera ny rad text = strvcat(text,line); word; numel(word); else % Ordet ryms, % lägg en blank och ordet till aktuell rad [line ' ' word]; lpos+1+numel(word); % Hantera ev. icke-fylld slutrad if ~isempty(line) text = strvcat(text,line); Radplanering forts. Testkör: >>t = ['Här har vi ett exempel på en text '... 'som ska radplaneras. Jag hoppas att det '... 'går bra.']; >>paragraph(t,12) Här har vi ett exempel på en text som ska radplaneras. Jag hoppas att det går bra. p 9 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 p 10 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 Radplanering testversion function text = paragraphdb(t,llength) % Radplanerar stycken till given radlängd. bpos = [0 findstr(t,' ') numel(t)+1] % Index för blanka text = ''; % Det blivande stycket ''; % Aktuell rad llength+1; % Antalet använda platser på raden % Så länge ord återstår for bno = 1:numel(bpos)-1 % Sök nästa ord bpos(bno)+1:bpos(bno+1)-1 % skriv ut! word = t(it); if ~isempty(word) if llength<lpos+1+numel(word) disp('ordet ryms ej'); % Initiera ny rad text = strvcat(text,line) word numel(word) else disp('ordet ryms'); % Lägg odet till aktuell rad p 11 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 [line ' ' word] lpos+1+numel(word) % Hantera ev. icke-fylld slutrad if ~isempty(line) text = strvcat(text,line); Testkör: t = ['Här har vi ett exempel på en text '... 'som ska radplaneras. Jag hoppas att det '... 'går bra.']; >> paragraphdb(t,12) bpos = Columns 1 through 13 0 4 8 11 15 16 24 27 30 31 32 33 38 Columns 14 through 26 42 43 47 60 61 62 66 73 74 78 82 p 12 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09

86 91 1 2 3 Ordet ryms ej text = '' Här 3 5 6 7 Ordet ryms Här har 7 9 10 Ordet ryms Här har vi 10 12 13 14 Ordet ryms ej text = Här har vi ett 3 Empty matrix: 1-by-0 17 18 19 20 21 22 23 Ordet ryms ett exempel 11 25 26 Ordet ryms ej text = Här har vi ett exempel på p 13 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 p 14 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 Strängar forts. En sträng är en radvektor med teckenelement. Konkatenera (sammanfoga) strängar horisontellt: t = ['abc' 'def ' 'ghi '] inklusive avslutande blanktecken (och andra»vittecken») i delarna, t = strcat('abc','def ','ghi ') ignorera avslutande»vittecken» i delarna. Konkatenera vertikalt: t = ['12345';'67890'] raderna måste vara lika långa t = strvcat('123',' ','45678') alla rader fylls med blanka till längsta radens längd, tomma strängar ignoreras. t = char('123',' ','45678') som strvcat men tomma strängar ignoreras ej. Man konverterar mellan tal och tecken med char och t.ex. abs. Man testar om tecken är bokstav med isletter och om ett tecken är»vittecken» med isspace. Man konverterar mellan versaler och gemena med lower och upper. Det finns olika sätt att söka och jämföra texter: findstr(text1, text2) ger de index i text1 där text2 börjar, strcmp(text1, text2) ger sant om texterna är lika, strcmpi(text1, text2) fungerar som strcmp(upper(text1), upper(text2)) dvs. ignorerar skiftläge strncmp(text1, text2, n) jämför de första n tecknen i texterna, p 15 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 p 16 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09

[t,r] = strtok(s,d) letar nästa»token» (symbol) i s. Hoppa över inledande tecken ur d (delimiters, avskiljare), t är följande tecken som inte finns i d och r är resten av s. Man kan skriva programmet paragraph med strtok. 16:15 är en tom vektor. Datarepresentation Talet sjutton kan representeras som strängen '17'; lagras som (ascii) koden för '1' som är 49 följt av koden för '7' som är 55 (8 bits binärt: 00110111, oktalt: 67, sedecimalt: 37) eller som heltal 17; lagras som binärt heltal 0 010001 (int64: 64 bits) eller som flyttal 1.7e1; lagras som ett annat bitmönster med delarna t1 m t2 e t1*m*2^(t2*e). Man kan konvertera mellan strängform och intern binär form med num2str, str2num och andra funktioner. p 17 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 p 18 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 Glesa tabeller sparse arrays I vissa sammanhang använder man tabeller där de flesta elementen är 0. Man kan ange att tabeller ska lagras som glesa tabeller dvs. som en följd tripler (i,j,aij): i = radnummer, j = kolumnnummer och aij = värde för de element som inte är 0. Många numeriska metoder använder glesa matriser (Lab 5). Grafer kan beskrivas med glesa matriser t.ex. för att hitta billigaste väg eller gå igenom en labyrint. Ex. A = rand(100); m = A<0.95; % obs logisk indicering % m är 1D vektor A(m) = 0; % de flesta blir noll A = sparse(a) % spara bara icke-nollor spy(a) % visa var icke-nollor finns Celltabeller cell arrays I vanliga tabeller har alla element samma typ. I celltabeller kan elementen ha olika typ. Ett 2 x 2 exempel a = [ {[1 3 7;2 0 6;0 5 1]}, {'This is a text.'}; {[3+4*i 5;-10*i 3-4*i]},{[]} ]; a(1,1) % cellen med index (1,1) [3x3 double] a{1,1} % innehållet i cellen med index (1,1) [1 3 7 2 0 6 0 5 1] p 19 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 p 20 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09

En celltabell är en tabell med celler som element. Varje cell är en variabel. Man kan använda ett förenklat skrivsätt: a = {[1 3 7;2 0 6;0 5 1],'This is a text.';... [3+4*i 5;-10*i 3-4*i],[]}; En cell kan innehålla en celltabell. Posttabeller - structs I vanliga tabeller och celltabeller når man elementen med index. I posttabeller använder man namn för att nå elementen (=posterna). Vi kan använda en posttabell för att lagra information om bankkonton. Beskrivningen av ett konto är en»post», ett element i posttabellen. Varje post har samma uppsättning fält med varsitt namn. fältnamnen kontonummer, namn, ranta och saldo funktionen trans, gör en transaktion trans har en lokal funktion regfind för att hitta en post med givet kontonummer. p 21 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 p 22 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 Hur lagra konto-registret, säg 50000 st. konton, hur komma åt det från de olika funktionerna? Lösning: REG som global posttabell. Registret kan ju inte vara parameter: de ändringar som görs av funktionen ska märkas utanför. Vi kan ha registret både som in- och utparameter men det innebär alltför mycket kopiering. function saldo = trans(accountno,amount) % Utför en banktransaktion. % saldo = trans(accountno,amount) % Om amount >=0 insättes amount på kontot. % Om amount<0 kontrolleras saldot och % om saldo+amount<0 skrivs ett varningsmeddelande % annars ändras saldo till saldo+amount. Bankexempel forts. global REG index = regfind(accountno); % hitta kontot if index<=0 disp('kontonumret är okänt.'); saldo = -1; return; else % obs! utan ; ger fyra raders utskriften... strvcat(['transaktion med belopp ',num2str(amount)],... ['på konto ' num2str(accountno) ' med '],... ['innehavare ' REG(index).namn ' och ],... [ saldo före: ' num2str(reg(index).saldo) '.']) p 23 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 p 24 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09

if REG(index).saldo+amount<0 % ingen täckning disp('övertrassering. Transaktionen utförs ej.'); saldo = REG(index).saldo; else % OK, utför saldo = REG(index).saldo+amount; REG(index).saldo = saldo; function index = regfind(accountno) global REG index = -1; for no = 1:numel(REG) % är detta effektivt? if REG(no).kontonummer==accountno index = no; Bankexempel forts. global REG REG.kontonummer = 12357; REG.namn = 'Kloker'; % obs strängparenteser behövs REG.ranta = 2.2; REG.saldo = 200; REG(2).kontonummer = 314159; REG(2).namn = 'Trötter'; REG(2).ranta = 1.9; REG(2).saldo = 10500; p 25 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 p 26 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 >>trans(12357,100) Transaktion med belopp 100 på konto 12357 med innehavare Kloker och saldo före: 200. 300 >>trans(12357,100) Transaktion med belopp 100 på konto 12357 med innehavare Kloker och saldo före: 300. 400 >>trans(12358,100) Kontonumret är okänt. -1 >>trans(12357,-1000) Transaktion med belopp -1000 på konto 12357 med innehavare Kloker och saldo före: 300. Övertrassering. Transaktionen utförs ej. 300 p 27 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 p 28 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09

Mask logical indices Man kan välja ut vissa element i en tabell så att ast dessa element påverkas av en operation och övriga element lämnas opåverkade. För detta använder man en»logisk tabell». Användningen liknar användningen av masker i Photoshop o.d. Ex. Fördubbla de positiva elementen i A. A = [0 1-7;-2 4 8;3-5 -17]; m = A>0; m ( ) A(m) = 2*A(m) A = 0 2-7 -2 8 16 6-5 -17 Formelbehandling Med Matlabs»Symbolic algebra toolbox» kan man göra formelbehandling. Matlab känner till deriverings- och integrationsregler och kan göra viss formelförenkling. n = 4; syms x; A = x.^((0:n)'*(0:n)) A = [1, 1, 1, 1, 1] [1, x, x^2, x^3, x^4] [1, x^2, x^4, x^6, x^8] [1, x^3, x^6, x^9, x^12] [1, x^4, x^8, x^12, x^16] p 29 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 p 30 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 Formelbehandling forts. >>D = diff(log(a)) D = [0, 0, 0, 0, 0] [0, 1/x, 2/x, 3/x, 4/x] [0, 2/x, 4/x, 6/x, 8/x] [0, 3/x, 6/x, 9/x, 12/x] [0, 4/x, 8/x, 12/x, 16/x] >>syms a b; expand((a^3+b^2)^3) a^9+3*a^6*b^2+3*a^3*b^4+b^6 Formelbehandling forts. I laboration 5 finns en differensapproximation till derivatan av en funktion i dess vänstra ändpunkt. Låt funktionsvärdena på gitter-punkterna vara u i = u(x i ), x i = ih, i = 0,1,,N-1, N där h=l/n. Om vi approximerar funktionen med en rät linje får vi u ( x0) = ( u1 u0) / h Approximera istället med en parabel 2 u ( x) = A( x x0 ) + B( x x0) + C, u ( x) = 2A( x x0) + B och bestäm A, B, och C så att parabeln går genom (x 0 +kh,u k ), k = 0,1,2: p 31 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 p 32 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09

syms A B C u0 u1 u2 h d e e = solve('a*0+b*0+c=u0',... 'A*h^2+B*h+C=u1',... 'A*(2*h)^2+B*(2*h)+C=u2','A','B','C'); d = 2*A*0+B; >> e.b 1/2*(-3*u0-u2+4*u1)/h Det stämmer med formeln i labb 5. Man kan göra motsvarande för funktionens högra ände. Formelbehandling forts. Med syms deklarerar man vilka variabler som ska vara symboliska. S = solve('eqn1','eqn2',...,'eqnn',... 'var1','var2',...'varn') löser {vari},i=1:n ur ekvationssystemet {eqni } som S.vari. subs(f, {v1 v2 vn}, {e1, e2,, en}) ersätter i formeln f variablerna vi med uttrycken ei. simplify(f) förenklar formeln f. Se hjälpen för information om hur man kan styra förenklingen. p 33 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09 p 34 (34) JOp,Staffan Romberger, CSC, KTH, 2009-11-09