www.vorkurse.de
Ein Projekt von vorhilfe.de
Die Online-Kurse der Vorhilfe

E-Learning leicht gemacht.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Teams · Forum · Wissen · Kurse · Impressum
Forenbaum
^ Forenbaum
Status Mathe-Vorkurse
  Status Organisatorisches
  Status Schule
    Status Wiederholung Algebra
    Status Einführung Analysis
    Status Einführung Analytisc
    Status VK 21: Mathematik 6.
    Status VK 37: Kurvendiskussionen
    Status VK Abivorbereitungen
  Status Universität
    Status Lerngruppe LinAlg
    Status VK 13 Analysis I FH
    Status Algebra 2006
    Status VK 22: Algebra 2007
    Status GruMiHH 06
    Status VK 58: Algebra 1
    Status VK 59: Lineare Algebra
    Status VK 60: Analysis
    Status Wahrscheinlichkeitst

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
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
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.vorkurse.de
[ Startseite | Mitglieder | Teams | Forum | Wissen | Kurse | Impressum ]