22.07.2016, 12:39
Beitrag #1
|
TSC
LVF-Team
Beiträge: 1.882
Registriert seit: Sep 2008
LV 2018 SP1
2008
EN
52379
Deutschland
|
Wert an naheliegensten Wert aus Array anpassen
Hallo zusammen,
ich glaube es liegt am Wetter, aber mir fallen nur unsagbar blöde Algoryhtmen ein. Hier die Problemstellung:
Ich habe ein double-Array mit erlaubten Werten, zum Beispiel {0,5;1;2;4} und einen double-Eingang der einen beliebigen Wert annehmen darf. Nun möchte ich aus dem Array den Wert ermitteln, dessen Differenz zum Einganswert am kleinsten ist.
Anbei ein kleiner VI-Abschnitt zur Verdeutlichung! Vielleicht habt ihr effizientere Ideen als ich!
Für Ideen und Anregungen bin ich dankbar.
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
22.07.2016, 12:46
Beitrag #2
|
GerdW
______________
Beiträge: 17.480
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Wert an naheliegensten Wert aus Array anpassen
Hallo TSC,
1. Differenz aus neuem Wert und deinem Array bilden
2. ArrayMinMax auf diese Differenz anwenden: Min-Index lesen
3. Mit dem Min-Index das Element aus deinem Array indizieren…
Ist schon recht feucht-warm heute…
|
|
|
22.07.2016, 13:02
(Dieser Beitrag wurde zuletzt bearbeitet: 22.07.2016 13:05 von TSC.)
Beitrag #3
|
TSC
LVF-Team
Beiträge: 1.882
Registriert seit: Sep 2008
LV 2018 SP1
2008
EN
52379
Deutschland
|
RE: Wert an naheliegensten Wert aus Array anpassen
Danke für den Ansatz, hier die Umsetzung deiner Idee (wenn ich dich richtig verstanden habe )
Aber erstens: holt mir das nicht den nächst höheren bei einem genau mittig liegendem Wert
und zweitens frage ich mich, ob es nicht effizienter geht, als alle Differenzen zu bilden und so weiter?
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
22.07.2016, 14:02
Beitrag #4
|
GerdW
______________
Beiträge: 17.480
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Wert an naheliegensten Wert aus Array anpassen
Hallo TSC,
Zitat:erstens: holt mir das nicht den nächst höheren bei einem genau mittig liegendem Wert
Es gibt genau definierte Rundungsregeln in der IEEE754-Spezifikation, die die Grundlage für alle FloatingPoint-Operationen bildet…
Zitat:zweitens frage ich mich, ob es nicht effizienter geht, als alle Differenzen zu bilden und so weiter?
Du willst wissen, welcher Wert am nächsten zu deinem Input liegt - ohne den Abstand zu berechnen???
Solange dein Array sortiert vorliegt, kannst du natürlich auch im Array suchen: Threshold1DArray ist die gesuchte Funktion…
|
|
|
22.07.2016, 14:28
Beitrag #5
|
TSC
LVF-Team
Beiträge: 1.882
Registriert seit: Sep 2008
LV 2018 SP1
2008
EN
52379
Deutschland
|
RE: Wert an naheliegensten Wert aus Array anpassen
Zitat:Es gibt genau definierte Rundungsregeln in der IEEE754-Spezifikation, die die Grundlage für alle FloatingPoint-Operationen bildet…
Ja, und da seht doch hoffentlich drin, dass man eben bei 1,5 auf 2 aufrundet (also der nächst höhere Wert)?
Zitat:Du willst wissen, welcher Wert am nächsten zu deinem Input liegt - ohne den Abstand zu berechnen???
Solange dein Array sortiert vorliegt, kannst du natürlich auch im Array suchen: Threshold1DArray ist die gesuchte Funktion…
Haha, ja so könnte man es formullieren. Das Array liegt sortiert vor. Hier ein Versuch der Umsetzung:
Soweit so gut. Schaut schön aus. Aber auch hier ein Rundungsproblem: habe ich im Array die Werte 2 und 4 und mein Input ist 3. Dann bekomme ich die 2 zurück.
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
22.07.2016, 14:36
(Dieser Beitrag wurde zuletzt bearbeitet: 22.07.2016 14:38 von GerdW.)
Beitrag #6
|
GerdW
______________
Beiträge: 17.480
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Wert an naheliegensten Wert aus Array anpassen
Hallo TSC,
Zitat:da seht doch hoffentlich drin, dass man eben bei 1,5 auf 2 aufrundet
Ja.
Zitat:(also der nächst höhere Wert)?
Falsch: der nächstliegende gerade Wert. ("bankers rounding")
Einfach mal Wikipedia lesen…
Zitat:hier ein Rundungsproblem: habe ich im Array die Werte 2 und 4 und mein Input ist 3. Dann bekomme ich die 2 zurück.
Welcher gerade Wert liegt deiner "3" wohl näher: 2 oder 4?
Was erwartest du hier eigentlich für ein Ergebnis, wenn die Aufgabe lautet: "Finde den nächstliegenden Wert?"
Lösung: Threshold liefert dir einen "gebrochenen Index" zurück. Den kann man prima abrunden…
|
|
|
22.07.2016, 14:47
Beitrag #7
|
TSC
LVF-Team
Beiträge: 1.882
Registriert seit: Sep 2008
LV 2018 SP1
2008
EN
52379
Deutschland
|
RE: Wert an naheliegensten Wert aus Array anpassen
Ja danke, das hat geholfen,.. viel Input, guter Artikel. Kurz: es gibt keine Funktion die nach Norm falsch, aber dafür meinen Wünschen entsprechend, rundet!? Grml! Nagut, dann runde ich händisch!
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
22.07.2016, 21:10
Beitrag #8
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
RE: Wert an naheliegensten Wert aus Array anpassen
Wenn deine Werte sortiert sind, dann könntest du auch diese Funktion zum Suchen verwenden:
https://zone.ni.com/reference/en-XX/help..._1d_array/
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
24.07.2016, 15:21
(Dieser Beitrag wurde zuletzt bearbeitet: 25.07.2016 07:27 von Lucki.)
Beitrag #9
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: Wert an naheliegensten Wert aus Array anpassen
(22.07.2016 14:47 )TSC schrieb: Kurz: es gibt keine Funktion die nach Norm falsch, aber dafür meinen Wünschen entsprechend, rundet!?
Um die Frage zu beantorten, müßte man erst mal wissen, was Dein Wünsche sind. Bisher hst Du nur verraten, dass Du 1.5 auf 2 und 2.5 gern auf drei gerundet haben möchtest. Darf man daruf schließen, dass Du immer aufgerundet haben möchtest?
Dann könnte ein kleines SubVI, welches das macht, z.B so aussehen (aber vielleicht geht es auch einfacher):
runden.vi (Größe: 6,85 KB / Downloads: 223)
|
|
|
25.07.2016, 06:33
(Dieser Beitrag wurde zuletzt bearbeitet: 25.07.2016 06:38 von TSC.)
|
TSC
LVF-Team
Beiträge: 1.882
Registriert seit: Sep 2008
LV 2018 SP1
2008
EN
52379
Deutschland
|
RE: Wert an naheliegensten Wert aus Array anpassen
(22.07.2016 21:10 )jg schrieb: Wenn deine Werte sortiert sind, dann könntest du auch diese Funktion zum Suchen verwenden:
https://zone.ni.com/reference/en-XX/help..._1d_array/
Gruß, Jens
Hi Jens, das hatte GerdW auch schon vorgeschlagen und ist im letzten Anhang von mir verwendet. Bisher die angenehmste Lösung mit dem einzigen Problem: ich möchte nicht so runden, wie es laut IEEE korrekt wäre, sondern explizit aufrunden, wenn ich exakt zwischen zwei werten liege.
(24.07.2016 15:21 )Lucki schrieb: Um die Frage zu beantorten, müßte man erst mal wissen, was Dein Wünsche sind. Bisher hst Du nur verraten, dass Du 1.5 auf 2 und 2.5 gern auf drei gerundet haben möchtest. Darf man daruf schließen, dass Du immer aufgerundet haben möchtest?
Dann könnte ein kleines SubVI, welches das macht, z.B so aussehen (aber vielleicht geht es auch einfacher):
Moin Lucki,
Naja ich hatte gehofft das getan zu haben (Post 1)?! zugegeben, ich habe meine Wünsche zum problematischsten Teil im Anhang versteckt (aufrunden wenn ich exakt zwischen zwei werten liege).
Aber hier nochmal konkret:
Ich möchte aus einem sortierten Array den Wert ermitteln, welcher einem Suchelement am nächsten ist. Sollte das Array zwei Werte mit gleichem Abstand enthalten, möchte ich IMMER den größeren Wert erhalten.
VG,
Torsten
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
| |