new files

This commit is contained in:
2015-10-22 18:42:40 +02:00
parent b53411fdda
commit 6be1184d8e
13 changed files with 869 additions and 0 deletions

View File

@@ -0,0 +1,127 @@
% Uebungen 3: Boolesche Ausdruecke
%% 1) Boolesche Ausdruecke auf Vektoren
x = [1 5 2 8 9 0 1];
y = [5 2 2 6 0 0 2];
% a
disp('a:')
disp(x > y)
% liefert einern logischen Verktor der 1 an den Stellen ist, an denen der
% Wert in x groesser als der entsprechende Wert in y
% b
disp('b:')
disp(y < x)
% dto., da die Frage nur umgekehrt gestellt wurde
% c
disp('c:')
disp(x == y)
% 1 nur an den Stellen, an denen beide Vektoren geiche Werte enthalten (3
% und 6)
% d
disp('d:')
disp(x ~= y)
% wahr an allen Stellen ausser 3 und 6, da auf ungleichheit der Werte getestet
% wird.
% e
disp('e:')
disp(x & ~y)
% glesen: das Ergebnis sei wahr an den Stellen, an denen x ungleich 0 ist
% (wahr) UND y == 0 (falsch) ist.
% f
disp('f:')
disp(x | y)
% gelesen: das Ergebnis sei wahr an den Stellen, an denen x ODER y ungleich
% 0 ist (alle ausser Nr. 6)
%% 2) bitand und bitor
% a
disp('a:')
disp(bitand(10, 8))
% wenn man sich die Zahlen binaer dargestellt vorstellt, dann werden diese
% binaeren Vektoren mit einem logischen UND bit fuer bit verglichen. Das
% Ergebnis hat eine 1 nur an der 4. Position, der 8.
% b
disp('b:')
disp(bitor(10,8))
% Wiederum binaer dargestellt und mit logischem ODER verglichen. Das
% Ergebnis ist wahr an den Stellen 2 und 4, was der 10 im Dezimalsystem
% entspricht
%% 3) Boolesche Ausdruecke implementieren
% a: Das Ergebnis sei wahr, wenn x groesser als y und die Summe aus x und y
% nicht kleiner als 100 ist.
x > y & (x + y) > 100;
% b: Das Ergebnis sei wahr, wenn x und y ungleich 0 oder x und y gleich sind.
(x & y) | (x == y);
%% 4) Logisches Indizieren
x = (1:10);
y = [3 1 5 6 8 2 9 4 7 0];
% a
disp('a:')
disp(x < 5)
% logischer Vektor, der 1 an den Stellen ist, an denen die Werte in x
% kleiner als 5 sind.
% b
disp('b:')
disp(x( x < 5))
% Die Werte aus x an den Stellen, an denen die Werte in x kleiner als 5
% sind.
% c
disp('c:')
disp(x( (y <= 2) ))
% Die Werte aus x and den Stellen, an denen die Werte in y (!) kleiner oder
% gleich 2 sind.
% d
disp('d:')
disp(x( (x > 2) | (y < 8) ))
% Die Werte aus x an den Stellen, an denen die Werte in x groesse 2 UND die
% Werte in y kleiner 8 sind.
% e
disp('e:')
disp(x( (x == 0) & (y == 0) ))
% Die Werte aus x an den Stellen an denen die Werte in x UND y gleich 0 sind
%% 5) Teste den Zufallsgenerator
x = randi(100, 100, 100); % 1:100
% a
x(x < 33) = 1;
x(x >= 33 & x < 66) = 2;
x(x >= 66) = 3;
% man benutzt das logische Indizieren um all die Were zu ersetzen, die
% einer bestimmten Bedingung entsprechen. z.B: setze all die Werte in x an
% den Stellen, an denen die Werte in x < 33 gleich 1...
% b
disp('Anzahl Werte kleiner 33:')
disp(sum(x(:) == 1))
disp('Anzahl Werte groesser gleich 33 und kleiner 66:')
disp(sum(x(:) == 2))
disp('Anzahl Werte groesser gleich 66:')
disp(sum(x(:) == 3))

