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.
gruss
_________________
Ein schlechter General ist besser als zwei gute.
yankemen
Forum-Fortgeschrittener
Beiträge: 97
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
Verfasst am: 27.07.2010, 11:10
Titel:
Moin Fourier,
den eventuellen Fehler kann ich nicht bestätigen. Habe es eben mal ausprobiert:
Code:
v = [12565.6];
[a b] = min(abs(v-5.7))
a =
0.1000
b =
5
v = [12567];
[a b] = min(abs(v-5.7))
a =
0.3000
b =
4
%und logischerweise
v = [12565.675.6];
[a b] = min(abs(v-5.7))
a =
0.1000
b =
5
Ciao,
yankemen
_________________
Code:
% Kommentare brauchen ein Leerzeichen nach dem %
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
Fourier
Forum-Guru
Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
Verfasst am: 27.07.2010, 11:24
Titel:
hallo Yankemen,
bei deinem ersten Beispiel sollte b=4 rauskommen.
weil die 6 die nächste obere schranke ist. und nicht das 5.element (5.6).
ich habs so gemacht:
Code:
v=[12567];
w=5.2;
x=v-w;
a=min(x(x>0));
sprintf('die %d, das %d.te Element',a+w,find(v==a+w))
oder ich hab vlt Thomas falsch verstanden.
Zitat:
die oberere Grenze (supremum) .....
gruss
Fourier
_________________
Ein schlechter General ist besser als zwei gute.
thomas0815
Forum-Century
Beiträge: 136
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
Verfasst am: 28.07.2010, 16:59
Titel:
Hallo zusammen,
danke für die Antworten. Ich werde die Ansätze ausprobieren. Meines Erachtens sollten beide Vorschläge funktionieren. Danke dafür. Ich werde berichten.
Grüße,
Thomas
thomas0815
Forum-Century
Beiträge: 136
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
Verfasst am: 29.07.2010, 16:10
Titel:
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.
Grüße,
Thomas
yankemen
Forum-Fortgeschrittener
Beiträge: 97
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
Verfasst am: 30.07.2010, 09:46
Titel:
Moin thomas0815,
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?
Ciao,
yankemen
_________________
Code:
% Kommentare brauchen ein Leerzeichen nach dem %
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
thomas0815
Forum-Century
Beiträge: 136
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
Verfasst am: 18.08.2010, 18:58
Titel:
Hallo,
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?
Frage:
was sollte denn bei element und index rauskommen wenn der vektor "Wert" zahlen ausserhalb des bereichs oder -inf werte hat??
gruss
_________________
Ein schlechter General ist besser als zwei gute.
thomas0815
Forum-Century
Beiträge: 136
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
Verfasst am: 25.08.2010, 12:05
Titel:
Hallo,
danke für den Hinweise, hätte mir selber auffallen können. Ich werde das dann gleich ausprobieren.
Bei -inf sollte z.B. das nächst größere verfügbare Element gewählt werden, in diesem Fall 0.
Grüße,
Thomas
Fourier
Forum-Guru
Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
Verfasst am: 25.08.2010, 12:19
Titel:
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.