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.