14
Vortrag 14. Matrizen / Determinanten / Array 1. Vorbereitungen für QtOctave Fenster Beim Starten der Anwendung „OtOctave“ sollten Sie folgendes Fenster sehen können. Die Werkeinstellungen für die Anzeigefenster in QtOctave sind nicht optimal eingestellt. Um besser damit arbeiten zu können, empfiehlt es sich, die in dem nachfolgenden Bild dargestellten Schritte auszuführen. Seite von 1 14

Vortrag 14. Matrizen / Determinanten / Array! 1 ...petra/mathe/Octave_E_Book/6_Matrizen... · dies deutlich: Ein Vektor wird beginnend mit der 1 bis inklusive 5 mit einer Standardschrittweite

Embed Size (px)

Citation preview

Page 1: Vortrag 14. Matrizen / Determinanten / Array! 1 ...petra/mathe/Octave_E_Book/6_Matrizen... · dies deutlich: Ein Vektor wird beginnend mit der 1 bis inklusive 5 mit einer Standardschrittweite

Vortrag 14. Matrizen / Determinanten / Array!!1. Vorbereitungen für QtOctave Fenster!!Beim Starten der Anwendung „OtOctave“ sollten Sie folgendes Fenster sehen können.!

!Die Werkeinstellungen für die Anzeigefenster in QtOctave sind nicht optimal eingestellt. Um besser damit arbeiten zu können, empfiehlt es sich, die in dem nachfolgenden Bild dargestellten Schritte auszuführen.!

Seite � von �1 14

Page 2: Vortrag 14. Matrizen / Determinanten / Array! 1 ...petra/mathe/Octave_E_Book/6_Matrizen... · dies deutlich: Ein Vektor wird beginnend mit der 1 bis inklusive 5 mit einer Standardschrittweite

!!1. Beim Betätigen dieser Schaltfläche wird das Editor-Fenster geöffnet.!2. Beim Betätigen dieser Schaltfläche werden beide Fenster (Terminal & Editor) aus dem

maximieren Zustand nebeneinander angeordnet.!

!Diese Schritte sind zwar nicht zwingend erforderlich, erhöhen jedoch die Produktivität und Übersichtlichkeit ungemein, da ansonsten häufig zwischen der Terminal- und der Editor-Ansicht gewechselt werden müsste.!!Das nachfolgende Bild veranschaulicht die zwei voneinander getrennten Bereiche.!

Seite � von �2 14

Page 3: Vortrag 14. Matrizen / Determinanten / Array! 1 ...petra/mathe/Octave_E_Book/6_Matrizen... · dies deutlich: Ein Vektor wird beginnend mit der 1 bis inklusive 5 mit einer Standardschrittweite

1. In dem Terminal erscheint die Ausgabe bzw. die Ergebnisse des Skriptes, welches aktuell vom Editor aus ausgeführt wurde. Natürlich können Skripte aus dem Terminal heraus ausgeführt werden, indem der Dateiname ohne Dateiendung in die Befehlszeile (command line) geschrieben und mit Enter bestätigt wird.!

2. Der blau markierte Bereich verfügt über zwei - für Sie - wichtige Sektionen.!1. „File list“ bietet eine Übersicht über sämtliche, dem aktuellen Projekt zugehörigen Skripte.!2. Der Reiter „New“ bezeichnet das aktuelle leere Skript. Beim Speichern eines Skriptes,

verändert sich der Name dieses Reiters zu dem Namen der entsprechenden Skriptdatei.!!Nun wollen wir unser erstes, ausführbares Skript erstellen. Die dazu notwendigen Schritte sind im folgendem Screenshot markiert und in dem darunter stehenden Text erläutert.!

!1. Das Skript soll zwei natürliche Zahlen 5 und 10 miteinander addieren. Dieser mathematischer

Ausdruck wird in die leere Datei geschrieben.!2. Beim Betätigen der Schaltfläche zum Speichern wird ein Dateiname gefordert. Diese Datei wird

