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

Korrelation von 2 Variablen auf Gitternetz (lat x lon)

 

stevorino
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 95
Anmeldedatum: 06.12.11
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 20.12.2011, 10:51     Titel:
  Antworten mit Zitat      
Hallo Jan,

Und wenn ich statt
Code:
(i,j,:) (i,j,12)
einsetzte, kommt folgende Fehlermeldung:

Code:
??? Attempted to access A(37,1,12); index out of bounds because size(A)=[36,72,12].

Error in ==> correlation at 8
R(i,j)=corrcoef(A(i,j,12),B(i,j,12));



Die Formel findet man in MATLAB help, wenn man corrcoef im Suchfeld eingibt.

Viele Grüße,
Stefan
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.12.2011, 11:07     Titel:
  Antworten mit Zitat      
Hallo Stefan,

Dann wiederhole ich es nochmal:
CORRCOEF gibt eine Matrix zurück. Und R(i,j) ist ein Skalar.
U.a. deshalb wird mit nicht klar, was Du berechnen möchtest. Kannst Du die entsprechenden mathematischen Formeln posten?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
stevorino
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 95
Anmeldedatum: 06.12.11
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 20.12.2011, 11:13     Titel:
  Antworten mit Zitat      
Hallo Jan,

Ja genau corrcoef gibt eine Matrix zurück. Das möchte ich auch ... eine Matrix (72,36) mit den Korrelationskoeffizienten, die sich bei der Korrelation zwischen der Untervektoren
Code:
A(i,j,:) und B(i,j,:)
ergeben sollen. Also ich habe das Gefühl, dass das was ich möchte nicht funktioniert ...

Und wenn Du immer noch nicht verstehst, was ich machen möchte, dann weiß ich nicht, was oder wie ich es sonst noch erklären sollte. Und welche Formel soll ich posten, die die man unter corrcoef in MATLAB help findet???

Viele Grüße,
Stefan
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.12.2011, 11:28     Titel:
  Antworten mit Zitat      
Hallo Stefan,

Nein. CORRCOEF bereits gibt eine Matrix zurück, wenn Du zwei Vektoren als Input verwendest. Du bekommst also für jeden der 36x72 Punkte eine eigene Matrix! "Der Korrelationskoeffizient" sollte also besser "die Korrelationskoeffizientenmatrix" heißen.

Ich suche nicht nach der Formel, die in CORRCOEF angewendet wird - die kenne ich bereits. Die Frage ist, wie die Formel lautet, mit der Du die Zahlen für die von Dir gewünschten Outputs definierst. Du erklärst Dein Ziel immer wieder mit Worten, aber dies liefert noch keine eindeutige Definition, und folglich läßt sich das auch nicht korrekt programmieren.
Wie genau ist die Zahl definiert, die in R(i,j) steht?
CORRCOEF ist offensichtlich nicht die gesuchte Funktion, da sie ja eine Matrix liefert.

Die zweite Fehlermeldung stammt übrigens daher, dass die erste FOR-Schleife über "i" von 1 bis 72 läuft. Sie darf aber nur bis 36 laufen. Also einfach "i" und "j" in den Schleifen vertauschen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
stevorino
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 95
Anmeldedatum: 06.12.11
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 20.12.2011, 12:27     Titel:
  Antworten mit Zitat      
Hallo Jan,

Ok, diese corrcoef-Funktion ist also nicht geignet für mein Problem. Meine Version 2007 lässt aber leider kaum andere Möglichkeiten zu. Ich habe gesehen, dass MATLAB 2011 mehere Möglichkeiten bietet, um die Korrelation von zwei Vektoren zu berechnen. Ich denke, der Korrelationskoeffizient nach Pearson wäre hier am besten geeignet, aber den gibt es in MATLAB 2007 nicht. D.h. ich müsste die Formel ins Programm einbauen?

Die Formel nach Pearson ist:
Code:


Die habe ich jetzt in mein Programm eingebaut

Code:
R=[];
for i=1:36
for j=1:72
R(i,j)=cov(A(i,j,:),B(i,j,:))/sqrtm(var(A(i,j,:)))*sqrtm(var(B(i,j,:)));
end
end


und es kommt folgende Fehlermeldung:

Code:
??? Error using ==> cov at 37
Inputs must be 2-D.

Error in ==> correlation_GOME2_MODIS at 9
R(i,j)=cov(NO(i,j,:),FC(i,j,:))/sqrtm(var(NO(i,j,:)))*sqrtm(var(FC(i,j,:)));


Viele Grüße,
Stefan
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.12.2011, 14:13     Titel:
  Antworten mit Zitat      
Hallo Stefan,

Zitat:
[code]??? Error using ==> cov at 37
Inputs must be 2-D.

Die Fehlermeldung ist eindeutig.
"NO(i,j,:)" erzeugt ein [1 x 1 x N] Array. Beutze RESHAPE um einen [1 x N] Vektor (was ja eine spezielle 2D [M x N] Matrix ist) zu erzeugen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
stevorino
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 95
Anmeldedatum: 06.12.11
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 20.12.2011, 16:03     Titel:
  Antworten mit Zitat      
Hallo Jan,

Danke für den reshape-Hinweis, das bedeutet, ich möchte jetzt jede einzelne der 2592 Zeilen beider Gruppen miteinander korrelieren über die Pearson Formel.

Code:
A2=reshape(A,2592,12);
B2=reshape(B,2592,12);

R=[];
for i=1:2592
for j=1:12
R(i,j)=cov(A2(i,j),B2(i,j))/sqrtm(var(A2(i,j)))*sqrtm(var(B2(i,j)));
end
end


erzeugt jetzt folgende Fehlermeldung:

Code:
??? Error using ==> schur
Input to SCHUR must not contain NaN or Inf.

Error in ==> sqrtm at 33
[Q, T] = schur(A,'complex');  % T is complex Schur form.

Error in ==> correlation at 12
R(i,j)=cov(A2(i,j),B2(i,j))/sqrtm(var(A2(i,j)))*sqrtm(var(B2(i,j)));


mit dem kann ich überhaupt nichts anfangen. schur??? Falls Du die Lösung hast, wäre ich Dir sehr dankbar, würde das ganze gern bald abschließen.

Viele Grüße,
Stefan
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.12.2011, 18:35     Titel:
  Antworten mit Zitat      
Hallo Stefan,

SQRTM kann verständlicherweise nicht berechnet werden, wenn Elemente NaN sind.

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

Gehe zu Seite Zurück  1, 2

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.