www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

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:

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.vorhilfe.de