im Beispiel „addFiveAndTen“ benannt. Die Dateiendung .m wird automatisch beigefügt.!3. In der Sektion „File list“ ist nun die soeben erstellte Datei „addFiveAndTen.m“ aufgelistet.!4. Beim Betätigen des Bildschirmsymbols wird das soeben erstellte Skript im Terminal links

ausgeführt.!5. Das Ergebnis der Addition von 5 und 10 erscheint nun im Terminal. Einerseits erscheint die

ausgeführte Operation und darunter das zugehörige Ergebnis.!!Darüber hinaus besteht auf anderem Wege die Möglichkeit, in der Sektion „File list“ zugehörige Skripte auszuführen. Dazu muss in der Befehlszeile der Name des auszuführenden Skriptes ohne Dateiendung eingegeben und mit Enter bestätigt werden (siehe unten angefügter Screenshot). Das Ergebnis erscheint natürlich wieder in dem darüber stehendem Terminalfenster.!!!!!!!!

Seite � von �3 14

Page 4: Vortrag 14. Matrizen / Determinanten / Array! 1 ...petra/mathe/Octave_E_Book/6_Matrizen... · dies deutlich: Ein Vektor wird beginnend mit der 1 bis inklusive 5 mit einer Standardschrittweite

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Seite � von �4 14

Page 5: Vortrag 14. Matrizen / Determinanten / Array! 1 ...petra/mathe/Octave_E_Book/6_Matrizen... · dies deutlich: Ein Vektor wird beginnend mit der 1 bis inklusive 5 mit einer Standardschrittweite

!!!!!!!!!. . . !!!

Erzeugungsmöglichkeiten von Matrizen und Vektoren!

!!

. . .!!!!!!!!!!!!!!!!!!! !

Seite � von �5 14

Page 6: Vortrag 14. Matrizen / Determinanten / Array! 1 ...petra/mathe/Octave_E_Book/6_Matrizen... · dies deutlich: Ein Vektor wird beginnend mit der 1 bis inklusive 5 mit einer Standardschrittweite

Matrizen können auf die folgenden Weisen - siehe unten - erzeugt werden.!!

!!Matrizen werden in Octave prinzipiell spaltenweise geschrieben, bis ein Semikolon gefunden wird. Dieses Semikolon gibt an, dass eine neue Zeile mit ebenso vielen Spalten erzeugt werden kann. Wie in der ersten (Zeile 1) und zweiten Matrix (Zeile 2) ersichtlich, müssen die Zeilen mit einem Semikolon ; voneinander abgegrenzt werden. Spalten hingegen können wahlweise mit einem Leerzeichen (Zeile 1) oder mit Kommata (Zeile 3) voneinander getrennt werden.!!Matrizen müssen nicht innerhalb einer Zeile definiert werden, sondern können auch über mehrere Zeilen hinweg geschrieben werden (siehe Zeile 5 - 8).!!Darüber hinaus besteht die Möglichkeit, n Matrizen miteinander zu kombinieren (siehe Zeile 10). Bei diesem Beispiel wird die zweite Matrix rechts an die erste Matrix angefügt. Als Vorbedingung gilt, dass beide Matrizen über dieselbe Anzahl von Zeilen verfügen müssen. Dies gilt allerdings nur dann, wenn beide Matrizenkombinationen nicht mit einem Semikolon getrennt kombiniert werden. Dann ist die Anzahl der Spalten, jedoch nicht die Anzahl der Zeilen von Bedeutung.!!

!Wie oben ersichtlich, gibt es weitere speziellere Funktionen mit denen Matrizen erstellt werden Können. Die Funktion eye(x,y) (siehe Zeile 1) erzeugt eine Diagonalmatrix mit x Zeilen und y Spalten. Zeros(x,y) (siehe Zeile 3) erzeugt eine Nullmatrix mit x Zeilen und y Spalten. Mit Hilfe der Funktion ones(x,y) (siehe Zeile 5) kann eine Einsermatrix mit x Zeilen und y Spalten erstellt werden. !

