www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Mathe-Software" - Matlab
Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Mathe-Software"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Matlab: Gaußsches Eliminationsverfahre
Status: (Frage) beantwortet Status 
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.

        
Bezug
Matlab: Antwort
Status: (Antwort) fertig Status 
Datum: 15:25 Mo 15.01.2007
Autor: Martin243

Hallo,

und [willkommenmr]

> 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

Bezug
                
Bezug
Matlab: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
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

Bezug
                
Bezug
Matlab: Frage (beantwortet)
Status: (Frage) beantwortet Status 
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
    

Bezug
                        
Bezug
Matlab: Antwort
Status: (Antwort) fertig Status 
Datum: 14:56 Di 16.01.2007
Autor: Martin243

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

Bezug
                                
Bezug
Matlab: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
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 [willkommenmr]
>  
> > 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


Bezug
                                        
Bezug
Matlab: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
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

Bezug
                
Bezug
Matlab: Rückfrage
Status: (Mitteilung) Reaktion unnötig Status 
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

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Mathe-Software"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]