|
|
Problem mit logischen Operationen |
|
Matlaberer |

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 03.07.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 03.07.2017, 17:59
Titel: Problem mit logischen Operationen
|
 |
Hey, ich habe mal eine Frage zu einem Problem bei logischen Operationen.
Ich habe einen Zeitvektor erstellt t = 0:0.1:24
Dann geguckt, welche Werte sind kleiner 12 x = (t<12)
Dann geguckt welchen Wert hat x bei 121 x(121) -> 0
Und dann geguckt was hat t bei 121 t(121) -> 12
Das sieht man in Bild 2. Das ist auch richtig so meiner Meinung nach.
Doch dann habe ich den Vektor t um 0.1 verkleinert. t = 0:0.1:24-0.1
Dann dasselbe gemacht wie zuvor. Nun ist x(121) -> 1 obwohl t(121) noch 12 ist.
Das verstehe ich nicht. Diesen Fall sieht man in Bild 1.
Danke schon mal für die Hilfe.
Beschreibung: |
|
 Download |
Dateiname: |
2.PNG |
Dateigröße: |
7.57 KB |
Heruntergeladen: |
275 mal |
Beschreibung: |
|
 Download |
Dateiname: |
1.PNG |
Dateigröße: |
7.75 KB |
Heruntergeladen: |
280 mal |
|
|
|
|
|
huhu0815 |

Forum-Century
|
 |
Beiträge: 141
|
 |
|
 |
Anmeldedatum: 20.02.14
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2013b, R2014b, R2016b, R2018a
|
 |
|
|
 |
|
Verfasst am: 03.07.2017, 20:08
Titel:
|
 |
Hi,
es ist eigentlich ganz simpel
Zitat: |
Doch dann habe ich den Vektor t um 0.1 verkleinert. t = 0:0.1:24-0.1
Dann dasselbe gemacht wie zuvor. Nun ist x(121) -> 1 obwohl t(121) noch 12 ist. |
Das ist dein Vektor t, der bei 0 startet, eine Schrittweite von 0.1 hat und bei 23.9 endet. Insgesamt also 240 Elemente im Vektor.
Egal welcher Schluss der Vektor hat. Es wird immer an der 121. Stelle des Vektors t 12 herauskommen, solange du als Startwert 0 und als Schrittweite 0.1 annimmst
der x wert an der 121 stelle ist natürlich 1, da sich der vektor um 1 verkürzt hat.
ich hoffe es ist ein wenig klarer
|
|
|
Matlaberer |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 03.07.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 03.07.2017, 21:25
Titel:
|
 |
Danke, verstehe es aber leider immer noch nicht so ganz.
Ich schneide von dem Vektor "t" nur die letzten 0.1 weg.
Er endet also bei 23.9.
Bei dem Befehl x = (t<12) muss er doch aber wieder vom Anfang los gehen und jedes Element mit 12 vergleichen.
An der Stelle 121 steht nun wieder die 12 in "t" und laut (t<12) müsste die 121 dann 0 sein.
Habe mal was getestet:
t = 0:0.1:(24-a)
a in 0.1 Schritten erhöht
Und die 1 und 0 in x(121) bei x=(t < 12) haben sich bei jeden Schritt abgewechselt.
Verstehe nicht wieso das Abschneiden von Werten am ende des Vektors einen Vergleich an einer Stelle mitten im Vektor ändern.
Könnte den Vektor t ja auch auf 121 kürzen. An der stelle 121 ist er 12. Also x = (t<12) muss bei x(121) 0 ergeben.
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 03.07.2017, 22:07
Titel:
|
 |
|
 |
|
Hallo Matlaberer,
Ich bin mit nicht sicher, aber es könnte ein einfacher numerischer Effekt sein.
Beginnen wir bei:
Hier erhält man keinen TRUE Wert, obwohl man ja einen erwarten könnte. Das liegt daran, dass wegen der begrenzten Genauigkeit die dezimalen Fließkommazahlen keine exakte Representation im verwendeten Dual-System haben. Darum ist 0.1 + 0.1 + 0.1 ~= 0.3 .
Ein Vektor a:c:b wird vom
colon
Operator per kummulativer Addition erzeugt. Wenn man nun ganz von Anfang bis Ende durch addieren würde, käme man aber eventuell wegen der Rundungsfehler nicht beim Endpunkt an. Deswegen wird die erste Hälfte vom Startwert aus addiert, und die zweite vom Endwert her subtratiert. Jenach dem ob die Anzahl der Elemente gerade oder ungerade ist, könnte der betrachtete Wert also statt 12 auch 11.99999999999999 sein.
Könnte das die Ursache Deiner Beobachtung sein?
Wenn nicht, poste doch mal den Code, denn ich kann noch nicht ganz nachvollziehen, was Du machst.
Gruß, Jan
|
|
|
Matlaberer |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 03.07.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.07.2017, 00:21
Titel:
|
 |
Ah okay, das klingt so als wäre das die Erklärung, danke dir.
Hier noch zum Code (wenn jemand ein änliches Problem hat):
Es ging im Code nur darum, ein Signal zu definieren.
Von 0 bis 6s - 0.1s ist es 0.
von 6s bis 12s - 0.1s ist es -3.
von 12s bis 18s - 0.1s ist es 7.
und von 18s bis 24s ist es wieder 0.
Danach sollten noch mehrere Perioden hintereinander gehängt werden, aber es geht hier nur um den Anfang.
Ich finde die Methode über logische Operatoren eleganter. Jedoch kommt bei max(MySign - MySign2) 10 raus. Da bin ich dann drauf gestoßen, dass die logischen Operatoren nicht so arbeiten, wie ich es mir vorgestellt habe. Wenn ich das "-dt" weg lasse, stehen in MySign2 aber die richtigen Werte. Das hängt dann wohl mit dem von dir beschriebenen colon Operator zusammen. Ich denke das sollte es gewesen sein, Vielen Dank.
|
|
|
|
|
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.
|
|