• Mera om matrishantering
• Skriva mera avancerade funktioner
• Beräkning av integraler
• Nollställen, max- och minvärden
• Polynomhantering
Föreläsning 2
Repetition – matriser
• Matlab arbetar generellt med komplexa matriser
• En reell skalär är en 1⨯1-matris med imaginärdel 0
• *, / och ^ är matrisoperationer
– elementvisa varianter finns: .*, ./ och .^
• De flesta standardfunktioner är elementvisa och bör användas tillsammans med .*, ./ och .^
• Lätt att skapa matriser, ex: A = [ 1 2 ; 3 4 ]
• Kan läsa ut enskilda element, ex: A(2,1)
• Kan modifiera enskilda element: A(2,1) = 8
Delar av matriser
• Index till en matris är vektorer!
• A(2,[2 3 4]) ger en vektor bestående av element 2, 3 och 4 på rad 2 i matrisen A
• :-operatorn användbar: A(2,2:4) samma sak som ovan
• A(2,:) ger hela rad 2
• A(2,end) ger sista elementet på rad 2
• find(A>5) ger index för alla element i A som är större än 5
• Ta bort rad 2: A(2,:) = []
Exempel (se film 2.1–2.2)
• Låt A vara en 5x7-matris med slumptal och skriv ut följande:
1. Övre vänstra hörnet (som 2x2-matris) 2. Första raden
3. Andra kolonnen
4. De tre sista värdena i näst sista kolonnen 5. De fyra hörnen
6. Det inre av matrisen
• Vi ersätter alla tal > 1 i en vektor med nollor
• Vi tar bort alla udda tal ur en vektor
Repetition – enkla funktioner och scripts
Enkla matematiska funktioner kunde vi definiera enligt:
f = @(x) sin(x)/2;
Vi kan lägga en följd av kommandon i en script-fil.
Vi kan köra kommandona i filen genom att ange namnet på script-filen.
Vi kan använda if-satser, for-satser och while-satser.
Inmatnings- och utskriftssatser liknande Java.
Funktionsfiler i Matlab
function resultat = min_funktion(x, t)
% Enradskommentar
% Längre kommentar, som i regel
% kräver flera rader.
... egentliga programrader ...
resultat = ...funktionsvärde...
end
• Funktionens och filens namn ska stämma överens.
Funktionen ovan ska ligga i en fil som heter min_funktion.m, annars hittar Matlab den inte.
• Returvärdet kan vara en vektor.
Ofta namnger man de enskilda elementen i returvektorn:
function [x y z] = ...
• Vi kan anropa funktionen med ett variabelt antal parametrar – nargin ger aktuellt antal parametrar.
Exempel (se film 2.3–2.4)
• Vi skriver en egen funktion:
hur många gånger förekommer talet a i vektorn v?
• Vi skriver en egen funktion för att beräkna integralen av en annan (godtycklig) funktion
Integralberäkningar
Det är (någorlunda) enkelt att skriva en funktion som integrerar en funktion med hjälp av definitionen av en Riemannsumma.
Det finns dock en mycket bättre funktion för integralberäkning inbyggd i Matlab:
integral
Exempel: integral(gauss,-1,1)
Både snabbare och smartare än vår egenskrivna lösare.
Nollställen, minimum/maximum
Standardfunktionerna fzero och fsolve hittar nollställen till en given funktion.
fzero(f, x)
söker nollgenomgång för funktionen f i närheten av x fsolve(f, x)
söker nollställen för f i närheten av x
(x kan vara en vektor; då returneras en vektor med nollställen).
Kräver att Matlabs optimization toolbox är installerad.
Tips: Använd plot för att plotta funktionen och se ungefär var nollställen finns.
fminbnd(f,a,b) – hittar ett lokalt minimum i intervallet a..b.
Maximum av f(x): Definiera g(x) = –f(x). Sök minimum.
Exempel (se film 2.5–2.6)
• Vi tar reda på nollställen för funktionen (i x-intervallet 0..5):
• Vi tar reda på nollställen för funktionen (i x-intervallet 1..3):
Polynom (se film 2.7)
Matlab innehåller ett antal polynomrelaterade funktioner.
De bygger på att polynom representeras som vektorer.
Ett polynom som a
0x
n+ a
1x
n–1+ … + a
n–1x + a
nskrivs i Matlab [ a
0a
1... a
n]
Exempel: x
3– 19x + 30 skrivs [ 1 0 -19 30 ]
Polynomfunktioner (se film 2.7)
roots(p)
ger rötterna till polynomet p
poly(q)
ger en radvektor med koefficienterna till det polynom som har rötterna q
polyval(p, x)
beräknar värdet av polynomet p för värdena x
polyfit(x, y, n)
försöker anpassa ett n:egrads-polynom så nära punkterna (x,y) (vektorer) som möjligt