Sie sind auf Seite 1von 20

MATLAB Programme

Skripte sind

• Sammlung von Anweisungen, die der Reihe nach ausgeführt werden

• Im MATLAB editor geschrieben (oder beliebiger Texteditor)

• Files mit Endung .m

Commandline: edit Scriptname.m erzeugt neues Skript

Oder “New Script” Button / CRTL+N

© FH Technikum Wien AUGUST 2021 1


MATLAB Skripte
• Skripte eher statisch, ohne expliziten Input und Output, Skripte können auf alle
Variablen im Workspace zugreifen

• Alle Variablen, die in einem Skript definiert werden behalten ihren Wert nach
der Ausführung des Skripts

• 2 Typen von m-files: Scripts und Functions (später)

• Alles nach einem % ist ein Kommentar

• Der erste Kommentarblock wird zum help file des Skripts

• Beginn von Code Blocks mit %%


© FH Technikum Wien AUGUST 2021 2
Bsp.: Wurfparabel
Wurf eines Balls:
Anfangsgeschwindigkeit v0
Winkel θ
v0
vy 𝑥 𝑡 = 𝑣𝑥 ⋅ 𝑡 = 𝑣0 ⋅ cos θ ⋅ 𝑡
θ
vx 𝑔 2
𝑦 𝑡 = 𝑣𝑦 ⋅ t − ⋅ 𝑡
2
𝑔 2
= 𝑣0 ⋅ cos θ ⋅ 𝑡 − ⋅ 𝑡
2

© FH Technikum Wien AUGUST 2021 3


Bsp. Wurfparabel
Skript, das eine Wurfparabel zeichnet, wobei die Abwurfgeschwindigkeit und der Abwurfwinkel
aus dem Workspace übernommen wird. (plot(x,y) um Graphen zu erzeugen)

x(t)=v0*t*cos(theta) % Weite

y(t)=v0*t*sin(theta)-g*t^2/2 % Höhe

𝑔
Flugdauer: 𝑦 𝑇 = 0: 𝑣0 ⋅ sin θ ⋅ 𝑇 − ⋅ 𝑇 2 = 0
2
𝑔 2 2 ⋅ 𝑣0 ⋅ sin(θ)
v0 ⋅ 𝑠𝑖𝑛 θ ⋅ 𝑇 = ⋅𝑇 →T=
2 𝑔

T=2*v0*sin(theta)/g % Gesamtzeit (y(t)=0)


© FH Technikum Wien AUGUST 2021 4
%% Wurfparabel (1)
% Zeichnet Wurfparabel für die Anfangsgeschwindigkeit v_0 und Abwurfwinkel
% theta_0. v_0 und theta_0 sind in km/h und ° und werden aus dem Workspace
übernommen.

% Definiere Input:
v_0=20; % in km/h
theta_0=45; % in °

% Umrechnungen, Wurfdauer
g=9.81; %Erdbeschleunigung, [m/s^2]
v=v_0/3.6; %Umrechnung Geschwindigkeit [km/h] in[ m/s]
theta=theta_0/180*pi; %Umrechnung Abwurfwinkel von [°] auf Bogenmaß
T=2*v*sin(theta)/g; %Wurfzeit gesamt

% Zeitvektor
t=linspace(0,T*1.1); % Zeitvektor
x=v*cos(theta)*t; % x(t)
y=v*sin(theta)*t-g/2*t.^2; % y(t)

© FH Technikum Wien AUGUST 2021 5


% Zeichne Graph
figure; plot(x,y);
xlabel('Weite x (m)');
ylabel('Höhe y (m)');
grid on

© FH Technikum Wien AUGUST 2021 6


Bsp. Wurfparabel
Hilfeeintrag zum Skript: Erster Kommentarblock.

v_0=input(‘prompt’) übernimmt Eingabe und ordnet Variable v_0 zu.

% Input:
v_0=input('Anfangsgeschwindigkeit in (km/h): ');
theta_0=input('Abwurfwinkel (in °): ');

© FH Technikum Wien AUGUST 2021 7


Übungsblock 1
ANGABEN @ MOODLE

© FH Technikum Wien AUGUST 2021 8


Erstellen Sie ein Script, das

y=ln(x)

