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

Suchen-find?

 

flop
Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2008, 10:24     Titel: Suchen-find?
  Antworten mit Zitat      
Hallo liebes Forum

hab wieder mal ein Problem

Hab ein mat file das so ausschaut (sind alles struct)
data11234
data11236
usw
statn

Im statn bfinden sich alle Stationsnummern (zB 11234)+ deren geografischen Länge und Breite
In data11234 befinden sich alle Messwerte der Station 11234
Jetzt möchte ich das er mir die Stationsdaten der geografischen Breite und Länge zuordnet, damit ich dann einen geografischen plot der Messwerte machen kann.
Er soll mir also von data11234 in statn die Stationsnummer 11234 finden und dann eben geografische Lange und Breite

Hat jemand eine Idee?

lg flop
Private Nachricht senden Benutzer-Profile anzeigen


freshp
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.05.08
Wohnort: Schwabenländle ;)
Version: R2007b
     Beitrag Verfasst am: 26.05.2008, 11:54     Titel:
  Antworten mit Zitat      
Hi,

so ganz verstehe ich noch nicht, wie dein Mat-File jetzt aufgebaut ist. Du hast x Variablen:
Code:

data11234
data11236
data11237
data11238
...
 

Richtig? Und das sind Strukturvariablen, die gewisse Messwerte enthalten?
Code:

data11234.Werte
 

oder so?
Und dann gibt es eine Strukturvariable:
Code:

mit
Code:

statn.Nummer
statn.laenge
statn.breite
 


Dann sollte doch etwas in der Richtung funktionieren:
Code:

name='data11234 ';
nummer=name(5:10);
for i=1:length(statn)
    if statn(i).Nummer == str2double(nummer)
        gesuchte_laenge=statn(i).laenge;
        gesuchte_breite=statn(i).breite;
    end
end
 


Gruß,
Lars
Private Nachricht senden Benutzer-Profile anzeigen
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 26.05.2008, 12:01     Titel:
  Antworten mit Zitat      
Das Problem an dieser Methode ist, dass sie sehr langsam ist, vor allem fuer viele Eintraege in statn, zum anderen muesste jede Station einzeln von Hand bearbeitet werden.

Vermutlich ist jedoch fuer jede Variable dataXXXXX ein Eintrag in statn vorhanden, so dass ein
Code:

name = 'data11234';
nummer = name(5:9); % der Name ist nur 9 Zeichen lang, nicht 10
ind = find(statn.Nummer == str2double(nummer));
laenge = statn(ind).laenge;
breite = statn(ind).breite;
 

ausreichen wuerde.

Das groessere Problem scheint mir die automatische Abarbeitung aller Variablen zu sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
freshp
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.05.08
Wohnort: Schwabenländle ;)
Version: R2007b
     Beitrag Verfasst am: 26.05.2008, 12:06     Titel:
  Antworten mit Zitat      
Stimmt, da hatte ich grad gar nicht dran gedacht. Arbeite noch nicht so lange mit Matlab. Wink Aber grad mit find hab ich letzte Woche was gemacht... Rolling Eyes Wie war das mit dem Wald und den Bäumen... Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
flop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2008, 12:14     Titel:
  Antworten mit Zitat      
Hallo Lars

den Aufbau meines mat files hast du richtig verstanden

es kommt aber Fehlermeldung bei

if statn(i).Nummer == str2double (nummer)

function "eq" is not defined for values of class 'struct'

vieleicht weist ja einen Ausweg

Flo
Private Nachricht senden Benutzer-Profile anzeigen
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 26.05.2008, 12:20     Titel:
  Antworten mit Zitat      
Probiers mal mit statn.Nummer(i) statt statn(i).Nummer.
Private Nachricht senden Benutzer-Profile anzeigen
 
flop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2008, 13:10     Titel:
  Antworten mit Zitat      
hallo

habs mit all euren Tipps probiert, aber es kommt immer noch die gleiche Fehlermeldung

Noch irgendwelche Ideen?

flop
Private Nachricht senden Benutzer-Profile anzeigen
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 26.05.2008, 13:58     Titel:
  Antworten mit Zitat      
