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

Schleife programmieren

 

der_tukan

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2008, 17:01     Titel: Schleife programmieren
  Antworten mit Zitat      
Hallo,
ich stehe vor folgendem Problem:
Ich habe händisch 100 Vektoren ("sweeps" mit jeweils 36000 Zeilen) in meinen workspace eingelesen und möchte nun von diesen Vektoren jeweils Korrelationskoeffizienten berechnen lassen.Die Ergebnisse sollen in einen array geschrieben werden.
Hier mein Code:
Code:
for i = 1:99
   corr('sweep(i)','sweep(i+1)');
   A(1,i)= ans;
end
 

Im Moment kommt folgende Fehlermeldung:

Code:
??? Error using ==> corr
Wrong number of arguments.

Error in ==> Test1 at 2
   corr('sweep(i)','sweep(i+1)');

 


Ich hoffe mir kann jemand helfen!
Danke im Voraus!

Hauke


Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 27.10.2008, 17:14     Titel:
  Antworten mit Zitat      
Hallo Hauke,
wenn du etwas in Anführungsstriche ' setzt, interpretiert das Matlab als string. Damit kann corr wiederum nichts anfangen.
Laß mal die '' weg und berichte dann weiter. Wink
Gruß Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
der_tukan

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2008, 19:12     Titel:
  Antworten mit Zitat      
folgender Fehlercode wird generiert, wenn ich die " ' " weglasse:
Code:
??? Undefined command/function 'sweep'.

Error in ==> Test at 2
    corr(sweep(i),sweep(i+1));


Muss ich die datensätze evtl. erst irgendwie definieren, selbst wenn sie aus dem workspace stammen?
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 27.10.2008, 19:28     Titel:
  Antworten mit Zitat      
Hallo der_tukan,

falls Test.m eine Funktion ist (also das Schlüsselwort function enthält), dann musst Du die Variablen aus dem Workspace an die Funktion übergeben.

Wenn Test.m ein Skript ist (ohne function), dann kennt es die Variablen aus dem Workspace.

Die Fehlermeldung spricht dafür, dass der erste Fall vorliegt. Wenn Du weitere Hilfe dazu brauchst, dann poste bitte die ersten paar Zeilen der Funktion Test und beschreibe, wie Du Test startest.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
der_tukan

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2008, 22:03     Titel:
  Antworten mit Zitat      
Also, eine Schleife habe ich hinbekommen. Der Code sieht folgerndermaßen aus:
Code:
%for j = 1:100
    for i = 1:99
     corr(data(:,1),data(:,1+i));
     B(i,1) = ans;
    end
%end
plot(B)


Wie Ihr sehen könnt hatte ich schon ein wenig versucht die zweite Schleife zu basteln. Es ist mir aber nicht gelungen.
Im Moment erstellt mein Code die Korrelationkoeffizienten der Kombinationen jeder Spalte ab 2 mit der ersten Spalte. Die noch zu erstellende Schleife soll die erste Spalte variabel gestalten, sodass die von 1 bis 99 läuft und dabei die zweite zu korrelierende "vor sich herschiebt". Denn wenn die Erste beim Wert 5 ist, muss die zweite erst bei 6 anfangen! Die Kombination 5-1 gab es ja schon als 1-5!

Sehr kompliziert ausgedrückt, ich weiß!

Hat jemand ne Idee wie ich das hinbekomme? Am Ende muss ich in "B" 4950 Werte bekommen nach der Gauß'schen Formel (n*(n-1))/2). Oder!?

Danke für Eure Hilfe!

Hauke
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 28.10.2008, 11:13     Titel:
  Antworten mit Zitat      
Hallo Hauke,

ich schlage Folgendes vor:

Code:
B = zeros(100);
for ind1 = 1:100
    for ind2 = ind1+1:100
        B(ind1,ind2) = corr(data(:,ind1),data(:,ind2));
    end
end
pcolor(B)
set(gca,'YDir','reverse')


Damit werden die Korrelationen nicht in einen Vektor geschrieben, sondern in eine Matrix. So kann man genau sehen, welche Daten gerade mit welchen korreliert werden. Grafisch wird das mit pcolor deutlich. Wenn Du dennoch alle berechneten Werte in einem Vektor haben möchtest, bekommst Du sie so:

Code:



Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
der_tukan

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2008, 10:43     Titel:
  Antworten mit Zitat      
Vielen Dank Bijick!
Ich habe es mittlerweile ber hinbekommen! Werde Deinen Vorschlag aber dennoch ausprobieren, vielleicht ist eine Matrix besser, mal sehen!
Hier übrigens meine Lösung:
Code:
a = 1;
for j = 1:99
    for i = (j+1):100
     corr(data(:,j),data(:,(i)));
     B(a,1) = ans;
     a = a+1;
    end
end
plot(B)
 
Neues Thema eröffnen Neue Antwort erstellen



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 - 2024 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.