View File

@@ -0,0 +1,190 @@
%% Uebung 4 Kontrollstrukturen
clear
close all
%% 1) for-Schleife
% a
for i = 0:10
disp(i)
end
% b
for i = 10:-1:0
disp(i)
end
% c
for i = 0:0.1:1
disp(i)
end
%% 2) Zugriffe auf Vektoren mit der Laufvariable
% a
x = 1:100;
% b
for i = 1:length(x)
disp(x(i))
end
% Die Laufvariable erhaelt mit jedem Iterationsschritt einen neuen Wert.
% Dieser "laeuft" von 1 bis zur Anzahl Element in x. Die Laufvar. wird dann
% als Index benutzt mit dem auf x zugegriffen wird.
% c
for i = x
disp(i)
end
% Alternativ kann man mit der Schleife auch direkt durch den Vektor x
% laufen. Mit jeder Iteration enthaelt i nun einen Wert aus x. Es muss
% nicht mehr mittles Index auf x zugegriffen werden.
%% 3 ) Arithmetisches Mittel, Standardabweichung
x = rand(1,50) .* 10; % rand liefert im Bereich 0 bis 1
% a
mittelwert = [];
summe = 0;
n = length(x);
for i = 1:n
summe = summe + x(i);
end
mittelwert = summe / n;
disp(mittelwert)
% b
% 1. Mittelwert berechnen
mittelwert = [];
summe = 0;
n = length(x);
for i = 1:n
summe = summe + x(i);
end
mittelwert = summe / n;
% 2. Std berechnen
standardabw = [];
summe_quadratische_abw = 0;
for i = 1:n
summe_quadratische_abw = summe_quadratische_abw + (x(i) - mittelwert).^2;
end
standardabw = sqrt(summe_quadratische_abw / n);
disp(standardabw)
% c
disp(mean(x))
disp(std(x,1)) % Wir verwenden eine Formel fuer die std, die in Matlab nicht default ist
%% 4 While Schleife
% a
count = 0;
while count < 100
disp(count)
count = count + 1;
end
% b
% count = 0;
% while true
% disp(count)
% count = count + 1;
% end
%% 5
count = 1;
x = 1:10;
while true
disp(x(count))
count = count + 1;
end
%% 6
% a
while true
x = randn(1,1);
if x > 1.33
break;
end
end
% b
trials = zeros(1000,1);
for i = 1:length(trials)
count = 1;
while true
x = randn(1,1);
if x > 1.33
trials(i) = count;
break;
end
count = count + 1;
end
end
disp(mean(trials))
% c
figure()
plot(trials)
xlabel('Durchgang')
ylabel('Anzahl Versuche')
% d
% Mit groesser werdender Schwelle steigt auch die durchschnittliche Anzahl
% Versuche.
%% 7 Loeschen von Elementen
% a
x = rand(10,1) .* 10;
disp('vorher:')
disp(x)
for i = length(x):-1:1
if x(i) < 5
x(i) = [];
end
end
disp('nachher:')
disp(x)
% Der Trick ist hier nicht von vorne durch den Vektor zu laufen, sondern
% rueckwaerts. Ansonsten laeuft man Gefahr hinter den gekuerzten Vektor zu
% greifen, was zu einem Index exceeds matrix dimensions Fehler fuehren
% wuerde.
% b
x = rand(10,1) .* 10;
disp('vorher:')
disp(x)
for i = length(x):-1:1
if x(i) < 5 & x(i) > 2
x(i) = [];
end
end
disp('nachher:')
disp(x)
% c
x = rand(10,1) .* 10;
disp('vorher:')
disp(x)
x(x < 5 & x >2) = [];
disp('nachher:')
disp(x)
%% 8 Teste den Zufallsgenerator