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

Problem mit 'find'-Funktion

 

blue_plasma
Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 28.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2011, 10:59     Titel: Problem mit 'find'-Funktion
  Antworten mit Zitat      
Hallo,

ich habe ein etwas seltsames Problem, ich würd' mich freuen, wenn jemand eine zündende Idee hätte... Smile

Ich habe ein Programm geschrieben, in dem Messwerte (in Abh. von der Zeit t_mess) mit berechneten Werten (ODE-Solver, Zeit: t_ber) verglichen werden sollen. Damit ich identische Zeiten miteinander vergleichen kann, nutze ich den Befehl 'find' um gleiche Zeitpunkte zu finden. Hier der Auszug...

Code:
   for i = 1:Anzahl_Werte
        % Suchen von ident. Zeiten (t_mess == t_ber)
        [t_row, t_col] = find(Messdaten(i,2) == T_ber(:,1));
       
        % Ein Delta_Ci ist die quadrierte Abweichung der
        % Konzentrationen einer Spezies bei einer Zeit t_ber == t_mess
        Delta_C_1O = (Messdaten(i,5)  - Y_ber(t_row,1))^2; % 1O
        Delta_C_2O = (Messdaten(i,8)  - Y_ber(t_row,2))^2; % 2O
        ...
    end


'find' liefert dann den Index für Zeile und Spalte, in dem der identische Wert gefunden wurde. Das Ganze soll mit 10 Werten (t) passieren. Das Programm funktioniert auch bis i=8. Dann steigt das Programm aus, weil kein passendens Element gefunden wird. 'find' liefert da nur [] als Ergebnis Question Das seltsame ist, dass die gemessenen Werte für die Zeit vorher gerundet werden, damit sie auch gefunden werden können. Hat jemand eine Idee woran es noch liegen könnte?

Beste Grüße
blue_plasma
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 04.07.2011, 11:21     Titel:
  Antworten mit Zitat      
Du nimmst doch von Messdaten aus der 2. Spalte (ich nehme an, dass hier t_mess steht) ein bestimmten Zeitpunkt, nämlich den i. Nun suchst du in T_ber diesen Zeitpunkt. Also muss die Abfrage in find() genau anders herum sein Wink
Code:

[t_row, t_col] = find(T_ber(:,1) == Messdaten(i,2));
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 04.07.2011, 11:24     Titel:
  Antworten mit Zitat      
Hallo,

anstatt gleiche Zeiten zu suchen (und nicht immer zu finden), würde ich lieber interpolieren, z.B.

Code:

% nehme alle Zeitpunkte aus Messung und Simulation:
Tgemeinsam = union(Messdaten(:,2), T_ber(:,1));
% stelle sicher, dass nur die Schnittmenge genommen wird:
Tstart = max(Messdaten(1,2), T_ber(1,1));
Tend = min(Messdaten(end,2), T_ber(end,1));
Tgemeinsam(Tgemeinsam<Tstart | Tgemeinsam>Tend) = [];
% interpoliere (z.B. C_10)
Mess5 = interp1(Messdaten(:,2), Messdaten(:,5), Tgemeinsam);
Yber2 = interp1(T_ber, Yber(:,1), Tgemeinsam);
fehler = norm(Mess5-Yber2)

 


Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
blue_plasma
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 28.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2011, 14:32     Titel:
  Antworten mit Zitat      
DSP hat Folgendes geschrieben:
Du nimmst doch von Messdaten aus der 2. Spalte (ich nehme an, dass hier t_mess steht) ein bestimmten Zeitpunkt, nämlich den i. Nun suchst du in T_ber diesen Zeitpunkt. Also muss die Abfrage in find() genau anders herum sein Wink
Code:

[t_row, t_col] = find(T_ber(:,1) == Messdaten(i,2));
 


Hab ich gleich ausprobiert. Hat leider nicht gefunzt... Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 04.07.2011, 15:56     Titel:
  Antworten mit Zitat      
Von der Syntax her wäre es aber so richtig Wink. Dann ist dein gesuchter Wert nicht in T_ber. Somit bist du mit der Methode von Titus besser dran Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
blue_plasma
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 28.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2011, 09:04     Titel:
  Antworten mit Zitat      
Hallo,

nach einer recht kurzen Nacht wird das Ganze noch komplizierter... Ich habe mehrere Versuche, die ausgewertet werden sollen. Der Fehler, den ich beschrieben habe trat nur beim ersten Versuch auf, der eingelesen wurde. Jetzt habe ich "aus Spass" noch vor diesem einen "Dummy-Versuch" eingefügt (alle Werte = 0) und siehe da, das Programm läuft durch.... ! Shocked I'm very confused....
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 05.07.2011, 09:45     Titel:
  Antworten mit Zitat      
Hast du mal mit dem Debugger geschaut, was in dem 8. Durchgang passiert, als die Zeit von Messdaten(i) nicht in T_ber gefunden wurde? D.h. welche Zeit ist das Suchkriterium?
Private Nachricht senden Benutzer-Profile anzeigen
 
blue_plasma
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 28.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.07.2011, 08:42     Titel:
  Antworten mit Zitat      
DSP hat Folgendes geschrieben:
Hast du mal mit dem Debugger geschaut, was in dem 8. Durchgang passiert, als die Zeit von Messdaten(i) nicht in T_ber gefunden wurde? D.h. welche Zeit ist das Suchkriterium?


Ja, habe ich. Es wird einfach ein ein "leerer" Wert ausgegeben. Vorher wird korrekt bis 8 ...
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 06.07.2011, 09:12     Titel:
  Antworten mit Zitat      
Das hast du ja schon berichtet Wink

Aber hast du mal den 8. Zeitwert deiner Messung genommen und selber in T_ber geschaut, ob es den auch wirklich gibt?
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 - 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.