Naja, wichtig ist natuerlich auch, dass das, was wir im Beispiel "Nummer" nennen bei Dir den selben Namen hat wie der Eintrag im struct statn bei Dir.
Private Nachricht senden Benutzer-Profile anzeigen
 
flop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2008, 14:05     Titel:
  Antworten mit Zitat      
Das hab ich schon richtig umgenannt
Private Nachricht senden Benutzer-Profile anzeigen
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 26.05.2008, 14:09     Titel:
  Antworten mit Zitat      
Dann weiss ich spontan nicht weiter. Mit meinen Teststructs laeufts soweit einwandfrei, aber ich werd das nochmal ueberpruefen.

Nachtrag: Ich hoffe, Du verstehst meinen vorangegangenen Hinweis nicht falsch. Ich wollte Dich nicht als dumm o.ae. hinstellen, aber Du wuerdest Dich wundern, was fuer Fehler hier mitunter auftauchen :D
Private Nachricht senden Benutzer-Profile anzeigen
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 26.05.2008, 14:19     Titel:
  Antworten mit Zitat      
Welche Matlabversion benutzt Du denn?
Ich hab hier Matlab R2007b, eventuell gehen hier mehr oder anderen Befehle als bei aelteren Versionen.

Mein Beispielcode laeuft problemlos:
Code:

data = rand(100,2);
data11234 = struct('data',data(:,1));
data11236 = struct('data',data(:,2));
laenge1 = 2*pi*rand;
laenge2 = 2*pi*rand;
breite1 = 2*pi*rand;
breite2 = 2*pi*rand;
Nummer = [11234;11236];
statn = struct('Nummer',Nummer,'Laenge',[laenge1;laenge2],'Breite',[breite1;breite2]);
Name = 'data11234';
nummer = Name(5:9);
ind = find(statn.Nummer == str2double(nummer));
laenge = statn.Laenge(ind);
breite = statn.Breite(ind);
 

Das gibt mir in diesem Fall fehlerfrei ind = 1 und die damit verknuepften Laengen- und Breiteneintraege.
Private Nachricht senden Benutzer-Profile anzeigen
 
flop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2008, 14:34     Titel:
  Antworten mit Zitat      
Hab das Problem jetzt gefunden

nur wie plotte ich jetzt einen Messwert von data11234 mit der Breite und Länge
und wie kann ich nee Schleife machen für alle Stationen

Mit den Antworten könnt ihr euch Zeit lassen bin erst morgen früh wieder aktiv

noch eine schönen Tag und vielen Dank nochmals

Flo
Private Nachricht senden Benutzer-Profile anzeigen
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 26.05.2008, 14:47     Titel:
  Antworten mit Zitat      
Moeglicherweise koenntest Du das ganze von hinten aufrollen.

Code:

XYZ = zeros(length(statn.Nummer),2+n); %n ist Anzahl Daten pro dataXXXXX
Legend = zeros(length(statn.Nummer);

for i = 1 : length(statn.Nummer)
XYZ(i,1) = statn.Laenge;
XYZ(i,2) = statn.Breite;
eval('XYZ(i,3:end) = data',num2str(statn.Nummer),'.Werte;);
Legend(i) = statn.Nummer;
end
 


Also anhand der Nummern, die in statn stehen die Werte aus der zugehoerigen Datenvariablen ziehen.
Das ganz sollte dann evtl mit einem 3d-plot geplottet werden koennen, je nachdem, wie Deine Daten vorliegen, leider kann ich dazu nicht mehr sagen, weil ich nie 3d-plotte und auch Deine Datne nicht genauer kenne.
Private Nachricht senden Benutzer-Profile anzeigen
 
flop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2008, 10:13     Titel:
  Antworten mit Zitat      
nochmals zu genaueren Erklärung

Ich hab Stationen zB data11234
In dem sind 10s Werte angegeben (ca.10000):
Zeit Regenrate ....
20080525123000 1
20080525123010 3

Ich will einen plot der Regenrate zu einem gewissen Zeitpunkt x auf einer geografischen Karte und das für alle Stationen

vieleicht kannst du mir ja helfen
flo
Private Nachricht senden Benutzer-Profile anzeigen
 
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.