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
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 95
Anmeldedatum: 06.12.11
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 06.12.2011, 19:02     Titel: Korrelation von 2 Variablen auf Gitternetz (lat x lon)
  Antworten mit Zitat      
Hallo,

Ich habe 2 mal 12 dateien (jeweils Jänner bis Dezember) mit jeweils einem Wert für insgesamt 15 Gitterzellen (5°x5°). Ich möchte für jede Gitterzelle einen Jahresgang für die beiden Werte und anschließend einen Korrelationskoeffizienten zwischen den beiden Werten berechnen. Am Ende soll eine neue Datei entstehen. Anbei eine Beispieldatei (eine von insgesamt 24).

Danke im Voraus,
stno

beispiel.txt
 Beschreibung:

Download
 Dateiname:  beispiel.txt
 Dateigröße:  647 Bytes
 Heruntergeladen:  291 mal
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: 07.12.2011, 12:09     Titel:
  Antworten mit Zitat      
Ich denke ich verstehe den Prozess, der ablaufen soll, aber bei der Umsetzung hapert es ein wenig. Ich habe Schwierigkeiten beim einlesen der Dateien. Es sollen ja nur die 15 Zahlenwerte in die Berechnung einfließen. Und die Enddatei soll dann genauso ausehen wie die Beispielsdatei, nur eben mit den berechneten Korrelationswerten. Mit Excel konnte ich das lösen, dauerte etwas ... möchte das dann eventuell öfters anwenden, deshalb besser mit einem Programm.

Für Hilfe jeglicher Form wäre ich dankbar, indes versuche ich es selbst.
Stno
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: 16.12.2011, 18:34     Titel:
  Antworten mit Zitat      
ok ... hab jetzt nach längerer MATLAB Selbststudium eine Idee. Ich möchte die 2 mal 12 2 dimensionalen arrays, die ich jetzt schon eingelesen habe, zu jeweils einem multidimensionalen array umbauen. Wenn ich das gemacht habe (das schaff ich hoffentlich), wie kann ich dann zwischen diesen beiden 3D arrays einen corrcoef rechnen, so dass ich am Ende ein zweidimensionales array mit den Korrelationskoeffizienten bekomme.

Es ist mir wirklich wichtig, vielleicht kann mir jemand dabei weiter helfen?

Danke im voraus,
stno
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: 16.12.2011, 19:06     Titel:
  Antworten mit Zitat      
Hallo stevorino,

Du bekommst wahrscheinlich mehr Hilfe, wenn Du konkrete Fragen stellst.
Aus den Worten "zu jeweils einem multidimensionalen Arrays umbauen" kann man nicht schließen, was Du konkret vorliegen hast. Und ohne die Inputs zu kennen, kann man nicht erraten, wie man daraus einen CORCOEFF berechnen kann.

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: 16.12.2011, 21:01     Titel:
  Antworten mit Zitat      
Hallo Jan,

Danke für die Antwort.

Ok, ich versuche es noch einmal genauer zu formulieren.

Ich habe 2x12 Dateien als Matrizen (36,72) eingelesen. Also die Weltkarte in 5x5° Gitterzellen. 36x5=180 (Breitengrad) und 72x5=360 (Längengrad). 1x12 Matrizen mit 36x72=2592 Werten in den 5x5° Gitterzellen und 1x12 Matrizen mit 36x72=2592 Werten in den 5x5° Gitterzellen.

Diese zweidimensionalen arrays möchte ich nun zu 2 multidimensionalen arrays zusammenfassen, eben aus den 2x12 Matrizen. Ich stelle mir da immer 2x12 karierte A4 Blätter vor die übereinander liegen. Naja und wenn ich 2xmultidimensionale arrays (mit je 12 zweidimensionalen arrays) habe, dann möchte ich die Veränderung jeder einzelnen Gitterzelle des einen multidimensionalen arrays mit der Veränderung jeder einzelnen Gitterzelle des anderen multidimensionalen arrays KORRELIEREN. Das Ergebnis soll dann ein zweidimensionales array (36,72) sein, in dem die Korrelationswerte für jede der 2592 Gitterzellen eingetragen sind. Es gibt übrigens auch Gitterzellen mit keinem Wert, also NaN.

