|
|
'if' Prüfung und Ausgabe von Werten in Vektor |
|
kerngehirn |

Forum-Anfänger
|
 |
Beiträge: 20
|
 |
|
 |
Anmeldedatum: 17.11.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: MATLAB R2015a
|
 |
|
|
 |
|
Verfasst am: 23.12.2015, 18:34
Titel: 'if' Prüfung und Ausgabe von Werten in Vektor
|
 |
Hi,
wie schaffe ich es eine if-Prüfung von allen Werten in einem Vektor separat durchzuführen und gleichzeitig die Ausgabe zu diesem zu haben?
Ich möchte, dass jeder Wert im Vektor geprüft wird ob eine Bedingung erfüllt ist und dann an der Stelle des Werts in einem neuen Vektor das Ergebnis der if-Prüfung steht.
soll also
ausgeben.
Das ist aber nicht möglich.
Ich möchte vermeiden jeden Wert des Vektors auszulesen, zu prüfen und einer neuen Variable zuzuordnen und dann aus den Variablen einen neuen Vektor zu machen.
möchte ich daher vermeiden.
Ist das machbar?
Vielen Dank
|
|
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 23.12.2015, 18:51
Titel:
|
 |
Hallo,
das kann man mit einer Schleife lösen.
Zuletzt bearbeitet von DSP am 23.12.2015, 18:53, insgesamt einmal bearbeitet
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 23.12.2015, 18:53
Titel:
|
 |
Hallo,
logische Indizierung.
Grüße,
Harald
P.S.: Ein Beispiel, in dem man mit [1,2,3] anfängt und als Ergebnis [1,2,3] haben möchte, kann recht verwirrend sein.
|
|
|
kerngehirn |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 20
|
 |
|
 |
Anmeldedatum: 17.11.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: MATLAB R2015a
|
 |
|
|
 |
|
Verfasst am: 23.12.2015, 19:15
Titel:
|
 |
HI,
vielen Dank für die Antworten.
An eine Schleife hatte ich auch schon gedacht.
Da diese Schleife dann allerdings innerhalb einer anderen for-Schleife wäre, und die Vektoren riesig sind, würde die Berechnung ewig dauern.
Logische Indizierung klingt gut. Aber ich bin mir nicht sicher, ob das mit >= und <= und mit Formeln gut funktioniert.
Realisiert werden soll folgendes:
CTODSpannung soll also am Ende der fertige Vektor sein.
CTODepsilon beinhaltet etwa 3000 Werte im Bereich von 0 bis 3,8.
Könnte das klappen? Ich werde es ausprobieren, aber der Code ist schon ziemlich lang, und bis ich das als Amateur da eingepflegt hab wird dauern.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 23.12.2015, 19:31
Titel:
|
 |
Hallo,
ich sehe für beide Ansätze keinen Grund, warum das nicht klappen sollte.
10 Zeilen Code würde ich jetzt nicht als "ziemlich lang" bezeichnen. Wenn du die Idee verstanden hast, sollte die Umsetzung relativ unproblematisch sein.
Wenn die echte Anwendung so überschaubar ist, kann ich nur empfehlen, bei der Frage auch gleich die echte Anwendung statt eines konstruierten Beispiels mitzuliefern.
Grüße,
Harald
|
|
|
kerngehirn |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 20
|
 |
|
 |
Anmeldedatum: 17.11.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: MATLAB R2015a
|
 |
|
|
 |
|
Verfasst am: 23.12.2015, 19:45
Titel:
|
 |
Okay. Dank dir
Mit ziemlich lang meinte ich, der gesamte Code. Das ist nur ein Teil davon.
Bei einer Schleife habe ich wie gesagt Angst, dass der Spaß dann zu lange dauert.
Die erste Schleife dauert schon etwa eine halbe Stunde bis sie durchgerechnet ist. Wenn ich dann in diese Schleife noch eine Schleife mit 3000 Operationen packe, dauert das ja unendlich lang.
Ich habe es jetzt so gemacht:
Wird das funktionieren? Wenn nicht, wie löse ich das Problem der 2 Bedingungen?
Ich kann es leider noch nicht ausführen, da der Code noch nicht ganz fertig ist.
Danke
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 23.12.2015, 19:48
Titel:
|
 |
Hallo,
sieht gut aus.
Bei Performance-Problemen kann ich nur den Profiler empfehlen, um die zeitkonsumierenden Teile des Codes aufzuspüren und ggf. gezielt verbessern zu können.
Grüße,
Harald
|
|
|
kerngehirn |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 20
|
 |
|
 |
Anmeldedatum: 17.11.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: MATLAB R2015a
|
 |
|
|
 |
|
Verfasst am: 23.12.2015, 20:08
Titel:
|
 |
Was ist der Profiler? Ich kenne nur "Analyze Code"
...
Ich bekomme nun den Fehler
Zitat: |
In an assignment A(I) = B, the number of elements in B and I must be the same. |
,bei Zeile zwei des oben stehenden Codes.
Alle Vektoren haben die gleiche Länge.
edit: Jetzt ist mir klar warum. Ich muss hinter dem Gleichzeichen natürlich auch nen Wert für die Zeile angeben. Ist aber natürlich so nicht möglich.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 23.12.2015, 22:54
Titel:
|
 |
Hallo,
Zitat: |
Was ist der Profiler? |
Die Frage sollte sich an sich mit Forum, Doku oder Suche in der Hilfe beantworten lassen. Siehe z.B. hier:
http://de.mathworks.com/help/matlab.....mproving-performance.html
Wenn es um Vektoren geht, müssen diese auch auf der rechten Seite entsprechend indiziert werden, also z.B.
Grüße,
Harald
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 24.12.2015, 14:39
Titel:
|
 |
Hallo kerngehirn,
Zitat: |
Bei einer Schleife habe ich wie gesagt Angst, dass der Spaß dann zu lange dauert. |
Wenn es tatsächlich nur um ein paar Tausend Operationen geht, ist Deine Angst wahrscheinlich unbegründet. Wenn die Ergebnis-Arrays ordentlich pre-allociert sind, berechnet Matlab Schleifen schnell und effizient. Probiere es doch einfach mal aus.
Statt "NAN*ones(...)" schreibt man besser: "NaN(...)".
Gruß, Jan
|
|
|
|
|
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.
|
|