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

Der Laplace'sche Entwicklungssatz

 

P_P
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 27.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.11.2014, 23:13     Titel: Der Laplace'sche Entwicklungssatz
  Antworten mit Zitat      
Hallo,

ich belege gerade einen Einsteigerkurs in Matlab. Im Rahmen der Veranstaltung soll ich eine Funktion schreiben, welche die Determinante einer nxn Matrix nach dem Laplace'sche Entwicklungssatz bestimmt. Hier das Programm das ich geschrieben habe. Für Matrixen mit der Dimension 1x1, 2x2 und 3x3 werden korrekte Werte ausgespuckt. Ab 4x4 werden falsche Werte ausgespuckt. Den Grund hierfür habe ich noch nicht gefunden. Vielleicht habt ihr ja eine Idee!

Code:
%d wird aus dem Hauptprogramm heraus mit 0 initialisiert
function d=Det(A,d)
   
   [m,n]=size(A);
   C=2:m;
   B=1:m;

            if m==1 % Sonderfall: 1x1 Matrix
                d=A(1,1);
            end
            if m==2 % Sonderfall: 2x2 Matrix
               d=A(1,1)*A(2,2)-A(1,2)*A(2,1);
            end
            if m>2;

                for j=1:n
           
                    D=A([C],[B(B~=j)]);

                    d=d+(-1)^(j+1)*A(1,j)*Det(D,d); % rekursive Berechnung

                end
            end
       
end



 



MfG
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 28.11.2014, 15:10     Titel:
  Antworten mit Zitat      
Schöne Aufgabe Very Happy ! Der Fehler liegt in der Übergabe von d beim rekursiven Aufruf.

Code:

%d wird aus dem Hauptprogramm heraus mit 0 initialisiert
function d = DetMatrix(A,d)
   
    [m,n]=size(A);
    if n == m
        C=2:m;
        B=1:m;

        if m == 1 % Sonderfall: 1x1 Matrix
            d = A(1,1);
        elseif m == 2 % Sonderfall: 2x2 Matrix
            d = A(1,1)*A(2,2)-A(1,2)*A(2,1);
        elseif m > 2;
            for j=1:n
                D = A(C,B(B~=j));  
                d = d + ((-1)^(j+1))* A(1,j) * DetMatrix(D,0); % rekursive Berechnung
            end
        end
    else
        disp('A is not a square matrix!');
    end
end
 


Um die Anzahl an Rechenoperationen zu verringern, könnte man jetzt noch als Optimierung bestimmen nach welcher Reihe entwickelt werden soll. Also nach der Reihe mit den meisten Nullen Wink

Es ist übrigens nicht gut Matlab Funktionen wie

Code:


durch eigene Funktionen zu ersetzen. Daher habe ich deine Funktion umbenannt.
Private Nachricht senden Benutzer-Profile anzeigen
 
P_P
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 27.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2014, 14:58     Titel:
  Antworten mit Zitat      
Vielen Dank für die schnelle Antwort. Programm funktioniert jetzt 1a!

Gruß
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.