INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

Effizienter Programmieren



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

28.05.2013, 16:20
Beitrag #1

ChrisSchul Offline
LVF-Neueinsteiger


Beiträge: 2
Registriert seit: May 2013

12
2013
DE



Effizienter Programmieren
Hallo Forum-Community

Mein Name ist Christian und ich bin neu hier.

Seit ein paar Tagen lerne ich mit Hilfe der Evaluierungsversion ein wenig LabView, bevor ich dann auf die Messrechner losgelassen werde Wink


Ich habe dafür ein ganz nützliches Einführungsskript von Marko Aschoff gefunden und gehe dies Schritt für Schritt mit den Übungen durch.

Dort wurde die Aufgabe gestellt ein VI zu programmieren, dass Zufallskoordinaten in einem quadratischen Feld zwischen jeweils +/-1 erstellt, prüft ob diese innerhalb eines Kreises mit dem Radius 1 liegt, die Trefferzahl und die Trefferquote ausgibt und die einzelnen "Schüsse" in einem Graphen visualisiert.

Mein VI erfüllt (soweit ich das erkennen kann) alle diese Aufgaben. Kommt mir aber noch ein wenig zu umfangreich vor. Vor allem irritiert mich die hohe Rechendauer. Schon bei kleinen Werten (100-1000) kommt es mir zu langsam vor. Beim Wert 10000 konnte ich mir fast noch einen Kaffee holen.

Beim Pausieren stellte ich fest, dass es am längsten im zweiten Teil der Sequenz braucht.

Daher kurz eine Erläuterung, was eigentlich da alles passiert.
Zuerst werden die Zufallszahlen generiert und auf die passende Größe umgerechnet. Wegen meiner späteren "Sortierung" müssen dabei 0-Einträge ausgeschlossen werden. Danach wird je nachdem, ob der Punkt im Kreis liegt oder nicht der jeweilige Punkt in Spalte 1+2 bzw. 3+4 eines Arrays gespeichert. (Beim Speichern in Spalte 1+2 bleiben Spalten 3+4 Null)
Daraufhin kann bereits die Zahl der Treffer und die Trefferquote ausgegeben werden.

Danach drösel ich das Array in die einzelnen Zeilen auf und prüfe auf 0-Einträge. Diese werden dann aus dem 1-D-Array gelöscht. (Damit ich bei der Visualisierung nicht x-mal den Punkt 0/0 angezeigt bekomme)
Die einzelnen korrigierten Zeilen werden nun zu Clustern zusammengefasst und zusammen mit einem vorher gezeichnetem Kreis visualisiert.

Der letzte Teil in dem die Zeilen auf 0-Einträge geprüft werden dauert scheinbar am längsten.


Wie könnte ich diesen Teil optimieren?
Bzw. wie könnte ich bei der Überprüfung "Liegt der Punkt im Kreis oder nicht?" geschickter vorgehen?


Vielen Dank schonmal!

Gruß,
Christian


