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 

Fragwürdiges Phänomen mit Arrays



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!

27.04.2011, 17:02
Beitrag #1

WinniePooh Offline
LVF-Grünschnabel
*


Beiträge: 18
Registriert seit: Mar 2011

9.0
2011
DE


Deutschland
Fragwürdiges Phänomen mit Arrays
Hallo liebe LabView Gemeinde,
seit einigen Tagen habe ich in meinem Projekt den Fehler,
das mein Porgramm in einem Array nullen schreibt.

Ich kann dies nicht nachvollziehen, wo und wie es sie reinschreibt.
Deswegen brauche ich mal ein Rat.

Anbei lade ich das Programm komentiert hoch.

Die Funktion des Programms soll sein, Spannungsspitzen in einem sehr kurzem
Zeitpunkt darzustellen.

Bitte Um Hilfe.

Mfg

Winnie


Angehängte Datei(en)
2009 .vi  Messschaltung_V13.vi (Größe: 102,62 KB / Downloads: 146)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
27.04.2011, 18:56
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Fragwürdiges Phänomen mit Arrays
Überprüfe mal, ob die Arrays, die an der markierten Stelle rauskommen, wirklich immer dieselbe Größe haben:
   
Da du die alle zu einem 2D-Array zusammenbaust, werden Werte, die mglw. nicht vorhanden sind (da ein Array kürzer oder länger ist) mit Nullern aufgefüllt.

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
28.04.2011, 08:48
Beitrag #3

WinniePooh Offline
LVF-Grünschnabel
*


Beiträge: 18
Registriert seit: Mar 2011

9.0
2011
DE


Deutschland
RE: Fragwürdiges Phänomen mit Arrays
Hi,
ich habe die Länge des Arrays überprüft und du hast recht,
sie haben nicht dieselbe länge. Und wenn du schon sagst, dass
LabView die Leeren Stellen mit Nullen vollschreibt so kam ich auf
diese Lösung wie im Bild.

Das Problem bei der Lösung ist sie ist viel zu langsam. Ich brauche
etwas schnelleres womit ich die stellen löschen kann und zweitens
ist dann die Frage, wird mir LabView nicht nochmal die leeren Stellen
mit Nullen vollschreiben.

Gruß


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.04.2011, 09:26
Beitrag #4

Martin Heller Offline
LVF-Stammgast
***


Beiträge: 250
Registriert seit: Feb 2010

2011 SP1
2008
EN

5232
Schweiz
RE: Fragwürdiges Phänomen mit Arrays
Hallo Winnie

Auto-Indexing (Ausgang der Schlaufe) ist das "schnellste", aber es wird alles hineingeschrieben...

Deine for-Schleife benötigt kein Index des Arrays für den Loop Count, da die Schleife wegen "Enable Indexing/k.a auf Deutsch".
mfg Martin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.04.2011, 10:12
Beitrag #5

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: Fragwürdiges Phänomen mit Arrays
(28.04.2011 08:48 )WinniePooh schrieb:  Das Problem bei der Lösung ist sie ist viel zu langsam. Ich brauche etwas schnelleres womit ich die stellen löschen kann und zweitens ist dann die Frage, wird mir LabView nicht nochmal die leeren Stellen mit Nullen vollschreiben.
Die gepostete For-Schleife funktioniert so nicht. Du müsstest ein Schieberegister verwenden anstelle eines Tunnels. Der Tunnel bewirkt, dass nur die letzte Null ignoriert wird.

Langsam wird immer dann, wenn Kopieroperationen mit Array gemacht werden müssen. So in deinem Falle, da beim Eliminieren einer Null immer alle die Elemente, die nach der Null folgen, verschoben werden müssen. Im allgemeinen kann man sagen, dass Elemente wie "In Array ersetzen" insgesamt performanter sind. (Wobei es in deinem Falle auf die Anzahl der zu löschen Elemente ankommt bezogen auf die Gesamtanzahl der Arrayelemente.)

Ich würde das Eliminieren der Nullen machen wie im Bild angegeben.

Noch eine Sache:
Das Abfragen einen DBL-Zahl auf einen exakten Wert (hier Null) mittels des Elementes "Ist Gleich" ist praktisch gesehen ungünstig. Es kann nämlich vorkommen, dass der Anwender meint, ein Wert sein Null, "computertechnisch" ist er aber z.B. 10E-25 ...


Angehängte Datei(en) Thumbnail(s)
   

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.04.2011, 16:02
Beitrag #6

Kiesch Offline
LVF-Stammgast
***


Beiträge: 401
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: Fragwürdiges Phänomen mit Arrays
Wie löst man das dann programmatisch? Betrag von Wert kleiner Maschinengenauigkeit? Oder gibt man da noch ne Sicherheitsmarge mit, da sich Rundungsfehler akkumulieren können?

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
28.04.2011, 16:32
Beitrag #7

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: Fragwürdiges Phänomen mit Arrays
(28.04.2011 16:02 )Kiesch schrieb:  Wie löst man das dann programmatisch? Betrag von Wert kleiner Maschinengenauigkeit?
Im Prinzip genau so.
Allgemein gilt für "X=Y?": "|X-Y| < e ?", wobei e die Maschinenungenauigkeit ist. Und die kann man ansetzen wie man will. Nur eben nicht kleiner als die "kleinste Zahl, die man zu 1 dazu zählen kann, sodass das Ergebnis ungleich 1 ist." (siehe WikiPedia). Für viele Fälle reicht ein e mit einer Genauigkeit von 6 Stellen - bedenke: DBL hat 16 Stellen.

