LabVIEWForum.de - Wert an naheliegensten Wert aus Array anpassen

LabVIEWForum.de

Normale Version: Wert an naheliegensten Wert aus Array anpassen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hier mal zwei Lösungen, die eben genau das machen, was ich will. Teilweise mit eurem Input verbaut (vielen Dank dafür). Falls noch irgendwer ne Optimierung findet, gerne!

[attachment=56346]
[attachment=56347]

Gibts ne gute Methode zum Vergleich, der beiden Wege? Geschwindigkeit, Speicherauslastung?
(25.07.2016 06:33 )TSC schrieb: [ -> ]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.
Und? Erfüllt der gepostete Code die Anforderungen? Ist es zu kompliziert? Wenn ja, wer hat einen besseren Vorschlag?
Gruß Ludwig

Edit: zum letzten Posting. Warum nicht einfach so?
[attachment=56351]
[attachment=56350]
Hallo TSC,

dreh doch dein sortiertes Array einfach mal um:
[attachment=56349]
Jetzt wird der minimale Abstand gesucht und automatisch das erste zutreffende Element indiziert - was durch das Umdrehen eben der größere Wert ist…
(25.07.2016 07:32 )Lucki schrieb: [ -> ]
(25.07.2016 06:33 )TSC schrieb: [ -> ]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.
Und? Erfüllt der gepostete Code die Anforderungen? Ist es zu kompliziert? Wenn ja, wer hat einen besseren Vorschlag?
Gruß Ludwig

Also wenn ich deinen Code richtig verstanden habe, rundet er auf ganzzahlige Werte (immer zum Integer mit der kleinsten Differenz, aufrunden in der Mitte). Aber ich möchte ja aus einem Array das nächste Element haben und nicht die nächste ganze Zahl. Da kann auch mal ein Sprung von 10000 zwischen zwei Werten liegen.
In Kombination mit dem Schwellwert_VI kann ich damit natürlich wunderbar den Index runden! Damit habe ich dann 3 Lösungen, die machen was ich will.

[attachment=56352]

InputArray: {1;2;4;8}
get(0)=1;
get(1)=1;
get(1,49)=1;
get(1,5)=2;
get(2)=2;
get(3)=4;
get(4)=4;
get(6)=8;
get(8)=8;
usw.

Nun suche ich einen VI-Vergleicher was Speicherauslastung, CPU-Belastung und Geschwindigkeit angeht um die optimale Lösung zu bestimmen. Aber wie so oft ist das wohl nicht so einfach, weils vom Imput abhängig ist.
(25.07.2016 08:19 )TSC schrieb: [ -> ]Also wenn ich deinen Code richtig verstanden habe, rundet er auf ganzzahlige Werte (immer zum Integer mit der kleinsten Differenz, aufrunden in der Mitte). Aber ich möchte ja aus einem Array das nächste Element haben und nicht die nächste ganze Zahl. Da kann auch mal ein Sprung von 10000 zwischen zwei Werten liegen.
Ist schon klar, aber ich wollte doch gar nicht ein verbessertes Hauptprogramm liefern. Für dieses fehlte Dir eine Rundungsfunktion auf den nächsten ganzahligen Index - zum Einbau in Dein Programm. Ich hielt es für selbstverständlich, dass man das so versteht, und nicht als missglücktes alternatives Hauptprogramm. War leider ein Irrtum.

Zitat:Nun suche ich einen VI-Vergleicher was Speicherauslastung, CPU-Belastung und Geschwindigkeit angeht um die optimale Lösung zu bestimmen. Aber wie so oft ist das wohl nicht so einfach, weils vom Imput abhängig ist.
Bei den heutigen PC-Leistungen interessiert das meist niemanden. Es sei denn, es handelst sich um sehr sehr große Arrays. Um welche Größenordnung handelt es sich denn hier?
(25.07.2016 09:20 )Lucki schrieb: [ -> ]Ist schon klar, aber ich wollte doch gar nicht ein verbessertes Hauptprogramm liefern. Für dieses fehlte Dir eine Rundungsfunktion auf den nächsten ganzahligen Index - zum Einbau in Dein Programm. Ich hatte geglaubt, das verstehst Du auch so, und nicht als missglücktes alternatives Hauptprogramm.
Zitat:Nun suche ich einen VI-Vergleicher was Speicherauslastung, CPU-Belastung und Geschwindigkeit angeht um die optimale Lösung zu bestimmen. Aber wie so oft ist das wohl nicht so einfach, weils vom Imput abhängig ist.
Bei den heutigen PC-Leistungen interessiert das meist niemanden. Es sei denn, es handelst sich um sehr sehr große Arrays. Um welche Größenordnung handelt es sich denn hier?

Hatte die Anhänge bei dir erst übersehen (Forum am Handy ist doof). Und nun ist deine Runden-Funktion im Solution3 eingebaut.

Das ganze soll später mal in einem Hardware-in-the-Loop-Prüfstand in Echtzeit dynamische Konfigurationen aus einer Datenbank bereitstellen (das klingt beim Tippen ja schon widersprüchlich!? Autsch!). An meiner Schnittstelle liegt aber eben genau dieses Array schon an. Die Werte selbst liegen alle zwischen 0,0000000 und 0,9999999. Und werden vorher durch eine Simulation gefiltert. Je nach Filter, bekomme ich dann eben ein Array mit 2 Werten oder mit 9999999 Werten oder was am realistischsten ist, irgendwas dazwischen!
Die 10^7 fache Ausführung des Programms in #14 dauert bei mir ca. 500ms. An der Ausführungszeit dieses Codes würde Dein Projekt bestimmt nicht scheitern.
Ja, ich mache mir bei der Funktion eigentlich auch keine Gedanken, hast ja recht! Trotzdem fände ich einen VI-Vergleich oder eine ordentliche Analyse interessant. Aber das ist wohl ein anderes Thema. Wink

Bis hierhin auf jeden Fall vielen Dank an alle beteiligten!
Seiten: 1 2
Referenz-URLs