Etwas lange, aber ich hoffe verständlich. Und ich habe nichts dazu gefunden, wie man zwei multidimensionale arrays miteinander korrelieren kann.

stno
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: 16.12.2011, 23:38     Titel:
  Antworten mit Zitat      
Hallo stevorino,

Ich zumindest kann Dir nicht folgen.
Ich verstehe nicht, wieso Du "2x12" schreibst und nicht 24. Was unterscheidet die beiden Spalten - und ist dieses Detail überhaupt wichtig für die Lösung Deines Problems? Andere Details sind sicherlich überflüssig und lenken nur ab: "5x5°" erwähnst Du dreimal, "36x72=2592" zweimal, aber beides ist eigentlich egal, oder?

Du hast also 24 Matrizen der Größe [36x72] mit irgendwelchen Werten, die auch NaN sein können. Möglicherweise ist es wichtig, dass dies zwei Gruppen a 12 Matrizen sind.
Jetzt möchtest Du multi-dimensionale Arrays bilden - mit welcher Dimension?
[36x72x2x12] oder 2 Arrays zu [36x72x12] oder wie?

Aber nun zur eigentlichen Berechnung, die, soweit ich das verstehe, das Problem ist, das Du lösen möchtest:
Zitat:
Naja und wenn ich 2xmultidimensionale arrays (mit je 12 zweidimensionalen arrays) habe, dann möchte ich die Veränderung jeder einzelnen Gitterzelle des einen multidimensionalen arrays mit der Veränderung jeder einzelnen Gitterzelle des anderen multidimensionalen arrays KORRELIEREN.

Was ist "die Veränderung einer Gitterzelle"? Und was genau ist die Korrelation zwischen einem Wert mit allen Werten einer anderen Matrix?

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: 17.12.2011, 00:06     Titel:
  Antworten mit Zitat      
Hallo Jan,

Ok ich gebe zu, ich tu mir etwas schwer, es zu beschreiben. Wahrscheinlich, weil ich eher noch ein MATLAB(Programmier)-Anfänger bin ...

Zitat:
Du hast also 24 Matrizen der Größe [36x72] mit irgendwelchen Werten, die auch NaN sein können. Möglicherweise ist es wichtig, dass dies zwei Gruppen a 12 Matrizen sind.
Jetzt möchtest Du multi-dimensionale Arrays bilden - mit welcher Dimension?
[36x72x2x12] oder 2 Arrays zu [36x72x12] oder wie?


Ja es ist wichtig, dass es zwei Gruppen a 12 Matrizen sind, weil diese beide Gruppen miteinander verglichen (korreliert) werden sollen, also 2 arrays zu [36x72x12].

Zitat:
Was ist "die Veränderung einer Gitterzelle"?


Ich meine damit einfach, dass [1,1,1] ein anderer Wert als [1,1,2], [1,1,3], ..., [1,1,12] ist. Und diese Veränderung (od. Trend, oder wie auch immer man es nennen möchte, mir fällt scheinbar nicht das richtige Wort ein) möchte ich mit [1,1,2] bis [1,1,12] der anderen Gruppe korrelieren, und das für alle 2592 Zellen.

Viele Grüße,
Stno
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: 17.12.2011, 23:06     Titel:
  Antworten mit Zitat      
Hallo stevorino,

Kanst Du die Beschreibung der "Veränderung einer Gitterzelle" als mathematische Formel ausdrücken? Mir wird es nämlichimmer noch nicht klar.
Der Skalar [1,1,1] unterscheidet sich von [1,1,2:12]. Aber was ist dabei "diese Veränderung"? Möchtest Du die Werte subtrahieren? Und dann möchtest Du dies mit [1,1,2:12] der anderen Gruppe "korrelieren". Ist das die lineare Correlation mit CORR, so dass Du eine 11x11 Matrix erhälst?

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: 18.12.2011, 00:46     Titel:
  Antworten mit Zitat      
