KPP053, HT2016 MATLAB, Föreläsning 1

KPP053, HT2016
MATLAB, Föreläsning 1
•
•
•
•
•
Introduktion till MATLAB
Skript
Inläsning och utskrift av variabler
Ekvationssystem
Anonyma funktioner
MATLAB
• Väletablerat
• Mycket omfattande
program
GNU OCTAVE
• Öppen källkod
• Gratis
• I de flesta fall fullt
kompatibel med kod
som är skriven för
MATLAB (och vice
versa)
• Kan köras med eller
utan grafiskt gränssnitt.
FREEMAT
• Öppen källkod.
• Gratis.
• I ofta fullt kompatibel
med kod som är skriven
för MATLAB (och vice
versa).
• Kommer med ett
grafiskt gränssnitt.
Arbetsytan
Historik
› Tidigare körda kommandon kan köras igen genom att
bläddra fram och tillbaka med piltangenterna
Variabler
› Variabler kopplar ett namn till en viss platts i datorns
arbetsminne så att man enkelt kan hänvisa till det som
lagrats där.
› Svaret från senaste uträkningen lagras automatiskt under
variabelnamnet ans
› Egna variabler lagras med likhetstecken. Exempel: a=2
› Några variabler är fördefinierade vid start t.ex. pi e i
Tillåtna variabelnamn
› Variabelnamn får innehålla följande tecken
– Versaler och gemener (A-Z),(a-z)
– Siffror (0-9)
– Understreck (_)
› Variabelnamnet får inte börja med siffra eller understreck.
› Det går bra att lagra ett annat värde i någon av de
fördefinierade variablerna. Det fördefinierade värdet
återställs automatiskt när variabelnamnet blir ledigt igen.
› Observera att programmet gör skillnad på versaler och
gemener.
Att hålla arbetsytan prydlig
› Avsluta kodrader med semikolon för att inte se någon
output från kommandot. Exempel: b = 3;
› Använd kommandot clc för att rensa kommandofönstret.
› Använd kommandot clear för att radera en given variabel.
Exempel: clear b
› Skriv clear all för att radera samtliga lagrade variabler
(inbyggda variabler stannar)
Funktioner
› En funktion anropas med funktionens namn, och en eller
flera variabler inom parantes.
› Exempel: sqrt(2) ger roten ur två, sqrt(a)ger roten ur
det värde som lagrats under variabelnamnet a.
› Om funktionen tar mer än en variabel separeras dessa med
kommatecken.
› Exempel: rem(13,5)ger resten av heltalsdivisionen 13/5.
Funktioner
› En kort lista med några av de inbyggda funktionerna finns på
sidan 30 i kursboken.
› Observera att standardenheten för de trigonometriska
funktionerna är radianer.
› Det går att definiera egna funktioner (kommer senare i
kursen).
Funktioner
› Det går utmärkt att ge värdet av en funktion som input till en
annan funktion.
› Exempel: sin(degtorad(45))konverterar 45˚ från grader
till radianer.
› OBS: det går i det här fallet även att skriva sind(45).
Skript
› Skript kan användas för att automatisera beräkningar.
› Ett skript är en textfil som innehåller ett antal kommandon
som körs automatiskt ett efter ett när skriptet körs.
› För att textfilen skall kännas igen som ett skript måste
namnet sluta med .m
› Kommandon som körs av ett skript beter sig precis likadant
som när de skrivs in manuellt.
Statiskt bestämt problem
› En stel balk är förankrad i väggen med ett gångjärn, och fäst i taket
via ett stag med tvärsnittsarea A elacticitetsmodul E (fig. 1).
› En punktlast F läggs på längst ut på balken. Hur stor blir vinkeln 𝛼
(fig. 2)?
𝐴, 𝐸
𝐴, 𝐸
𝐿1
2m
𝐿1
2m
3m
3m
𝛼
𝐹
𝐴 = 50 mm2 𝐸 = 70000 MPa 𝐿1 = 1,5 m
𝐹 = 50000 N
Uträkning:
› Momentjämvikt
↻: 𝐹 ⋅ 3 m − 𝑆1 ⋅ 2 m = 0 ⇒ 𝑆1 =
𝐹⋅3 m
2m
› Stagets förlängning
𝛿1 =
𝑆1 𝐿1
𝐸𝐴
› Vinkeln alfa
𝛼 = arctan
𝛿1
2m
𝐴 = 50 mm2 𝐸 = 70000 MPa 𝐿1 = 1,5 m
𝐹 = 50000 N
Skapa en ny skript-fil
Mata in variabler
› Variabler kan deklareras i skript-filen på samma sätt som i
kommandofönstret:
%Skript för att lösa statiskt bestämt problem
% Indata:
A = 50; % mm2
E = 70000; % MPa
L1 = 1.5; % m
F = 50000; % N
› Allt som står efter ett procenttecken ignoreras av programmet, detta
kan användas till att lägga till kommentarer i koden.
Beräkna lösningen
› Jämvikten, stagets förlängning och vinkeln alfa beräknas i tur och ordning:
% Moment-jämvikt:
S1 = F*3/2;
% Stagets förlängning:
delta = S1*L1/E/A;
% Vinkeln alfa:
alfa = atand(delta/2)
› Eftersom det inte finns något semikolon efter sista kodraden kommer svaret
att printas i kommandofönstret när skriptet kört klart.
Spara och köra script
› Spara scriptfilen under lämpligt namn
› Navigera till mappen där du sparade filen
› Kör filen
– Genom att skriva filnamnet i kommando-raden
– Genom att högerklicka på den i rutan till vänster och välja ”run” i
menyn
– Genom att markera den i rutan till vänster och trycka på F9
Bläddra bland filer
Bläddra bland filer
› Det går även att bläddra bland filerna genom att skriva i kommandofönstret
pwd %skriv ut sökvägen till aktiv mapp (print working
directory)
dir %skriv en lista på filer och mappar i aktiv
katalog
cd <SÖKVÄG>
%gör <SÖKVÄG> till aktiv mapp
%<SÖKVÄG> kan vara relativ
cd ..
%navigera ett steg upp i mappstrukturen
input()
› Ett behändigt sätt att mata in data i skript om man vill göra
dem mera användarvänliga.
› input(’text’) skriver text i kommandofönstret, och
väntar på input.
› Exempel: L1 = input(’Ange längden L1’); kommer
att skriva ”Ange längden L1” på skärmen, vänta på input,
och sedan lagra resultatet i variabeln L1.
fprintf()
› Ett ”behändigt” sätt att få ut data ur skript om man vill göra
dem mera användarvänliga.
› fprintf(’text %4.3f \n’,x) skriver text i
kommandofönstret.
› text skrivs ut rakt av.
› %4.3f kommer att ersättas av variabeln x utskriven som
decimaltal fyra siffror i bredd varav 3 är decimaler.
› \n flyttar markören till nästa rad.
› Mer utförlig förklaring av fprintf finns på sidan 41 i
kursboken.
Lös ett linjärt ekvationssystem
› Exempel från sidan 17 i boken:
1 2 −1
9 0 2
1 2 3
𝐴
% Ange matriser:
π‘₯1
π‘₯2
π‘₯3
π‘₯
=
A = [1 2 -1 ; 9 0 2 ; 1 2 3];
b = [0 ; 2 ; -1];
% Beräkna svarsmatrisen x:
x = A\b
0
2
−1
𝑏
Statiskt obestämt problem
𝐴 = 50 mm2
𝐴, 𝐸
𝐴, 𝐸
𝐿2
𝐿1
𝐸 = 70000 MPa
𝐿1 = 1,5 m
1,5 m
𝐿2 = 2 m
𝐹 = 50000 N
3m
𝐹
Uträkning:
› Momentjämvikt
↻: 𝐹 ⋅ 3 m − 𝑆1 ⋅ 1,5 m − S2 ⋅ 3 m = 0 ⇒ 𝑆1 ⋅ 1,5 + 𝑆2 ⋅ 3 = 𝐹 ⋅ 3
› Stagens förlängning
𝛿1 =
𝑆1 𝐿1
𝐸𝐴
, 𝛿2 =
𝑆2 𝐿2
𝐸𝐴
⇒ 𝑆1 ⋅
𝐿1
𝐸𝐴
− 𝛿1 = 0 ,
𝐿2
𝑆2 ⋅
𝐸𝐴
− 𝛿2 = 0
› Geometriskt samband
𝛼 = arctan
𝛿1
1,5 m
= arctan
𝛿2
3m
⇒ 𝛿2 − 𝛿1 ⋅
3m
1,5 m
=0
Ekvationssystem:
S1
S2
1,5
3
L1/ (AE)
δ1
δ2
-1
L2/ (AE)
-1
3/1,5
-1
=
3F
0
0
0
Nytt skript
› Indata som i förra skriptet
% Indata:
A = 50; % mm2
E = 70000; % MPa
L1 = 1.5; % m
L2 = 2; % m
F = 100000; % N
› Alternativt kan input användas för att läsa in en eller flera
av variablerna när funktionen körs.
Nytt skript
› Mata in matriser och lös ekvationssytsemet
% Definera matriser:
A = [1.5 3 0 0 ;
L1/E/A 0 -1 0 ;
0 L2/E/A 0 -1 ;
0 0 3/1.5 -1 ];
b = [ 3*F ; 0 ; 0 ; 0];
% Lös ekvationssystemt och lagra svarsmatrisen x
x = A\b;
% Hämta delta2 från 4e raden i 1a kolumnen i matrisen x
delta2 = x(4,1);
% Räkna ut vinkeln alfa och printa till skärm;
alfa = atand(delta2/3)
› Alternativt kan funktionen fprintf användas för att printa
svaret till skärmen.
Anonyma funktioner
› Exempel f = @(x) x^2 + 2*x -1 definierar funktionen f
som polynomet x2+2x-1, den funktionen f kan nu användas
på samma sätt som de inbyggda funktionerna.
› Om funktionen har flera variabler skiljs dessa åt med ett
kommatecken: f = @(x,y) x^2 + y.
› (Det är även möjligt skapa mer avancerade funktioner, som
sparas i sin egen textfil. Mer om detta i en senare
föreläsning.)
Eget arbete (förslag):
› Läs avsnitten 1.1 - 1.6, 2.1 - 2.4 och 3.1 - 3.5.
› Modifiera det sista skriptet så att funktionerna input och
fprintf används för att läsa in och skriva ut data.
› Några lämpliga instuderingsfrågor/övningsuppgifter i boken:
1.9 1.10.1-2 2.6.4-5
2.6.8-12
2.7.3-6.