|
|
Ablauf der for- und if-Funktionen |
|
nemax |

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 13.03.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.05.2009, 10:38
Titel: Ablauf der for- und if-Funktionen
|
 |
Hallo,
ich habe zwei Fragen, für die ich keine Erklärung habe:
1. eine einfache Substration der Form c = a - b bringt unsinnige Werte heraus,
wie 1.0451e-17 = 5.2253e-18 - 0;
Hat jemand dafür eine Erklärung ?
2. Weiterhin habe ich eine Kombination aus der for- und if-Schleifen folgender Form:
for i = 1:length(x)
if i == 1
Befehl 1
else
Befehl 2
end
Befehl 3
end
Wenn ich den Debuger bei dem Befehl 3 stope, dann erhalte ich nicht nur die Werte aus dem Befehl 1 sondern auch aus Befehl 2. Was im Grunde nicht möglich sein sollte, weil die for-Schleife beim Stopen des Debager in der Position "Befehl 3" noch die Bedingung i==1 erfüllt. Daher sollten die Werte aus dem "Befehl 2" zu diesem Zeitpunkt noch nicht vorhanden sein - oder ?
Habe ich recht oder übersehe ich etwas ?
|
|
|
|
|
derOli |

Forum-Meister
|
 |
Beiträge: 579
|
 |
|
 |
Anmeldedatum: 19.03.08
|
 |
|
 |
Wohnort: Leipzig
|
 |
|
 |
Version: 2010a
|
 |
|
|
 |
|
Verfasst am: 21.05.2009, 17:34
Titel:
|
 |
Hi nemax,
zu erstens kann ich nur vermuten, dass es was mit der Ungenauigkeit von Matlab zu tun hat. Vielleicht bestimmte Werte zu einem gewissen Grad runden.
Zu zweitens, dass sehe ich so wie du, das sollte nicht funktionieren. Hab es sicherheitshalber mal getestet:
Ist mit diesem Code so, dass man b nicht sehen kann wenn der Debugger bei x(k)=3 stehen bleibt. Vielleicht ist der Wert noch von einer vorhigen Berechnung da. Könntest ja noch ein clear vorher einbauen. Das i hab ich mal durch k ersetzt, weil i bei Matlab wie j auch für die komplexe Zahl steht.
Viele Grüße,
der Oli
|
|
|
steve |

Ehrenmitglied
|
 |
Beiträge: 2.029
|
 |
|
 |
Anmeldedatum: 03.09.07
|
 |
|
 |
Wohnort: Wien
|
 |
|
 |
Version: R2024a
|
 |
|
|
 |
|
Verfasst am: 21.05.2009, 17:52
Titel:
|
 |
Noch ein Tipp am Rande:
Wenn du mit IF auf bestimmte feste Werte überprüfst, die vorher schon festliegen, dann nimm SWITCH.
Gruß
Alex
_________________
>> I told me to.
____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
|
|
|
nemax |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 13.03.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.05.2009, 18:21
Titel:
|
 |
|
 |
|
derOli hat Folgendes geschrieben: |
Hi nemax,
zu erstens kann ich nur vermuten, dass es was mit der Ungenauigkeit von Matlab zu tun hat. Vielleicht bestimmte Werte zu einem gewissen Grad runden. |
Ich habe zu beginn die gleiche Vermutung gehabt, aber dann doch diese Variante verworfen. Wenn ich Matlab für wissischaftliche Arbeiten verwende, erfordert es eine exakte Berechnung. Und bei meinem Beispiel oben muss es noch elementarer sein. Denn wenn ich 0 von einem Wert abziehe, dann muss es gleich bleiben.
derOli hat Folgendes geschrieben: |
Zu zweitens, dass sehe ich so wie du, das sollte nicht funktionieren. Hab es sicherheitshalber mal getestet:
Ist mit diesem Code so, dass man b nicht sehen kann wenn der Debugger bei x(k)=3 stehen bleibt. Vielleicht ist der Wert noch von einer vorhigen Berechnung da. Könntest ja noch ein clear vorher einbauen. Das i hab ich mal durch k ersetzt, weil i bei Matlab wie j auch für die komplexe Zahl steht.
Viele Grüße,
der Oli |
Ja, den clear-Befehl habe ich bereits vorher eingebracht. Ohne den ging es nicht.
Ich habe jetzt Debuger nochmal angesehen. Ich muss mich zum Teil korrigieren. In dem oben beschriebenen Fall sind die Werte aus Befehl 2 im Workspace nicht zu sehen. Aber wenn man mit der Maus über die Variablen geht, sieht man trotz dessen einen Wert.
Bis jetzt ist mir dieser Unterschied zwischen Workspace und Mauszeiger nicht aufgefallen.
Zuletzt bearbeitet von nemax am 21.05.2009, 18:24, insgesamt einmal bearbeitet
|
|
|
nemax |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 13.03.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.05.2009, 18:23
Titel:
|
 |