Zitat:Oder gibt man da noch ne Sicherheitsmarge mit, da sich Rundungsfehler akkumulieren können?
Im Prinzip hast du hiermit Recht.
Man muss als Programmierer immer im Hinterkopf haben, dass bei einer permanenten Addition ein erheblicher Rundungsfehler entstehen kann (nicht muss). Daher sollte man, falls möglich, nicht einen Algorithmus wählen, der kleine Werte aufaddiert, sondern einen, der einen konstanten Wert mit z.B. einer Integer-Zahl multipliziert.

Die Sache mit dem Rundungsfehler gilt es natürlich nur bei Gleitkommazahlen. Bei Integer-Zahlen gibt es grundsätzlich keine Rundungsfehler.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.04.2011, 19:00 (Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2011 10:27 von Lucki.)
Beitrag #8

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: Fragwürdiges Phänomen mit Arrays
(28.04.2011 16:32 )IchSelbst schrieb:  Allgemein gilt für "X=Y?": "|X-Y| < e ?", wobei e die Maschinenungenauigkeit ist. Und die kann man ansetzen wie man will. Nur eben nicht kleiner als die "kleinste Zahl, die man zu 1 dazu zählen kann, sodass das Ergebnis ungleich 1 ist." (siehe WikiPedia). Für viele Fälle reicht ein e mit einer Genauigkeit von 6 Stellen - bedenke: DBL hat 16 Stellen.

Das ist alles genau richtig, bis auf die anfängliche Formel. Die Maschinenungenauigkeit ist auf die Zahl 1 bezogen. Für die Ungenauigkeit einer anderen Zahl als 1 muß man die Maschinenungenauigkeit mit der Zahl multiplizieren. Bei 100 ist die Ungenauigkeit entsprechend +-100*e. Es muß also richtig heißen:
"X=Y"? --> |X-Y| < |X|*e
wobei man statt |X| auch |Y| verwenden kann.
oder: |X/Y-1| < e oder: |Y/X-1| < e
Wenn man das so macht, muß man nach meiner Erfahrung nicht noch Sicherheiten berücksichtigen. Ich denke eher, daß die in der LV- Maschinenkonstante schon mit drin sind.
Edit: Habe das e mal bezüglich Reserven geprüft, mit diesem VI:
   
Ergebnis:
Zahl <2: Ergebnis immer ungleich
Zahl 2..4: Mal so, mal so
Zahl >4 immer gleich.
Die Reserven sind also da, denn sonst wäre der Umschlagpunkt bei 1 und nicht bei 2..4.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.04.2011, 15:39
Beitrag #9

WinniePooh Offline
LVF-Grünschnabel
*


Beiträge: 18
Registriert seit: Mar 2011

9.0
2011
DE


Deutschland
RE: Fragwürdiges Phänomen mit Arrays
(28.04.2011 10:12 )IchSelbst schrieb:  Langsam wird immer dann, wenn Kopieroperationen mit Array gemacht werden müssen. So in deinem Falle, da beim Eliminieren einer Null immer alle die Elemente, die nach der Null folgen, verschoben werden müssen. Im allgemeinen kann man sagen, dass Elemente wie "In Array ersetzen" insgesamt performanter sind. (Wobei es in deinem Falle auf die Anzahl der zu löschen Elemente ankommt bezogen auf die Gesamtanzahl der Arrayelemente.)

Ich würde das Eliminieren der Nullen machen wie im Bild angegeben.

Noch eine Sache:
Das Abfragen einen DBL-Zahl auf einen exakten Wert (hier Null) mittels des Elementes "Ist Gleich" ist praktisch gesehen ungünstig. Es kann nämlich vorkommen, dass der Anwender meint, ein Wert sein Null, "computertechnisch" ist er aber z.B. 10E-25 ...

Nach dem Programm was du erstellt hast, nimmst du die Nullen aus dem Array raus und schiebst sie in ein neues Array.

Mein Anliegen ist es, in dem neuen Array die Werte zu haben, die keine Nullen sind, d.h. alles ausser den nullen.
Habe versucht das Programm versucht nach meinen Wünschen zu ändern, aber irgendwie weiß ich nicht wie das genau miteinander
zusammenhängt.

Kannst du mir mal da ein Tipp geben?

Gruß Winnie
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.04.2011, 16:00 (Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2011 16:01 von IchSelbst.)
Beitrag #10

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: Fragwürdiges Phänomen mit Arrays
(29.04.2011 15:39 )WinniePooh schrieb:  Nach dem Programm was du erstellt hast, nimmst du die Nullen aus dem Array raus und schiebst sie in ein neues Array.
Nein.

Was du im Bild siehst, ist der FALSE-Case der IF-Struktur, nicht der TRUE-Case! Im False-Case ist das Array wie auch der aktuelle Index einfach nur durchverbunden.

Das Element "Im Bereich" liefert true, wenn der Wert zwischen den Grenzen liegt. Die Grenzen sind +-1E-5. Ist der Wert Null, liefert das Element true. Bei True wird das bestehende Array weiter verwendet, bei False, also wenn der Wert ungleich Null ist, wird dieses Element in das Array übernommen.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Auswahl eines Arrays anhand des Wertes eines zweiten Arrays treffen alan 2 4.189 19.02.2015 16:12
Letzter Beitrag: alan
Bug Arrays... immer wieder Arrays nurso 6 6.716 15.08.2014 10:39
Letzter Beitrag: Lucki
  Array of Cluster(Arrays) nach Cluster(Concatenate Arrays) rasta 7 8.974 18.12.2008 12:33
Letzter Beitrag: rasta
  seltsames Phänomen nach exe-Erstellung Hugin 6 4.018 28.11.2008 12:10
Letzter Beitrag: jg

Gehe zu: