WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Pivotisierung und Gauß-Jordan

 

Chriss

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.01.2011, 11:33     Titel: Pivotisierung und Gauß-Jordan
  Antworten mit Zitat      
Hallo,
Hab ein kleines Problem ich
versteh nicht ganz diesen Algorithmus, vieleicht könnte mir jemand den source code erklären. Und wie könnte ich eine Spaltenpivotisierung in den Code Implementieren?
Es wird die erweiterte Koeffizientenmatrix übergeben.

Code:
function [x] = gajo(AB)

[n,m] = size(AB);

for k = 1:n

 

  for i = 1:n
     
    if i ~= k
     
         
       term = AB(i,k)/AB(k,k);
       
       for j = k:m
           
          AB(i,j) = AB(i,j) - term*AB(k,j);
       end
    end
  end


  temp = AB(k,k);
  for j = k:m
    AB(k,j) = AB(k,j)/temp;
  end

end

x = AB(:,m);
 
[/code]


_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 05.01.2011, 12:00     Titel:
  Antworten mit Zitat      
Ist es wirklich nötig zweimal den gleichen Thread zu erstellen?

http://www.gomatlab.de/hilfe-bei-al.....-jord-mit-piv-t15964.html

ich kenne den genannten Algorythmus nicht aber was verstehst du am Code nicht? Weißt du nicht was "size" macht? das gibt die die Spalten und Zeilenanzahl deiner Matrix AB zurück.
Weißt du denn was der Gauß-Jordan Algo machen soll? oder scheitert es schon an der Theorie zu diesem Source code?
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Chriss

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.01.2011, 12:34     Titel:
  Antworten mit Zitat      
Hey Peter,

ich versteh den Gauß Jordan und auch was size macht, aber eine Erklärung zu den einzelnen Schleifen und Anweisung wären wirklich hilfreich.

Danke dir
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 05.01.2011, 15:24     Titel:
  Antworten mit Zitat      
OK, ich habe mir mal den Gauß Jordan Algo angeguckt. Ich kenne den doch nur hab ich den Namen vergessen.

Dann versuchen wir mal einen Durchlauf.

Ausgangsmatrixsystem:
Code:

AB =

     1     1     1     0
     4     2     1     1
     9     3     1     3
 


Das geben wir in den Code:
Code:

function [x] = gajo(AB)

[n,m] = size(AB);    % n = 3(Zeilen), m = 4(Spalten)

for k = 1:n     % Schleife über alle Zeilen
  for i = 1:n     % Zweite Schleife über alle Zeilen
    if i ~= k         % Wenn Zählvariable i ungleich Zählvariable k, damit wird sichergestellt, dass die Hauptdiagonale nicht eliminiert wird.
       term = AB(i,k)/AB(k,k);       % Im ersten behandelten Fall liegt vor: i = 2, k = 1 -> AB(i, k) = 4 und AB(k,k) = 1 => term = 4
       for j = k:m          
          AB(i,j) = AB(i,j) - term*AB(k,j);    %Im ersten behandelten Fall liegt vor: i = 2, j = k = 1 -> AB(i, j) = 4, AB(k,j) = 1 => neue AB(i,j) = 4 - 4*1 = 0
       end
    end
  end
%Wenn es bis hier durchgelaufen ist, dann sieht AB wie folgt aus:
%
%AB =
%     1     1     1     0
%     0    -2    -3     1
%     0    -6    -8     3

  temp = AB(k,k);    % k = 1; AB(k, k) = 1
  for j = k:m
    AB(k,j) = AB(k,j)/temp;    % AB(k,j) = 1, temp = 1 => 1
  end
end

x = AB(:,m);
 


Also die erste innere Schleife wird geschaut dass in der aktuell zu behandelden Spalte alle Werte ausser das der Hauptdiagonalen auf 0 gerechnet werden.
In der zweiten inneren Schleife wird geschaut dass der zu verrechnende Faktor in die restlichen Zahlen der Zeile einfließt.

Lass mal folgendes laufen und schau dir an ob du Schritt für Schritt
mitkommst.
Code:

AB = [1, 1, 1, 0;4, 2, 1, 1;9, 3, 1, 3]
[n,m] = size(AB)

for k = 1:n
  for i = 1:n    
    if i ~= k
       AB(i,k)
       AB(k,k)
       term = AB(i,k)/AB(k,k)
       for j = k:m
          AB(i,j)
          AB(k,j)
          AB(i,j) = AB(i,j) - term*AB(k,j)
       end
    end
  end
  temp = AB(k,k)
  for j = k:m
    AB(k,j)
    AB(k,j) = AB(k,j)/temp
  end
end
x = AB(:,m)
 

_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
chriss

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.01.2011, 15:44     Titel:
  Antworten mit Zitat      
Super!!

Mir ist jetzt eigentlich alles klar. Nur versteh ich noch nicht ganz für was das temp gut ist?
Und wie könnte ich noch die Spaltenpivotisierung implementieren?

Vielen dank

lg chriss
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 05.01.2011, 16:16     Titel:
  Antworten mit Zitat      
Hallo Chriss,

Zitat:
Nur versteh ich noch nicht ganz für was das temp gut ist?
Und wie könnte ich noch die Spaltenpivotisierung implementieren


Code:
 temp = AB(k,k)
  for j = k:m
    AB(k,j)
    AB(k,j) = AB(k,j)/temp
  end

Ohne die Verwendung von "temp", würde der Wert von AB(k,k) ja in der ersten Iteration überschrieben werden.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.