Editor (Eingabe) Terminal (Ausgabe)

MAT_A = [1 2 3; 4 5 6]!!MAT_B = [1, 2, 3; 4, 5, 6]!!MAT_C = [! 1 2 3;! 4, 5, 6!]!!MAT_D [MAT_A MAT_B]

>>>MAT_A =! 1 2 3! 4 5 6!!>>>MAT_B = ! 1 2 3! 4 5 6!!>>>MAT_C =! 1 2 3! 4 5 6!!>>>MAT_D = ! 1 2 3 1 2 3! 4 5 6 4 5 6!

Editor (Eingabe) Terminal (Ausgabe)

MAT_A = eye(4, 4)!!MAT_B = zeros(3, 5)!!MAT_C = ones(2, 5)!!MAT_D = rand(3, 3)!!MAT_E = floor(rand(3, 3) * 10)!

>>>MAT_A =!Diagonal Matrix! 1 0 0 0 ! 0 1 0 0! 0 0 1 0! 0 0 0 1!!>>>MAT_B = ! 0 0 0 0 0 ! 0 0 0 0 0! 0 0 0 0 0!!>>>MAT_C =! 1 1 1 1 1! 1 1 1 1 1!!>>>MAT_D =! 0.68441 0.85019 0.90939! 0.89654 0.30496 0.94764! 0.76751 0.31870 0.48050!!>>>MAT_E =! 8 4 5! 8 3 9! 0 4 1!

Seite � von �6 14

Page 7: Vortrag 14. Matrizen / Determinanten / Array! 1 ...petra/mathe/Octave_E_Book/6_Matrizen... · dies deutlich: Ein Vektor wird beginnend mit der 1 bis inklusive 5 mit einer Standardschrittweite

