ich habe einen Spaltenvektor mit i=1:n Elementen n=100.
ich möchte jetzt das Element ausgegeben haben, was am nächsten an einen gegebenen Wert dran liegt.
Beispiel Spaltenvektor V=[1,2,5,6,7]' ; Gegebener Wert 5,7 ... die oberere Grenze (supremum) ist also 6 und die 6 ist das i=4 Element im Spaltenvektor V.
Vielleicht gibt es noch bessere Umsetzungen, habe das ist die simpelste, denke ich.
Andreas
Hallo Andreas,
ich glaube es würde zu einem fehler kommen wenn V=[1 2 5 6 5.6] wäre.
weil es wird immer die nächste zahl gesucht, und nicht die obere grenze wie Thomas gewünscht hat.
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke
danke für die Antworten. Ich werde die Ansätze ausprobieren. Meines Erachtens sollten beide Vorschläge funktionieren. Danke dafür. Ich werde berichten.
So, ich habe das jetzt einmal ausprobiert und festgestellt, dass ich doch das untere Element benötige.
Also:
Beispiel Spaltenvektor V=[1,2,5,6,7]' ; Gegebener Wert 5,7 ... die oberere Grenze (supremum) für die gilt, dass (i-1)*1<=5,7 ist also 5 und die 5 ist das i=3 Element im Spaltenvektor V.
Ich versuche das jetzt einmal analog zum dem, was ihr mir empfohlen habt umzusetzen; falls ihr noch andere Gedanken habt, dann wäre ich dafür sehr dankbar.
kannst Du bitte noch sagen, was heraus kommen muss, wenn der Vektor [1 2 3 4 5 5.6 6 7 4 3 5.6] bzw. [1 2 3 4 5 5 6 7 4 3 5] lautet?
Oder kann kein Element doppelt vorkommen?
Oder wird nur das erste dichteste gebraucht?
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke
also ich bin jetzt dazu gekommen das Ganze einmal umzusetzen.
Es ist so, dass das obere Element gesucht wird. Ich habe es deswegen nach diesem Vorschlag umgesetzt:
[a,b]=min(abs(V-5.7));
das funktioniert, weil der Absstand zwischen den Elementen immer gleich ist. Ich habe also einen Vektor mit der Intervallbreite 1
V=[2,3,4,5,6,7,8,9,10]; jetzt habe ich einen Wert von 5,3. mit min(abs(V-Wert) würde 5 (Element 4) gewählt werden, was falsch ist - es muss 6 (Element 5) gewählt werden.
wenn ich jedoch die hälfte der Intervallbreite von 1 (also 0,5) zu dem Wert addiere, komme ich auf 5,3+0,5=5,8 - damit wäre das nächste Element mit minimalen Abstand die 6 also auch Element 5. Das funktioniert auch, wenn der Wert 5,7 beträgt; jetzt würde zwar ohnehin das Element 5 gewählt, weil es das Element mit dem minimalen Abstand ist. Addiere ich jetzt aber trotzdem die 0,5 dazu, komme ich wieder auf Element 5. Damit gilt allgemein:
danke für die Antwort. Das Problem scheint doch größer als gedacht. Ich habe in meiner Wert-Matrix, für die ich das umsetzen möchte, mehrere Werte die nicht im Vektor V vorkommen, auch -inf Werte. Damit funktioniert die find Funktion nicht. Kennt jemand noch Alternativen?
da du nur die Hälfte meiner frage beantwortet hast, habe ich bei index und element NaN gesetzt wenn der wert von "Wert" ausserhalb des bereiches liegt.
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
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.