Angehängte Datei(en)
12.0 .vi  schuesse.vi (Größe: 28,68 KB / Downloads: 225)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
28.05.2013, 16:37 (Dieser Beitrag wurde zuletzt bearbeitet: 28.05.2013 16:38 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Effizienter Programmieren
Hallo Christian,

ohne dein VI anschauen zu können möchte ich dich auf die komplexen Zahlen verweisen:
   
Die FOR-Loop generiert Zufallszahlen, die auf den Bereich [-1,+1] "ausgedehnt" werden. Ab dann wird mit komplexen Zahlen gearbeitet: der Vergleich mit dem Kreis reduziert sich auf die Abfrage des Radius!

Wenn dein VI zu langsam ist/wird, hast du wohl auf LabVIEW-Sachen wie Autoindexing etc. verzichtet...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.05.2013, 20:31
Beitrag #3

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Effizienter Programmieren

Akzeptierte Lösung

Die Sequenzstruktur ist überflüssig, es wird schon alles per DATAFLOW in der richtigen Reihenfolge abgearbeitet.

Total überflüssig ist die äußere FOR-Schleife im zweiten Sequenz-Schritt, und das ist auch dein Performance-Killer.
Bei 10000 Schüssen machst du 10000-mal dieselbe Auswertung!

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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.05.2013, 07:04
Beitrag #4

ChrisSchul Offline
LVF-Neueinsteiger


Beiträge: 2
Registriert seit: May 2013

12
2013
DE



RE: Effizienter Programmieren
Ohjeh, Anfängerfehler Wink

VIELEN DANK!

Die For-Schleife war ein relikt aus einem anderem Versuch gewesen.
Ohne die geht es natürlich jetzt dementsprechend schneller!


Danke auch für den Tip mit den komplexen Zahlen!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.05.2013, 07:51
Beitrag #5

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
RE: Effizienter Programmieren
Hallo Gerd,

kannst Du mir mal das Bsp. hochladen? Dann muss ich es nicht "nachbauen". Big Grin

Gruß Markus

(28.05.2013 16:37 )GerdW schrieb:  Hallo Christian,

ohne dein VI anschauen zu können möchte ich dich auf die komplexen Zahlen verweisen:

Die FOR-Loop generiert Zufallszahlen, die auf den Bereich [-1,+1] "ausgedehnt" werden. Ab dann wird mit komplexen Zahlen gearbeitet: der Vergleich mit dem Kreis reduziert sich auf die Abfrage des Radius!

Wenn dein VI zu langsam ist/wird, hast du wohl auf LabVIEW-Sachen wie Autoindexing etc. verzichtet...

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.05.2013, 07:56
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Effizienter Programmieren
Hallo Markus,

Zitat:kannst Du mir mal das Bsp. hochladen? Dann muss ich es nicht "nachbauen".
Tut mir leid, hab's nicht mehr!
Du kennst doch die inoffizielle Forumregel: Wenn der OP kein VI anhängt, bekommt er auch keines geliefert...

@Chris:
Wenn du willst, dass deine VIs "besser" werden, solltest du sie auch hier anhängen...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.05.2013, 09:19 (Dieser Beitrag wurde zuletzt bearbeitet: 29.05.2013 09:20 von Y-P.)
Beitrag #7

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
RE: Effizienter Programmieren
Hab's noch etwas getunt:
   

12.0 .vi  Kreis (enthaltene Punkte).vi (Größe: 19,96 KB / Downloads: 198)


Gruß Markus

EDIT: Statt Durchmesser meine ich natürlich den Radius (wer's ändern will).

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.05.2013, 09:40
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Effizienter Programmieren
Hallo Markus,

und jetzt noch das Ramp.vi statt der FOR-Loop zum Berechnen der Winkel von 0 bis 2pi Big Grin

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.05.2013, 12:27 (Dieser Beitrag wurde zuletzt bearbeitet: 29.05.2013 12:34 von Lucki.)
Beitrag #9

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Effizienter Programmieren
Und noch'n VI..
       

8.6 .vi  schuesse.vi (Größe: 28,46 KB / Downloads: 216)

Übrigens: Für den Aufbau der Arrays hattest Du die Ersetzen-Funktion gewählt. Brav so, denn es beweist, dass Du fleißig im Forum gelesen hast, wo es allerorten empfohlen wird. Bei neueren Versionen von LV bringt es aber nur bei sehr großen Array was, hier, wo du sicher nicht über 10000 Elemente gehen wirst, bringt es nichts.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Programmieren im Formelknoten DrHoas 9 12.690 26.06.2021 23:22
Letzter Beitrag: Martin.Henz
  Tic Tac Toe Programmieren OenerSer 3 3.008 11.05.2021 09:26
Letzter Beitrag: OenerSer
  Labview Memory Programmieren OenerSer 5 3.812 27.04.2021 13:05
Letzter Beitrag: GerdW
  Statemachine programmieren… Granit 8 10.892 30.04.2017 16:42
Letzter Beitrag: Granit
  Übersichtliches Programmieren LabVIEW cobain2004 2 4.365 29.10.2015 17:57
Letzter Beitrag: IchSelbst
  Automatischen Ablauf programmieren Freaky29 3 4.999 03.02.2015 11:27
Letzter Beitrag: Freaky29

Gehe zu: