matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 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
Dt. Schulen im Ausland: Mathe-Seiten:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenMatlabCholesky-Zerlegung
Foren für weitere Studienfächer findest Du auf www.vorhilfe.de z.B. Astronomie • Medizin • Elektrotechnik • Maschinenbau • Bauingenieurwesen • Jura • Psychologie • Geowissenschaften
Forum "Matlab" - Cholesky-Zerlegung
Cholesky-Zerlegung < Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Cholesky-Zerlegung: Rückfrage
Status: (Frage) beantwortet Status 
Datum: 20:52 Mo 28.04.2008
Autor: JustSmile

Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.

Ich habe hier einen Code geschrieben (Entwurf) zur Berechnung der Choleskyzerlegung einer Matrix A, der aber natürlich nicht funktioniert^^ Ist auch erst mein drittes Programm, das ich mit matlab schreiben muss und meine kenntnisse und erfahren mit matlab beschränken sich auf ein minimum*g*

Probleme:
1. Das Edit-Programm zeigt mir rote Fehler an, obwohl ich nicht weiß, was falsch ist
2. Ich weiß nicht, ob ich das mit dem zuweisen der [mm] c_k_l [/mm] so machen kann
3. Ich habe null Ahnung, wie ich aus den einzelnen Werten am Ende meine Matrix C darstellen kann.

Für eine Antwort wäre ich sehr dankbar :-) Muss meine Übung schon am Mittwoch abgeben, damit ich am Freitag nach 1. Mai frei hab^^
Danke und lg JustSmile


Hier nun der Code:

% Funktion zur Berechnung der Choleskyzerlegung
function cholesky
format;
A=input('Geben Sie eine beliebige, positiv definite nxn-Matrix ein:','s');
tic;
if size(A,1)~=size(A,2)
    disp('Sie haben keine nxn Matrix eingegeben.');
else
    n=size(A,1);
end
k=1;
p=0;
% Berechnen des ersten Matrixeintrages von C
c_1_1=sqrt(A(1,1));
% Berechnen der restlichen Diagonalenglieder von C
while k<n
    p=p+(c_k_k)^2;
    k=k+1;
    D=A(k,k)-p;
    if D<=0
        disp('Sie haben keine positiv definite Matrix eingegeben.');
    else
        c_k_k=sqrt(D);
    end
end
% Berechnen der restlichen Glieder - spaltenweise, angefangen mit der
% ersten
k=0;
l=0;
p=0;
% While-Schleife, die die Spalten von C von rechts nach links durchläuft
while l<(n-1)
    l=l+1;
    k=l;
    % While-Schleife, die die einzelnen Werte der jeweiligen Spalte von
    % oben nach unten durchläuft, wobei jeweils unterhalb der
    % Hauptdiagonalen angefangen wird
    while k<n
        k=k+1;
        if l==1
            p=0;
        else
            for h=1:(l-1)
                p=p+(c_k_h)*(c_(l-1)_h);
            end
        end
        c_k_l=(A(k,l)-p)*(1/c_l_l);
    end
end
% Ausnullen aller übriger Matrixwerte
l=1;
k=0;
while k<(n-1)
    k=k+1;
    l=k;
    while l<n
        l=l+1;
        c_k_l=0;
    end
end
C=[[c_1_1:c1_n]:[c_n_1:c_n_n];
disp('Die Matrix der Choleskyzerlegung zu Ihrer Matrix sieht wie folgt aus:');
disp(C);
t=toc;
fprintf('%d Sekunden wurden zur Berechnung benötigt\t',t);


PS: Gibts ne andere Möglichkeit, die Formelzeichen zu deaktivieren?!?

        
Bezug
Cholesky-Zerlegung: Antwort
Status: (Antwort) fertig Status 
Datum: 21:15 Mo 28.04.2008
Autor: vivo

hallo,

was genau geht denn nicht ????

hier ist mal pseudo code, so werden einfach die alten [mm] a_{ij} [/mm] überschreiben:

for i := 1 to n do  
  for j := 1 to i-1 do
      [mm] a_{ij} [/mm] := [mm] (a_{ij} [/mm]  - [mm] \summe_{k=1}^{j-1} a_{ik} a_{jk}) [/mm] / [mm] a_{jj} [/mm]
          [mm] a_{ii} [/mm] := [mm] \wurzel{a_{ii} - \summe_{k=1}^{j-1} a_{ik}^2} [/mm]
  end
end

musst halt die summen noch als schleifen bauen und dass wars dann eigentlich schon. Matrix a rein und schleifen laufen lassen.

gruß


Bezug
                
Bezug
Cholesky-Zerlegung: Frage (reagiert)
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 21:43 Mo 28.04.2008
Autor: JustSmile

Das habe ich prinzipiell auch so gemacht:

Sei [mm] G=(g_i_j) [/mm]
Dann ist für i<j [mm] g_i_j=0 [/mm]
Dann ist für i=j [mm] g_i_j=Wurzel a_i_i-Summe... [/mm]
Dann ist für i>j [mm] g_i_j=(a_i_j-Summe...)*(1/g_j_j) [/mm]

Mein Problem besteht ja auch nicht darin, die Rechnung zu programmieren, sondern darin, hinterher meine Matrix angezeigt zu bekommen!
Die Fehler, die mir der Editor anzeigt, verstehe ich ja gerade nicht, was da falsch ist!

Für eine konstruktive Antwort bezüglich meines Matrix-Ausgabe-Problems wäre ich immernoch dankbar :-)
Bzgl. deiner Nachfrage, was da nicht funktioniert: Matlab führt ein Programm nur aus, wenn keine roten Fehler mehr angezeigt werden! Am einfachsten ist es, wenn du den Code einfach in den Editor lädst, dann zeigt der dirs rechts schon an - geht leichter als hier zu beschreiben, wo ihr die Fehler findet.
Trotzdem danke für die Mühe.
lg

Bezug
        
Bezug
Cholesky-Zerlegung: Antwort
Status: (Antwort) fertig Status 
Datum: 22:01 Mo 28.04.2008
Autor: BKM

Guten Abend.

Ich habe Dein [a]ProgrammProgramm mal etwas überarbeitet und ohne Fehler zum laufen gebracht. Was ich NICHT geprüft habe, ist die mathematische Seite. D.h. ob Du die Formel(n) für die Cholesky-Zerlegung richtig eingegeben hast, ist von mir ungeprüft. Es laeuft lediglich dein Programm ohne Fehler mit der Nachricht nach dem Befehl Run ( Enter):Geben Sie eine beliebige, positiv definite nxn-Matrix ein:

Beste Grüße.


Dateianhänge:
Anhang Nr. 1 (Typ: m) [nicht öffentlich]
Bezug
                
Bezug
Cholesky-Zerlegung: Rückfrage
Status: (Frage) beantwortet Status 
Datum: 22:37 Mo 28.04.2008
Autor: JustSmile

Erstmal super vielen Dank! Auch wenn ich nicht weiß, was jetzt das einfügen der kommentare genau geändert hat für matlab^^
Ich habe jedenfalls mein Programm jetzt nochmal überarbeitet und mein Problem bereits gelöst, allerdings läuft mein Programm noch nicht ganz rund. Für einen Rat zu folgenden Problemen wäre ich dankbar:

1. Es kommt JEDES mal meine Meldung, ich habe keine nxn-matrix eingegeben (Zeile 8-10)
2. Es kommt die Fehlermeldung, er sqrt wäre nicht Definiert für char (Zeile 16)

Was ist da los? Ich komme leider noch nicht weiter :-/

Und noch eine Frage: gibt es einen Code in matlab, mit dem man eine positiv-definite matrix zufällig erstellen kann wie z.b. zeros(n) oder so?

Danke nochmals und einen schönen Abend! ;-)

Hier der neue Code, der auf jeden fall ausführbar ist: [a]Cholesky

Dateianhänge:
Anhang Nr. 1 (Typ: txt) [nicht öffentlich]
Bezug
                        
Bezug
Cholesky-Zerlegung: Antwort
Status: (Antwort) fertig Status 
Datum: 17:20 Di 29.04.2008
Autor: Rene

Hallo erstmal!

Du musst in der Zeile A=input(...) den parameter 's' entfernen. Der sagt nämlich, das die Eingabe als string interpretiert werden soll. Folge du hast in A einen String. Wenn du jetz versuchst aus einem Element von A, was ja dan ein char ist die Wurzel zu ziehen geht das natürlich nicht.

Danach läuft das M-File durch, aber das Ergebnis ist falsch, da du das 2. Diagonal-Element erst berechnen kannst, wenn du die 1. Spalte bzw. Zeile von L, bei dir C, vollständig berechnet hast, da du die Eintrgäge ja benötigst um [mm]c_{ii}[/mm] zu berechnen.

Ich hab die Zerlegung mal als function geschrieben, vielleicht hilft dir das ja deinen Fehler zu beheben.

[a]cholesky.m

Die Datei muss natürlich, wenn man sie als function aufrufen möchte, auch als cholesky.m gespeichert werden

MFG

Dateianhänge:
Anhang Nr. 1 (Typ: m) [nicht öffentlich]
Bezug
                                
Bezug
Cholesky-Zerlegung: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 22:14 Di 29.04.2008
Autor: JustSmile

Danke Danke Danke!!!!!!!!!!!
Hat mir super geholfen, auf die sache mit dem 's' wäre ich nie gekommen, weil ich noch ein totaler matlab neuling bin und das erst das 3. programm ist^^
Vielen Vielen Danke nochmal für die ganze Mühe!
lg

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.matheraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]