Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 13:03 Mo 15.01.2007 | Autor: | Quigon |
Aufgabe | Erst-Poster
Das Gaußsche Eliminationsverfahren, mit dem man ein Gleichungssystem in Diagonalform bringen
kann, ist ein Beispiel eines Problems, das sich mit einer rekursiven Funktion lösen lässt.
Das Gleichungssystem hat die Koeffizientenmatrix a(k,L) k= 1, ..., m und L = 1 ... n . Man fügt den
Spaltenvektor c an und hat eine Matrix mit m Zeilen und n+1 Spalten.
Die Funktion muss das Folgende machen:
1)Sie prüft, ob die Matrix mehr als eine Zeile und mehr als 1 Spalte hat. Hat sie nur eine Zeile oder nur
eine Spalte gibt sie die übergebene Matrix zurück.
2) Falls sie mindestens 2 Zeilen und 2 Spalten hat, werden die Elemente der ersten Spalte untersucht.
Falls alle gleich Null sind wird der folgende Schritt 3 übersprungen.
3) Die Matrix wird in der folgenden Weise verändert: Der erste Koeffizient der obersten Zeile muss
ungleich Null sein. Die erste Zeile mit einem solchen Element wird nötigenfalls mit der obersten Zeile
vertauscht. Dann werden die Zeilen zwei und folgende verändert: Es wird jeweils ein Vielfaches der
obersten Zeile addiert, sodass das erste Element zu Null wird.
4) Die Untermatrix, die durch Streichen der ersten Zeile und der ersten Spalte entsteht wird durch
Aufruf der Funktion Gauss_Elim verändert und in die Matrix eingesetzt. |
Frage 1: Wie kann ich die Aufgabenstellung 2 lösen?
Frage 2: Wie kann ich ohne den Befehl rref die Aufgabe lösen?
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Hallo,
und
> Frage 1: Wie kann ich die Aufgabenstellung 2 lösen?
Das geht z.B. mit:
if any(a(:,1)),
<Schritt 3>
end;
Falls also ein Element in der erste Spalte ungleich 0 ist, wird Schritt 3 ausgeführt.
> Frage 2: Wie kann ich ohne den Befehl rref die Aufgabe lösen?
Hmm, etwas seltsame Frage. rref würde die Aufgabe in einer Zeile lösen.
Du sollst aber selbst die Funktion schreiben. Dui musst dich wirklich nur an die vier Schritte halten, dann bist du fertig. Die Funktion ruft sich rekursiv so lange auf, bis sie an der Rekursionsbasis (1 Zeile oder 1 Spalte) angekommen ist. Dann ist die Aufgabe auch schon gelöst. Meine Lösung hierzu passt in 8 Zeilen, darf aber ruhig länger sein.
Falls du größere Probleme mit Matlab haben solltest, kannst du ja noch mal fragen.
Zum Suchen der Nichtnull-Elemente in Schritt 3 empfehle ich die Funktion find.
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 09:32 Di 16.01.2007 | Autor: | Quigon |
Ok, naja Erstes Semeser Optoelektronik und mein P.... hat selbst keien ahnung von MATLAB. Das ist das Problem und wir haben nur Therorie gehabt mehr auch nicht
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 11:26 Di 16.01.2007 | Autor: | Quigon |
Das ist bis jetzt unsere Programmcode
%Script Gaussches Eliminationsverfahren
[mm] m_t=input('Gebe [/mm] Anzahl der Zeilen an ');
[mm] n_t=input('Gebe [/mm] Anzahl der Spalten an, ');
%eventuell auch ausage treffen [mm] n_t=m_t-1; [/mm]
[mm] %n_t=m_t-1;
[/mm]
[mm] m=m_t; [/mm] %m für Zeile
[mm] n=n_t; [/mm] %n für Spalte
A=floor(3*rand(n,m));
b=floor(3*rand(n,1));
C=[A,b]
display(C);
if n==1 & m==1 %Schritt 1
display(C);
end
if any(C(:,1)); %Schritt 2
|
|
|
|
|
Hallo,
fangen wir mal von vorne an:
Eure Funktion soll Gauss_Elim heißen. Also müsst ihr eine leere Datei mit dem Namen Gauss_Elim.m erzeugen.
In die erste Zeile muss ein Funktionsheader. Da ihr ein Argument und einen Rückgabewert habt, müsste der so aussehen:
function A = Gauss_Elim(A)
Jetzt geht es mit den vier Schritten los.
Schaut euch jeden Schritt einzeln genau an, vor allem die Bedingungen (ob da UND oder ODER steht!).
Das Zurückgeben der Matrix in Schritt 1 geschieht durch return, nicht durch display! (Rückgabe ist nicht dasselbe wie Ausgabe!)
In Schritt 3 solltet ihr die Funktion find auf die erste Spalte der Matrix A anwenden. Das erste Element des Ergebnisses ist die gesuchte Zeilennummer. Dann vertauscht ihr die 1. Zeile mit der gefundenen Zeile.
In Schritt 4 ruft ihr einfach eure Funktion Gauss_Elim auf der Teilmatrix auf (siehe Aufgabenstellung) und ersetzt die ursprünglichen Elemente von A durch das Ergebnis.
Dazu müsst ihr euch aber schon etws mit dem Umgang mit Matrizen in Matlab auskennen! Schaut doch bitte in die Hilfe.
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:40 Mi 17.01.2007 | Autor: | Quigon |
function A = Gauss_Elim(A)
[mm] m_t=input('Gebe [/mm] Anzahl der Zeilen an : ');
[mm] n_t=input('Gebe [/mm] Anzahl der Spalten an : ');
[mm] m=m_t; [/mm] %m für Zeile
[mm] n=n_t; [/mm] %n für Spalte
A=floor(4*rand(n,m));
b=floor(10*rand(n,1));
C=[A,b]
if n==1 & m==1 %Schritt 1
display (A);
end
if m>1 & n>1
if C(:,1)==0
[mm] sub_A= [/mm] Gauss_Elim(A);
end
while C(1,1)==0 %Schritt 3
i=C(1,:);
C(1,:)=C(m,:);
C(m,:)=i;
end
end
Das ist der Quelltext den wir bisher haben uns fehlt nur noch der Algorithmus zum Schritt 3 kannst du uns beim Programieren Helfen???
b=floor(10*rand(n,1));
C=[A,b]
if n==1 & m==1 %Schritt 1
display(C);
end
Bitte um dringende Hilfe> Hallo,
>
> und
>
> > Frage 1: Wie kann ich die Aufgabenstellung 2 lösen?
> Das geht z.B. mit:
>
> if any(a(:,1)),
> <Schritt 3>
> end;
>
> Falls also ein Element in der erste Spalte ungleich 0 ist,
> wird Schritt 3 ausgeführt.
>
>
> > Frage 2: Wie kann ich ohne den Befehl rref die Aufgabe
> lösen?
> Hmm, etwas seltsame Frage. rref würde die Aufgabe in einer
> Zeile lösen.
> Du sollst aber selbst die Funktion schreiben. Dui musst
> dich wirklich nur an die vier Schritte halten, dann bist du
> fertig. Die Funktion ruft sich rekursiv so lange auf, bis
> sie an der Rekursionsbasis (1 Zeile oder 1 Spalte)
> angekommen ist. Dann ist die Aufgabe auch schon gelöst.
> Meine Lösung hierzu passt in 8 Zeilen, darf aber ruhig
> länger sein.
> Falls du größere Probleme mit Matlab haben solltest,
> kannst du ja noch mal fragen.
>
> Zum Suchen der Nichtnull-Elemente in Schritt 3 empfehle ich
> die Funktion find.
>
>
> Gruß
> Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:53 Mi 17.01.2007 | Autor: | Martin243 |
Hallo,
bitte lies dir doch wenigstens meine Beiträge durch! Das display hat dort nichts zu suchen. Außerdem wird die gesamte Matrix (ich habe sie mal A genannt) an die Funktion übergeben. Warum sollte also in der Funktion eine neue erzeugt werden? Mit size kann man die Größe der Matrix bestimmen.
Und schau dir die Bedingungen NOCHMAL an: Wenn da ODER steht, kannst du kein UND nehmen!
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:06 Di 16.01.2007 | Autor: | Quigon |
Mein Komunitone und ich wir wissen einfach nicht weiter. Unser Prof gibt uns keine Tips. Und wir dürfen kein rref und lu verwenden. wir brauchen dringen hilfe wir wissen echt nicht mehr weiter... das ist unser Ansatz den wir bisher jetzt haben
%Script Gaussches Eliminationsverfahren
[mm] m_t=input('Gebe [/mm] Anzahl der Zeilen an : ');
[mm] n_t=input('Gebe [/mm] Anzahl der Spalten an : ');
[mm] m=m_t; [/mm] %m für Zeile
[mm] n=n_t; [/mm] %n für Spalte
A=floor(5*rand(n,m));
b=floor(10*rand(n,1));
C=[A,b]
if n==1 & m==1 %Schritt 1
display(C);
end
Bitte um dringende Hilfe
|
|
|
|