zwischen x1 und x2 plottet.

x1 und x2 sollen via input eingegeben werden

© FH Technikum Wien AUGUST 2021 9


Logische Operatoren
AND &, &&

OR |, ||

NOT ~

Vergleichsoperatoren: ==, ~=, <, <=, >, >=

help . für eine Liste von Operatoren

any, all, isequal(.,.)

© FH Technikum Wien AUGUST 2021 10


if/else/elseif
if cond %Bedingung, logischer Ausdruck (true oder false)
commands
end

if cond1 % Mehrere Bedingungen mit elseif möglich


commands1
elseif cond2
commands2
else %default, falls keine der Bedingungen erfüllt ist
commands
end
© FH Technikum Wien AUGUST 2021 11
switch/case/otherwise
switch Variable %String oder Zahl
case Wert1 %Wert der switch Variablen
commands1
case Wert2
commands2

 anstatt vieler elseifs…
otherwise
commands
end

© FH Technikum Wien AUGUST 2021 12


Bsp. Wurfparabel
Verwendung der case Struktur um optional Wurfhöhe und Flugzeit auszugeben
Bei strings: s=input(‘prompt’,’s’)  zusätzliches Argument ‘s’, wenn string
eingegeben werden soll

Output zB über disp(…)

A=input('Flughöhe und Wurfzeit anzeigen? (y/n) ','s');

© FH Technikum Wien AUGUST 2021 13


switch A
case 'y'
disp(['Die maximale Höhe ist ' num2str(max(y)) ' m.'])
disp(['Die Flugzeit beträgt ' num2str(T) ' s.'])
case 'n'
disp('Ok. Ciao')
end

• Konvertiere Zahlen zu Strings mit num2str()


• Auch Strings können zu Arrays zusammengefasst werden [‘s1’ ‘s2’ ‘s3’]

© FH Technikum Wien AUGUST 2021 14


for loops
Loop Variable
% bei bekannter Zahl der
• Ein Vektor
Iterationen
• Innerhalb des command Blocks ein Skalar
Syntax: • Muss nicht unbedingt aufeinanderfolgende
for n=1:100 % loop Variable Werte haben
commands % command Block Command Block
end • Alles zwischen for und end

© FH Technikum Wien AUGUST 2021 15


%% Primzahlen zwischen 1 und 100 addieren
x=1:100;
s=0; % Preallocate
for ind=find(isprime(x)) % findet Indizes von x, an
% deren Stelle Primzahlen
% sind. Loop durch [2 3 5...]

s=s+x(ind); % Summation über alle Primzahlen in x,


% für alle ind wird s mit neuem Wert
% überschrieben
end

disp(['sum of primes between 1 and 100: ' num2str(s)])

© FH Technikum Wien AUGUST 2021 16


while loops
Syntax:
while cond % solange cond true ist, werden die folgenden
% Anweisungen ausgeführt
commands % command Block
end
• CRTL+C unterbricht laufende Programme…

• Um einen loop zu verlassen: break

© FH Technikum Wien AUGUST 2021 17


%% while loop - break bsp
x=2e15;
n=0; % Variable um Iterationen zu zählen

while abs(x)>1 % Absolutbetrag von x>1


x=x/2; % Halbiere x
n=n+1; % Counter, zähle Iterationen

if n>50 % bei mehr als 50 iterationen


break; % get me out of here!
end
end
disp(x), disp(n) %Zeige Ergebnis und Iterationszahl an

© FH Technikum Wien AUGUST 2021 18


Übungsblock 2
ANGABEN @ MOODLE

© FH Technikum Wien AUGUST 2021 19


• Schreiben Sie ein Script, das für alle natürlichen Zahlen zwischen 1 und 20
ausgibt, ob diese durch 2, durch 3 oder durch 2 und 3 teilbar sind.

(Verwenden Sie dafür zB die Funktionen mod, num2str)

• Erstellen Sie ein Script, das abhängig von der Tageszeit

Guten Morgen/Guten Abend/Guten Tag! Heute ist der [Datum]. ausgibt.

(Verwenden Sie dafür zB die Funktionen datestr, str2num)

© FH Technikum Wien AUGUST 2021 20

Das könnte Ihnen auch gefallen