Matlab v. 4

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