Hallo Jan,

Ich möchte (1,1,1:12) des einen multidimensionalen arrays mit (1,1,1:12) des anderen multidimensionalen arrays korrelieren mit corrcoef. Und das für alle 2592 (nennt man es hier Vektoren? oder 3dimensionale Zellen?) ... also auch (1,2,1:12) des einen mit (1,2,1:12) des anderen, (1,3,1:12) des einen mit (1,3,1:12) des anderen, ... , (36,72,1:12) des einen mit (36,72,1:12) des anderen

Das Ergebnis soll eine zweidimensionale Matrix (36,72) mit den Korrelationskoeffizienten sein.

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: 18.12.2011, 13:30     Titel:
  Antworten mit Zitat      
Hallo Stefan,

Ich glaube, ich habe das Problem ungefähr verstanden. Wie versuchst Du es in Matlab zu lösen und welche konkreten Probleme treten dabvei auf?

Zur Nomenklatur:
Ein [1x1] Array heißt "skalar". Es besteht aus einem "Element".
Ein [Nx1] Array ist ein "Spalten-Vektor" aus N "Elementen".
[1xN] ist ein Zeilen-Vektor.
Ein [MxN] Array heißt Matrix.
Ein [MxNxP] Array heißt einfach nur noch "Array", um genau zu sein ein 3D-Array. Daraus kann man "Untermatrizen" und "Untervektoren" schneiden.
Auch ein [1x1xP] Array nennt man "Vektor", man sollte dabei die spezielle Dimension aber explizit nennen.

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: 18.12.2011, 13:51     Titel:
  Antworten mit Zitat      
Hallo Jan,

Danke für die Nomenklatur.

Da ich jetzt schon 2 3D-Arrays gebildet habe, möchte ich im letzten Schritt jeden einzelnen Untervektor (z.B. [1,1,12]) des einen 3D-Arrays mit dem zugehörigen Untervektor (in dem Fall [1,1,12]) des anderen 3D-Arrays korrelieren. Und das für alle 2592 Untervektoren, was dann als Ergebnis eine [36,72] Matrix mit den (2592) Korrelationskoeffizienten liefern soll.

Mir fällt im Moment einfach (noch) nicht ein, wie ich das programmieren soll, das MATLAB es für alle 2592 Werte macht. Kann ich das mit corcoeff machen? Weißt Du, wie ich das lösen könnte?

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: 18.12.2011, 14:44     Titel:
  Antworten mit Zitat      
Hallo Stefan,

Wenn Du einen Befehl auf alle Elemente eines Arrays anwenden möchtest, sind FOR-Schleifen das Mittel der Wahl.
Versuche dies mal und stelle konkrete Fragen zur Programmierung, wenn Probleme auftreten.

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: 19.12.2011, 19:21     Titel:
  Antworten mit Zitat      
Hallo Jan,

Danke für den FOR-Schleifen-Hinweis.

Ich habe es mit der FOR-Schleife versucht, aber es kommt hier leider eine Fehlermeldung.

Code:
for i=1:72
  for j=1:36
    R(i,j)=corrcoef(A(i,j,:), B(i,j,:));
  end
end


A und B sind die beiden multidimensionalen Arrays ...

Viele Grüße,
Stefan

EDITED: Mit der Code-Umgebung werden keine Smileys mehr im Code dargetsellt.
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: 19.12.2011, 23:47     Titel:
  Antworten mit Zitat      
Hallo Stefan,

Bitte poste immer auch die Fehlermeldung. Dann müssen wir nicht raten.

CORRCOEF gibt eine Matrix zurück, oder? 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, 10:26     Titel:
  Antworten mit Zitat      
Hallo Jan,


Code:
??? Subscripted assignment dimension mismatch.

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



Viele Grüße,
Stefan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.