Inledande Matematik TD0910 Marcus WJ, Chalmers Matlab v. 4 Repetition While-loopar while detta är sant gör detta end Ex: x=1 while x<5 x=x+1 end If-satser if detta är sant gör detta elseif detta är sant gör detta else gör detta end 8.2 Flödescheman är för början och start av program är för input eller output är för en punkt där ett val görs är för där saker skall beräknas Skicka funktion till en funktion Man kan skriva t.ex ett plottningsprogram, som kan få in inte bara intervallet, utan också vilken funktion vi vill plotta. Det kan göras på två sätt: Sätt nr 1: Skriv två program, ett plot-program plottning.m och en funktionsfil funk1.m där funktionen vi vill plotta finns. plottning.m Sida 1 av 3 Inledande Matematik TD0910 Marcus WJ, Chalmers function plottning(f,a,b) %Ett program som plottar upp en function f i det slutna intervallet [a,b]. %Input: f – en funktion a,b - start och slut på ett intervall %Output: Ingenting x=linspace(a,b,1000); f1=f(x); plot(x,f1) funk1.m function y=funk1(x) y=2*sin(x) Anropa programmet genom att skriva i kommandofönstret: plottning(@funk1,0,5) @ måste vara med, det säger till matlab att det är en funktion vi skickar in. På samma sätt, om vi vill använda cos, som är en funktion som redan finns i Matlab, skriver vi i kommandofönstret: plottning(@cos,0,5) Sätt nr 2: Skriv ditt program plottning.m Anropa sedan med: plottning(@ (x) ( 2*sin(x) ), 0, 5) Parantesen precis efter @ betyder att det är x som är variabel. Ska inte ha @ inne i anropet mer efter det precis i början. Dessa två sätt ger precis samma output, men det andre är snabbare om man vet vad man gör. Kombinera loopar och funktioner Skriver en funktion, plottning2.m som använder två variabler. x och y är samma i detta exempel. plottning2.m function plottning(f,a,b) x=linspace(a,b,1000); y=linspace(a,b,1000); f1=f(x,y); plot(x,f1) Skriv ett skript som anropar det första programmet och får det att plotta upp ett antal grafer: Sida 2 av 3 Inledande Matematik TD0910 Marcus WJ, Chalmers plottloop.m hold on for i=1:20 plottning2(@(x,y)2*sin(7*x)+i*y,-10,10) end Plottar upp 20 st grafer med stigande i-konstant. Testa ändra lite i programmet. Bisektionsalgoritmen Man måste förstå matten först innan man kan implementera den i Matlab. Man kan använda fplot för att snabbt plotta upp funktioner för att kolla t.ex rötter: fplot(@funk1,[0, 10]) där funk1 är en funktionsfil med funktionen man vill plotta, t.ex 3*sin(x). Man kan även skriva: fplot(@(x) 3*sin(x),[0, 10]) Metodik för att beräkna rötter till ekvationer med Bisektionsalgoritmen: 1. Skriv om på formen f(x) = 0 2. Plotta upp funktionen för att kolla ungefär mellan vilka värden rötterna finns 3. Kör programmet en gång för varje rot med ett lämpligt intervall och tolerans (t.ex 1e-6), anropet är exempelvis med en funktionsfil funktion1.m: [x,X]=bisect(@funktion1,[0, 3],1e-6) 4. Kontrollera att era lösningar stämmer genom att sätta in det sista värdet i ekvationen f(x) = 0 och se att det blir nära eller exakt noll Gör nu Datorövning 2. Lycka till! Sida 3 av 3
© Copyright 2024