steve hat Folgendes geschrieben: |
Noch ein Tipp am Rande:
Wenn du mit IF auf bestimmte feste Werte überprüfst, die vorher schon festliegen, dann nimm SWITCH.
Gruß
Alex |
Wieso ? Ich meine, welcher Grund liegt hierfür ?
|
|
|
steve |

Ehrenmitglied
|
 |
Beiträge: 2.029
|
 |
|
 |
Anmeldedatum: 03.09.07
|
 |
|
 |
Wohnort: Wien
|
 |
|
 |
Version: R2024a
|
 |
|
|
 |
|
Verfasst am: 21.05.2009, 19:52
Titel:
|
 |
Der Grund ist die Laufzeit der Programme. If-Abfragen dauern länger als switch-case-Verzweigungen.
Gruß
Alex
_________________
>> I told me to.
____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
|
|
|
derOli |

Forum-Meister
|
 |
Beiträge: 579
|
 |
|
 |
Anmeldedatum: 19.03.08
|
 |
|
 |
Wohnort: Leipzig
|
 |
|
 |
Version: 2010a
|
 |
|
|
 |
|
Verfasst am: 21.05.2009, 20:19
Titel:
|
 |
Hi,
bei meinem oben geposteten Beispiel zeigt mir auch der Mauszeiger nichts an. Probier das mal aus ob es bei dir anders ist. Kannst du das 1. Problem noch etwas genauer Beschreiben.
Viele Grüße,
der Oli
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.497
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 21.05.2009, 20:45
Titel:
|
 |
Hallo Nemax,
ich habe versucht, das erste Problem nachzuvollziehen, und es ist mir leider (oder besser gesagt: zu meiner Beruhigung) nicht gelungen.
Dann hat c bei mir den gleichen Wert wie a.
Ich würde noch mal um ein konkretes Beispiel bitten. Wenn man von etwas 0 abzieht und etwas anderes herauskommt, fände ich das in der Tat beunruhigend. Sollte b allerdings eine fehlerbehaftete 0 (z.B. sin(pi)) sein, dann ist das ganze schon weniger erstaunlich.
Ein grundsätzliches Problem könnte auch Auslöschung sein, die bei Subtraktion zweier sehr nah beieinanderliegender Zahlen entsteht (klassisches Beispiel: Differenzenquotienten). Das ist aber kein MATLAB-spezifisches Problem, sondern eines, das bei numerischen Berechnungen grundsätzlich auftritt.
Grüße,
Harald
|
|
|
nemax |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 13.03.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.05.2009, 10:34
Titel:
|
 |
|
 |
|
Harald hat Folgendes geschrieben: |
Hallo Nemax,
ich habe versucht, das erste Problem nachzuvollziehen, und es ist mir leider (oder besser gesagt: zu meiner Beruhigung) nicht gelungen.
Dann hat c bei mir den gleichen Wert wie a.
Ich würde noch mal um ein konkretes Beispiel bitten. Wenn man von etwas 0 abzieht und etwas anderes herauskommt, fände ich das in der Tat beunruhigend. Sollte b allerdings eine fehlerbehaftete 0 (z.B. sin(pi)) sein, dann ist das ganze schon weniger erstaunlich.
Ein grundsätzliches Problem könnte auch Auslöschung sein, die bei Subtraktion zweier sehr nah beieinanderliegender Zahlen entsteht (klassisches Beispiel: Differenzenquotienten). Das ist aber kein MATLAB-spezifisches Problem, sondern eines, das bei numerischen Berechnungen grundsätzlich auftritt.
Grüße,
Harald |
Danke Harald,
ich habe den Code
a = 5.2253e-18;
b = 0;
c = a - b;
gesondert eingegeben, ich siehe da. Das Ergebnis stimmt, wie es sein sollte. Wenn ich also das Ganze noch mals revidiere, dann kommen ich zum Schluß, dass es an meinem Code liegen muss.
Es sei denn, mein Matlab spinnt. Die "R2008a 7.6.0" Version weist doch keine Bugs auf ? Ich erkündige mich, nur um sicher zu sein.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|