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

Sehr komischer Fehler von MATLAB!!!!

 

Lou

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2009, 13:21     Titel:
  Antworten mit Zitat      
Ich weiß nicht ob ich hier richtig bin, aber ich habe in MATLAB etwas programmiert, was nicht klappt, aber ich habe keine Ahnung warum...

1. Ich lese einen Vektor aus einem Multidimensionalen Array aus wobei ich dort nur die erste Spalte benötige:

vec1=array{1}(:,1);
vec1=( 1.6000 ,1.9000 ,2.2000,...,, 13.3000 ,13.6000,13.9000)

2. Desweiteren habe ich noch einen Vektor der folgende Werte enthält:

vec2=(1.0000,1.3000, 1.6000,..., 13.3000,13.6000,13.9000,...,25.6000)

3. Nun möchte ich eine if-Anfrage durchführen
if vec2 == vec1(end)
.....

4. Die if-Anweisung gibt kein TRUE aus, sondern ich erhalte nur NULLEN!! Was aber nicht sein kann, da in vec2 die 13.9 (vec1(end)==13.9) drinen steckt!!!!!!!

Wenn ich das ganze mit if vec2 == vec1(end-2) ausprobiere klappt es! Mit if vec2 == vec1(end-1) schon nicht mehr.

Ich weiß nicht mehr weiter. Selbst wenn ich anstatt vec1(end) direkt die Zahl 13.9 hinschreibe klappt es nicht!

Vielleicht hat ja von euch jemand das gleiche erlebt? Und hat eine Idee woran das liegt??

Viele Grüße und danke!
Lou


Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 03.02.2009, 13:33     Titel:
  Antworten mit Zitat      
Zum einen muss man bei diesen Vergleichen aufpassen, da numerische Fehler (im Bereich von 10^-14 matlab intern) schon die Abfrage in die Hose gehen lassen.


Zum Anderen muss bei einer if-Abfrage der komplette Vektor (Bedingung) aus non-zero Elementen bestehen, damit es ein TRUE gibt.

Versuchs mal so:


Code:
if find(vec2==vec1(end)) % find liefert den Index des gesuchten Wertes und der ist wenn vorhanden immer non-zero
'blubb'
end

_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Lou

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2009, 13:40     Titel:
  Antworten mit Zitat      
ich werde es gleich mal ausprobieren, schonmal danke!
 
Lou

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2009, 13:53     Titel:
  Antworten mit Zitat      
Es klappt leider immer noch nicht... Es ist das gleiche wie zuvor....
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 03.02.2009, 14:29     Titel:
  Antworten mit Zitat      
Wie sieht dein Code denn nun aus? Poste einfach mal (unter Verwendung der Code-Umgebung) deinen bisherigen Quelltext.
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Lou

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2009, 15:37     Titel:
  Antworten mit Zitat      
Tja ich habe rausgefunden, das meine 13.9000 in long-Format eine 13.899999999999999 ist. somit verstehe ich warum die if-Anweisung nicht funktioniert.

Allerdings hilft mir fix und round auch nicht weiter..

Sagen wir wir haben die Zahl
in Long-Format: x= 23.199999999999999 und
in short-Format:x= 23.2

Wie bekomme ich das denn hin, das ich wirklich nur 23,2 habe auch im long-format?
Denn ich könnte x mal 10 nehmen, dann runden und wieder durch 10 teilen. Aber x*10=232 im Long-Format!!!!
 
Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 03.02.2009, 16:01     Titel:
  Antworten mit Zitat      
Hallo Lou,
warum soll
Code:
round(23.199999999999999*10)/10
nicht das gewünschte Ergebnis liefern?
Code:
>> isequal(23.2, round(23.199999999999999*10)/10)

ans =

     1


Ansonsten wäre nächstes mal ein sinnvoller Threadname hilfreich.
Gruß Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
Lou

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2009, 16:17     Titel:
  Antworten mit Zitat      
Ja auch wieder wahr...
Es hat mich iritiert , dass bei
Code:
round(23.199999999999999*10)/10 = 23.199999999999999

rauskommt. Aber dennoch es funktioniert.
Vielen Dank für die schnellen Antworten und entschuldigung für den Thread-Namen....

LG Lou[/code]
 
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.