!rand(x, y) (siehe Zeile 7) erzeugt eine Matrix mit gleichverteilten Zufallszahlen im Bereich von [0, 1[ im Format von x Zeilen und y Spalten. Wird die rand Funktion in der folgenden Form floor(rand(x, y) * z) verwendet, so wird eine Matrix mit Zufallszahlen beginnend von 0 bis exklusive z ([0, z[) mit x und y Spalten erzeugt.!!Vektoren können ähnlich zu Matrizen in Spalten- bzw. Zeilenform erzeugt werden. In Zeile 1 der nachfolgenden Tabelle wird ein Spaltenvektor mit den Werten 1, 2 und 3 erstellt. Analog dazu wird in Zeile 3 und Zeile 5 jeweils ein Zeilenvektor erstellt. Wie bereits aus der Erstellung von Matrizen bekannt, können Spaltenelemente sowohl mit Leerzeichen als auch Kommata getrennt beschrieben werden. Aus diesem Grund ist der erzeugte Vektor aus Zeile 3 und 5 identisch.!!

!Zusätzlich können Vektoren aus einem definierten Bereich heraus erstellt werden. In Zeile 7 wird dies deutlich: Ein Vektor wird beginnend mit der 1 bis inklusive 5 mit einer Standardschrittweite von 1 erstellt. Die Schrittweite kann jedoch auch beliebig verändert werden. Die Schrittweite kann sowohl eine ganze Zahl als auch eine Fließkommazahl sein. Überschreitet das nächste Inkrement die Obergrenze, so ist dieses Inkrement nicht Teil des erzeugten Vektors. !!Ein Vektor kann anhand eines anderen Vektors gefiltert werden; ein passendes Beispiel ist in Zeile 11 beschrieben. Der Vektor rangeVector_B besteht aus den Zahlen = {1, 2, 3, 4, 5} und der Vektor rowVector_A besteht aus den Zahlen = {1 2 3}. Der innere Vektor - also rowVector_A - bestimmt, welche Elemente aus dem äußeren Vektor - rowVector_B - selektiert werden sollen. Somit soll das erste, das zweite und das dritte Element selektiert und in einen neuen Vektor geschrieben werden. Mit der Funktion linspace(x, y, z) kann ein Vektor [x, y] mit z äquidanten Zwischenelementen zu erstellen. Das bedeutet im Klartext, dass der Bereich [x, y] in z verschiedene Segmente aufgeteilt wird. !!!!!!!!!!!!!

Editor (Eingabe) Terminal (Ausgabe)

columnVector_A = [1; 2; 3]!!rowVector_A = [1 2 3]!!rowVector_B = [1, 2, 3]!!rangeVector_A = [1:5]!!rangeVector_B = [1:2:10]!!rangeVector_B(rowVector_A)!!linVector = linspace(0, 1, 4)!!!!

>>>columnVector_A =! 1! 2! 3!!>>>rowVector_A =! 1 2 3!!>>>rowVector_B =! 1 2 3!!>>>rangeVector_A =! 1 2 3 4 5!!>>>rangeVector_B =! 1 3 5 7 9!!>>>ans =! 1 3 5!!>>>linVector =! 0.00000 0.33333 0.66667 1.00000!

Seite � von �7 14

Page 8: Vortrag 14. Matrizen / Determinanten / Array! 1 ...petra/mathe/Octave_E_Book/6_Matrizen... · dies deutlich: Ein Vektor wird beginnend mit der 1 bis inklusive 5 mit einer Standardschrittweite

!!!!!!!!!!!!!. . .!!!

Spezielle Matrixoperationen!!!

. . .!!!!!!!!!!!!!!!!!!!!

Seite � von �8 14

Page 9: Vortrag 14. Matrizen / Determinanten / Array! 1 ...petra/mathe/Octave_E_Book/6_Matrizen... · dies deutlich: Ein Vektor wird beginnend mit der 1 bis inklusive 5 mit einer Standardschrittweite

Was macht A/A?!A/A ist eine rechte Division (bzw. eine Rechts-Inverse-Multiplikation), was bedeutet, dass die Matrix A mit der inversen Matrix von A multipliziert wird. Analog dazu ist A/A = A\A, wobei A\A = eine linke Division (bzw. eine Links-Inverse-Multiplikation) ist. Hier wird Die inverse Matrix von A mit der Matrix A multipliziert. Wenn die Matrix A linear unabhängig ist, dann entsteht die Einheitsmatrix; ansonsten ergeben die Zeilen und Spalten jeweils den Wert 1 aufsummiert. !!Ein entsprechendes Beispiel kann der nachfolgenden Tabelle entnommen werden.!!

!Was macht (A/A) * A?!Diese Operationsfolge liefert die Ausgangsmatrix A zurück (siehe nachfolgende Tabelle).!!

!Was macht A./A?!Bei dieser Operation werden alle Komponentenelemente von A durch die Komponentenelemente von A dividiert. Es entsteht folglich eine Matrix lauter Einsen mit derselben Anzahl an Zeilen und Spalten; ein Beispiel kann der unten stehenden Tabelle entnommen werden.!!

!!!!!!!!!!!

Editor (Eingabe) Terminal (Ausgabe)

MAT_A = [5 3 2; 6 0 2; 4 8 1]!!MAT_A / MAT_A

>>>MAT_A = ! 5 3 2! 6 0 2! 4 8 1!!>>>ans =! 1.00000 0.00000 -0.00000! 0.00000 1.00000 -0.00000! 0.00000 -0.00000 1.00000!

Editor (Eingabe) Terminal (Ausgabe)

MAT_A = [5 3 2; 6 0 2; 4 8 1]!!(MAT_A / MAT_A) * MAT_A

>>>MAT_A = ! 5 3 2! 6 0 2! 4 8 1!!>>>ans =! 5.00000 3.00000 2.00000! 6.00000 0.00000 2.00000! 4.00000 8.00000 1.00000!

Editor (Eingabe) Terminal (Ausgabe)

MAT_A = [1 2 3; 4 5 6; 7 8 9]!!MAT_A. / MAT_A

>>>MAT_A = ! 1 2 3! 4 5 6! 7 8 9!!>>>ans =! 1 1 1 ! 1 1 1 ! 1 1 1!

Seite � von �9 14

Page 10: Vortrag 14. Matrizen / Determinanten / Array! 1 ...petra/mathe/Octave_E_Book/6_Matrizen... · dies deutlich: Ein Vektor wird beginnend mit der 1 bis inklusive 5 mit einer Standardschrittweite

Rang einer Matrix!Als Rang einer Matrix wird die Anzahl linear unabhängiger Zeilen oder Spalten verstanden und definiert, wie viele unterschiedliche Lösungen ein Gleichungssystem besitzt. Der Rang einer Matrix A kann mit der Funktion rank(A) ermittelt werden. Die folgende Tabelle zeigt ein anschauliches Beispiel.!!

!Der Rang der Matrix A beträgt 2, da die letzte Zeile eine lineare Kombination der -1 * 1. Zeile + 2* 2. Zeile ist.!!Normen einer Matrix!1. Norm!Bei der ersten Norm werden alle Spaltensummen ermittelt. Um die erste Norm einer Matrix A zu ermitteln kann die Funktion norm(A, 1) verwendet werden. Dabei bildet die größte Spaltensumme die erste Norm (siehe nachfolgende Tabelle).!!

!Die erste Norm beträgt dabei 28, da die Spaltensumme der dritten Spalte größer ist als die der ersten und zweiten Spalte.!!2. Norm!Die Euklidnorm ist eine Vektornorm. Die Quadrate aller Einträge werden addiert und die Summe wird die Wurzel gezogen. Die zweite Norm einer Matrix A kann mit der Funktion norm(A, 2) ermittelt werden (siehe Tabelle).!!

!!!!!!!!!

Editor (Eingabe) Terminal (Ausgabe)

MAT_A = [1 2 3; 4 5 6; 7 8 9]!!rank(MAT_A)

>>>MAT_A = ! 1 2 3! 4 5 6! 7 8 9!!>>>ans = 2!

Editor (Eingabe) Terminal (Ausgabe)

MAT_A = [3 -1 5; 6 0 11; 3 1 12]!!norm(MAT_A, 1)

>>>MAT_A = ! 3 -1 5! 6 0 11! 3 1 12!!!>>>ans = 28!

Editor (Eingabe) Terminal (Ausgabe)

MAT_A = [3 -1 5; 6 0 11; 3 1 12]!!norm(MAT_A, 2)

>>>MAT_A = ! 3 -1 5! 6 0 11! 3 1 12!!!>>>ans = 18.393!

Seite � von �10 14

Page 11: Vortrag 14. Matrizen / Determinanten / Array! 1 ...petra/mathe/Octave_E_Book/6_Matrizen... · dies deutlich: Ein Vektor wird beginnend mit der 1 bis inklusive 5 mit einer Standardschrittweite

3. Unendliche Norm!Die dritte Norm ist eine Matrixnorm. Hier wird die Zeile mit der größten Betragsnorm genommen. Um die unendliche Norm einer Matrix A zu ermitteln kann die Funktion norm(A, Inf) benutzt werden. Ein Beispiel ist der nächsten Tabelle zu entnehmen.!!

!Konditionszahl!Die Konditionszahl einer Matrix ist ein Maß für die Stabilität einer Matrix. Je größer die Konditionszahl, umso näher liegt die Matrix bei einer singulären Matrix - also einer Matrix mit einer Determinante gleich 0. Dies kann beispielsweise negative Auswirkungen beim Lösen von linearen Gleichungssystemen haben.!!Die Konditionszahl einer Matrix A kann mit Hilfe der Funktion cond(A) ermittelt werden. Dies ist äquivalent zum Ausdruck ||A||  * ||A-1|| ; folglich wird das Produkt aus der Unendlichen Norm der Matrix A und der Unendlichen Norm der inversen Matrix von A gebildet. !!

!Determinanten!Für die Berechnung der Determinante einer Matrix A kann die Funktion det(A) verwendet werden. Ein Beispiel wird in der nächsten Tabelle gezeigt.!!

!!!!!!!!!!!!

Editor (Eingabe) Terminal (Ausgabe)

MAT_A = [3 -1 5; 6 0 11; 3 1 12]!!norm(MAT_A, Inf)

>>>MAT_A = ! 3 -1 5! 6 0 11! 3 1 12!!!>>>ans = 17!

Editor (Eingabe) Terminal (Ausgabe)

MAT_A = [3 -1 5; 6 0 11; 3 1 12]!!cond(MAT_A, Inf)!!norm(MAT_A, Inf) * norm(inv(MAT_A), Inf)

>>>MAT_A = ! 3 -1 5! 6 0 11! 3 1 12!!!>>>ans = 29.750!>>>ans = 29.750!

Editor (Eingabe) Terminal (Ausgabe)

MAT_A = [3 -1 5; 6 0 11; 3 1 12]!!det(MAT_A)

>>>MAT_A = ! 3 -1 5! 6 0 11! 3 1 12!!!>>>ans = 36!

Seite � von �11 14

Page 12: Vortrag 14. Matrizen / Determinanten / Array! 1 ...petra/mathe/Octave_E_Book/6_Matrizen... · dies deutlich: Ein Vektor wird beginnend mit der 1 bis inklusive 5 mit einer Standardschrittweite

!!!!!!!!! !!!. . .!!

!

Gleichungssystemen!!

!

. . .!!!!!!!!!!!!!!!!!

Seite � von �12 14

Page 13: Vortrag 14. Matrizen / Determinanten / Array! 1 ...petra/mathe/Octave_E_Book/6_Matrizen... · dies deutlich: Ein Vektor wird beginnend mit der 1 bis inklusive 5 mit einer Standardschrittweite

Lösung eines Gleichungssystems nach Gauß!!Mit Hilfe der Funktion rref(Ab) kann von der Matrix Ab (Kombination der Koeffizientenmatrix A und dem Ergebnisvektor b) das Gleichungssystem in eine Zeilenstufenform gebracht und gelöst werden. Ein Beispiel kann der folgenden Tabelle entnommen werden.!!

!!Lösung eines Gleichungssystems über die inverse Matrix!!Die Lösung eines Gleichungssystems kann ebenfalls mit Hilfe von inversen Matrizen ermittelt werden. Dabei wird der Lösungsvektor x gebildet aus x = inv(A) * b, wobei A die Koeffizientenmatrix und b der Ergebnisvektor ist; es wird demnach die Inverse Matrix der Koeffizientenmatrix gebildet.!!Beispielaufgabe: In einem Käfig sind Hasen und Fasane. Sie haben zusammen 35 Köpfe und 94 Füße. Wie viele Hasen und Fasane sind im Käfig? Lösung und Vorgehensweise ist in der folgenden Tabelle beschrieben.!!

!!!!!!!!!!!!

Editor (Eingabe) Terminal (Ausgabe)

MAT_A = [3 -1 5; 6 0 11; 3 1 12]!VEC_B = [-1; -7; 0]!!MAT_VEC = [MAT_A VEC_B]!!rref(MAT_VEC)

>>>MAT_A = ! 3 -1 5! 6 0 11! 3 1 12!!>>>VEC_B = ! -1! -7! 0!!>>>MAT_VEC =! 3 -1 5 -1! 6 0 11 -7! 3 1 12 0!!>>>ans = ! 1 0 0 -3! 0 1 0 -3! 0 0 1 1!

Editor (Eingabe) Terminal (Ausgabe)

Cage = [1 1; 4 2]!!FeedsAndHeads = [35 94]!!inv(Cage) * FeedsAndHeads’

>>>Cage = ! 1 1! 4 2!!>>>FeedsAndHeads = ! 35 94!!>>>ans = ! 12! 23!

Seite � von �13 14

Page 14: Vortrag 14. Matrizen / Determinanten / Array! 1 ...petra/mathe/Octave_E_Book/6_Matrizen... · dies deutlich: Ein Vektor wird beginnend mit der 1 bis inklusive 5 mit einer Standardschrittweite

Lösung eines Gleichungssystems mittels Determinanten (Cramer Regel)!!Eine weitere Möglichkeit zur Lösung eines Gleichungssystems besteht mit der Cramer’schen Regel. Die Cramer’sche Regel definiert sich durch die Bildung partieller Determinanten der Ausgangsmatrix. Der Ergebnisvektor wird iterativ in die nächste Spalte der Ausgangsmatrix eingesetzt und die Determinate davon gebildet. Die Determinate wird dann durch die Determinate der Ausgangsmatrix dividiert. Dieses Vorgehen wird inkrementell für jede Spalte der Ausgangsmatrix vollzogen. Das Ergebnis jeder Division stellt dann die Lösung einer Variablen des Gleichungssystems dar. Hierbei muss beachtet werden, dass die Cramer’sche Funktion in eine separate Datei geschrieben, gespeichert und ausgeführt („Send to Octave“, kleiner schwarzer Bildschirm) werden muss, damit die Funktion in den Speicher geladen wird (siehe folgende Tabelle).!!Als Beispiel wird wieder das Hasen und Fasanen Beispiel verwendet. !!

!Anschließend wird diese Funktion in einer weiteren Datei per Dateiname „cramer(A, b)“ aufgerufen und benötigte Parameter mitgegeben, siehe dazu auf folgender Seite folgende Tabelle:!!

Editor (Eingabe) (Dateiname: cramer.m) Terminal (Ausgabe)

function x = cramer(A, b)! ! if(rank(A) == rank([A b]) && rank(A) == columns(A))! disp("( !!! ) Diese Matrix ist eindeutig lösbar.");! elseif(rank(A) == rank([A b]) && rank(A) < columns(A))! disp("( !!! ) Matrix hat unendlich viele Lösungen! ");! rref([A b])! return;! elseif(rank(A) != rank([A b]))! disp("( !!! ) Matrix hat keine Lösung");! return;! end! ! ! ! n = size(A);! x = [];! ! d = det(A);! ! ! for j = 1:n;! B = A;! B(:,j) = b! h = det(B) / d;! x = [x;h];! end!end

>>> function x = cramer(A, b)! ! if(rank(A) == rank([A b]) && rank(A) == columns(A))! disp("( !!! ) Diese Matrix ist eindeutig lösbar.");! elseif(rank(A) == rank([A b]) && rank(A) < columns(A))! disp("( !!! ) Matrix hat unendlich viele Lösungen! ");! rref([A b])! return;! elseif(rank(A) != rank([A b]))! disp("( !!! ) Matrix hat keine Lösung");! return;! end! ! ! ! n = size(A);! x = [];! ! d = det(A);! ! ! for j = 1:n;! B = A;! B(:,j) = b! h = det(B) / d;! x = [x;h];! end!end!>>>oc!tave:66+>>>>octa!ve:66+>>>>octave!:66+>>>>

Editor (Eingabe) Terminal (Ausgabe)

%Eindeutig lösbar!A = [1 2 3; 0 5 6; 0 0 9]!b = [1 2 3]!!%Unendlich viele Lösungen!%A = [1 2 3; 0 5 6; 0 0 0]!%b = [1 2 0]!!%Keine Lösung!%A = [1 2 3; 0 5 6; 0 0 0]!%b = [1 2 3]!!cramer(A, b')

>>> %Eindeutig lösbar!A = [1 2 3; 0 5 6; 0 0 9]!b = [1 2 3]!!%Unendlich viele Lösungen A = [1 2 3; 0 5 6; 0 0 0] b = [1 2 0]!%Keine Lösung A = [1 2 3; 0 5 6; 0 0 0] b = [1 2 3]!!cramer(A, b')!>>>A =! 1 2 3! 0 5 6! 0 0 9!!>>>b =! 1 2 3!!>>>>( !!! ) Diese Matrix ist eindeutig lösbar.!!…!!ans =! 0.00000! 0.00000

Seite � von �14 14