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 

Von der Funktionstabelle zur vereinfachten Funktionsgleichung



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!

15.02.2013, 14:01
Beitrag #9

Kiesch Offline
LVF-Stammgast
***


Beiträge: 412
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: Von der Funktionstabelle zur vereinfachten Funktionsgleichung
Moment, dein Problem ist doch lediglich:

Du hast eine Funktionstabelle wie in Post 1 gegeben (alle Eingänge + was dabei am Ausgang rauskommt) und das in allen Varianten. Daher:

Labview muss eigentlich nur das machen was da steht. *hust* Außerdem willst du Labview dazu bringen die Funktions daraus zu generieren. Das ist etwas anspruchsvoller.

Zum ersten Teil:

das vorgehen ist eigentlich Straight forward. Entweder du liest über ActiveX (wenn ich mich recht erinnere) die Tabelle aus deinem Excel File ein, oder du machst das direkt in Labview (das eingeben lassen).

Dazu brauchst du:
1. Einen Numerischen Eingang für die Anzahl der "Eingänge" + potentiell einen Regler für die Anzahl der Ausgänge (in deinem Fall verstehe ich das so dass es nur einen Ausgang gibt, entsprechend brauchst du nur einen Regler).

2. Vermutlich am besten ein String Array für die Bezeichnungen.

3. ein 2D Bool Array *ist wahrscheinlich am praktischsten*

Was das programm dann machen muss: bei setzen des Eingänge Reglers wird automatisch das Bool Array entsprechend einer solchen Tabelle vorbelegt mit Ausgangsbelegungen alle auf False (zum Beispiel). Das String Array wird mit Bezeichnern gefüllt (die nur dazu dienen dass der Nutzer versteht wie das Bool Array zu verstehen ist.

Heist für 2 Eingänge:

String Array: E1 E2 A1
False False False
true False False
False true False
true true False

Um das zu generieren dürfte es am Einfachsten sein die Zahlen von 0 - 2^Anz(E) - 1 hochzuzählen, in ein Binär Array mit Länge (E) zu wandeln, am Ende noch so viele False anhängen wie man Ausgänge hat und dann einfach verknüpfen zu dem 2D Array.
Eventuell könnte es auch sinnvoll sein 2 2D Arrays zu machen, dann kann man das Array für die Eingänge als Anzeigeelement machen und verhindert so nicht gewollte Nutzereingriffe (der soll ja nur angeben was die Ausgänge machen sollen bei gegebenen Eingangsbelegung).

Der Nutzer trägt dann einfach seine Daten für A1 A2 etc. ein.

Jegliche Anfragen kann man intern wieder durch Umwandeln der Eingabe"zeile" (Werte für E1 - En) in eine Zahl erledigen (da diese dann wieder den Index des gewünschten Ausgabeelements darstellt ^^).

Zum generieren der Formel: Die einfachste Variante ist wahrscheinlich erst zu unterscheiden ob mehr Ausgänge True oder mehr False sind. Das minimale wird jeweils genommen. Anschließend mit der bekannten Variante (weis nichtmehr genau wie es hieß) für jeden einzelnen Fall die Formeln erstellen und verknüpfen.

An der Beispieltabelle:

E1 E2 A1
False False False
true False true
False true true
true true False


Bei A = False durch baut man die Formel mit:

[E1 ODER E2] UND [NICHT(E1) ODER NICHT(E2)] (am besten mal selbst durchrechnen und klarmachen dass das der Tabelle oben entspricht; die Blöcke in Eckigen Klammern setzen sich folgendermaßen zusammen: alle Eingänge "verodert"; wenn in der Funktionstabelle ein "true" steht, dann wird NICHT(Eingang) benutzt, sonst Eingang); das ganze wird dann noch "verundet".
Man kann sich leicht klarmachen, dass der Ausdruck in [] jeweils nur dann False wird, wenn die "abgelesene" Zeile vorliegt (erster Klammerausdurck entspricht zum Beispiel Zeile 1). Ist einer der Klammerausdrücke false, dann wird durch das "verunden" der Ausgang false.

Umgekehrt wenn man die A = true Cases nimmt:

[E1 UND NICHT(E2)] ODER [NICHT(E1) UND E2]

Hier entspricht ein true in der Tabelle dem Eingang, ein false NICHT(Eingang); diesmal wird innen verundet (entsprechend gibt der [] Ausdruck nur dann true aus, wenn die Zeile anliegt aus der er erstellt wurde) und aussen verodert (entsprechend wird für ein true in irgendeinem Klammerausdruck immer true ausgegeben).

Man kann leicht ersehen, dass die Formel immer dann am kürzesten ist, wenn man möglichst wenige Ausdrücke zum erstellen benutzen muss.

Damit kriegst du auch immer eine Stimmige generische Formel hin. Willst du die dann noch weiter kürzen musst du über die so erstellte Formel noch eine Routine drüberlaufen lassen die die vereinfacht (Fälle zusammenfasst wo ein Parameter egal ist zum Beispiel etc.). Das ist dann beliebig anspruchsvoll.

Aber wie gesagt:

- Funktionstabelle übernehmen und damit Richtig auswerten - kein Thema (steht ja alles eingegeben da und zwar für JEDEN Fall)
- eine generische Gleichung erstellen - kein Thema (siehe Ansatz weiter oben)
- erstellte Gleichung optimieren: beliebig kompliziert Big Grin

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
Antwort schreiben 


Nachrichten in diesem Thema
RE: Von der Funktionstabelle zur vereinfachten Funktionsgleichung - Kiesch - 15.02.2013 14:01

Gehe zu: