Schauen Sie sich dieses Skript an, um zu sehen, ob es das ist, wonach Sie gesucht haben.
Namen standardmäßig hierher ( 1 );
Ntables = N-Tabelle ();
Tabellenliste = {};
Für ( ich = 1 , i <= Ntables, i++,
tabellenliste[i] = Datentabelle ( ich )
);
//show(tableList);
desTable = {};
conTable = {};
sameTableAlert = Ausdruck (
Dialog (
"Wählen Sie für jede Auswahl unterschiedliche Datentabellen." ,
Textfeld ( " " ),
Taste( "OK" )
)
);
noTableAlert = Ausdruck (
Dialog ( "Eine Konstruktionsdatentabelle muss geöffnet sein." , Textfeld ( " " ), Taste( "OK" ) )
);
noMixtureFacAlert = Ausdruck (
Dialog ( "Die Designtabelle hat keine Mischungsfaktoren." , Textfeld ( " " ), Taste( "OK" ) )
);
doWork = Ausdruck (
//Bewertung der Konstruktionstabelle
numCols = N Spalte ( desTable );
numRows = N-Reihe ( desTable );
numMixFac = 0 ;
XMatrix = [];
mixLower = [];
mixUpper = [];
mixSum = [];
mixCon = [];
//show(numCols);
//show(numRows);
Aktuelle Datentabelle ( desTable );
Für ( ich = 1 , i <= numCols, i++,
col = Spalte ( ich );
prop = Spalte << Eigentum bekommen ( "Mischung" );
// zeigen (prop);
Ob ( Ist Liste (Stütze),
numMixFac++;
tmp = Spalte << als Matrix erhalten ;
// zeigen (tmp);
XMatrix ||= tmp;
// zeigen (XMatrix);
mixLower ||= {Stütze[ 1 ]};
mixUpper ||= {Stütze[ 2 ]};
mixSum ||= {prop[ 3 ]};
//show(numMixFac);
);
);
Ob ( numMixFac == 0 ,
noMixtureFacAlert,
satCon = J ( numZeilen, 1 , 0 );
//show(satCon);
//Einfache Constraint-Matrix einrichten
numConstraintsOld = 2 * numMixFac + 1 ;
conMatrix = J ( 1 , numMixFac, 1 );
conMatrix = conMatrix |/ Identität ( numMixFac ) |/ Identität ( numMixFac );
//show(conMatrix);
mixSumVal = mixSum[ 1 ];
mixCon = mixCon || {mixSumVal} || mixLower || mixUpper;
//show(mixCon);
//Einschränkungen für lineare Ungleichungen abrufen, wenn eine Einschränkungstabelle vorhanden ist
Ob ( conVal == 1 ,
numConstraintsNew = numConstraintsOld;
Aktuelle Datentabelle ( conTable );
numIneqRow = N-Reihe ( conTable );
//Suche nach doppelten Beschränkungen
FullConMat = conMatrix || mixCon`;
Für ( ich = 1 , i <= numIneqCon, i++,
con = Spalte ( ich );
prop = con << Eigentum bekommen ( "Einschränkungszustand" );
charprop = Verkohlen ( Name Ausdruck ( Stütze ) );
Ob ( numIneqRow != numMixFac + 1 ,
Wurf ( "Kann Beschränkungen nur mit reinen Mischungsdesigns verwenden." )
);
ineqConMat = con << als Matrix erhalten ;
//show(ineqConMat);
GesamtTest = 0 ;
Für ( j = 1 , (j <= numConstraintsOld), j++,
//Finde das erste Nicht-Null-Element
Für ( k = 1 , k <= numMixFac + 1 , k++,
Ob ( FullConMat[j, k] != 0 ,
piv = FullConMat[j, k];
ind = k;
k = numMixFac + 2 ;
)
);
testen = 0 ;
Ob ( ineqConMat[ind] != 0 ,
mult = piv / ineqConMat[ind];
newRow = ineqConMat * mult;
newRow = newRow` - FullConMat[j, 0 ];
Für ( k = 1 , k <= numMixFac + 1 , k++,
Ob ( Abs ( neueReihe[k] ) > 1e - 10 ,
testen++
)
);
,
testen++
);
Ob ( testen == 0 ,
GesamtTest++;
j = numConstraintsOld + 1 ;
);
);
//show(gesamtTest);
Ob (GesamtTest == 0 ,
tmp = ineqConMat[ 1 :: numMixFac];
KonMatrix = KonMatrix |/ tmp`;
numConstraintsNew++;
tmp = ineqConMat[numMixFac + 1 :: numMixFac + 1 ];
mixCon = mixCon || tmp;
);
//show(mixCon);
);
,
numConstraintsNew = numConstraintsOld
);
//show(conMatrix);
//Überprüfen Sie, wie die Zeilen die Einschränkungen erfüllen
resultMat = conMatrix * XMatrix`;
//show(resultMat);
Für ( j = 1 , j <= numRows, j++,
Für ( ich = 1 , i <= numConstraintsNew, i++,
Ob ( Abs ( resultMat[i, j] - mixCon[i] ) < . 00000001 ,
satCon[j, 1 ]++
)
)
);
//show(satCon);
// die Punkte beschriften
Aktuelle Datentabelle ( desTable );
pointCol = desTable << Neue Spalte ( "Punkttyp" , Zeichen, Nominal );
Für ( ich = 1 , i <= numRows, i++,
Ob (
(satCon[i] >= numMixFac),
pointCol[i] = "Scheitel" ;
Zeilenzustand ( ich ) = Farbzustand ( 3 );,
(satCon[i] == numMixFac - 1 ),
pointCol[i] = "Kante" ;
Zeilenzustand ( ich ) = Farbzustand ( 4 );,
(satCon[i] == 1 ),
pointCol[i] = "Innere" ;
Zeilenzustand ( ich ) = Farbzustand ( 5 );,
numFace = numMixFac - satCon[i];
pointCol[i] = Verkohlen ( numGesicht ) || "D-Gesicht" ;
Zeilenzustand ( ich ) = Farbzustand ( numMixFac - satCon[i] + 6 );
)
);
pointCol << Etikette ( 1 );
// Ternäres Plotskript erstellen
xString = "" ;
Für ( ich = 1 , i <= numCols, i++,
col = Spalte ( ich );
prop = Spalte << Eigentum bekommen ( "Mischung" );
Ob ( Ist Liste (Stütze),
Spaltenname = Verkohlen ( Spaltenname ( ich ) );
//show(Spaltenname);
xString = xString || Ausdruck ( ":" ) || Spaltenname || Ausdruck ( "," );
);
);
len = Länge (xString);
xString2 = Substr (xString, 1 , len - 1 );
// zeigen (xString2);
Ob ( numMixFac > 2 ,
frameString = "" ;
Ob ( numMixFac == 3 ,
FrameString = FrameString || "bericht(obj)[framebox(" || Verkohlen ( 1 ) ||
")]< ,
numPlots = (numMixFac * (numMixFac - 1 )) / 2 ;
Für ( ich = 1 , i < numPlots, i++,
FrameString = FrameString || "bericht(obj)[framebox(" || Verkohlen ( ich ) ||
")]< \!N "
);
FrameString = FrameString || "bericht(obj)[framebox(" || Verkohlen ( ich ) ||
")]< ;
);
d1 = "obj=Ternärer Plot(Y(" || xString2 || ")); \!N " || frameString;
d2 = Bewertung ( Ausdruck ( Analysieren ( d1 ) ) );
d3 = Ausdruck ( desTabelle << Neue Tabelleneigenschaft ( "Ternäre Handlung" , a ) );
Bewertung ( Ersatz ( Name Ausdruck (d3), Ausdruck ( a ), Name Ausdruck ( d2 ) ) );
);
Ob ( NTables > 1 ,
dl << Fenster schließen
);
);
);
initState = 0 ;
Ob (
(Ntables == 0 ), noTableAlert,
(Ntables == 1 ),
conVal = 0 ;
desTable = tabellenliste[ 1 ];
arbeite;,
dlg= Neues Fenster ( „Mischungspunkte identifizieren“ ,
Border-Box ( Links ( 3 ), Unterseite( 3 ), Recht ( 2 ), Seiten ( 28 ), oben( 3 ),
V Listenfeld (
Panel-Box ( "Tisch Einstellungen" ,
checkObj = Kontrollkästchen aktivieren (
{ "Einschränkungstabelle verwenden" },
Ob ( initState == 0 ,
pbox << anhängen (
pbox2 = Panel-Box ( "Beschränkungsdatentabelle auswählen" ,
comboObj3 = Kombinationsfeld ( Tabellenliste )
)
);
pbox << wieder aufführen ;
,
pbox2 << löschen ;
pbox << wieder aufführen ;
);
Ob ( initState == 0 ,
initState = 1 ,
initState = 0
);
)
),
pbox = Panel-Box ( "Datentabellen auswählen" ,
Panel-Box ( "Konstruktionsdatentabelle auswählen" , comboObj1 = Kombinationsfeld ( Tabellenliste ) ),
),
Button-Box ( "OK" ,
desTableNum = comboObj1 << werden ;
//show(desTableNum);
desTable = Datentabelle ( Bewertung ( desTableNum ) );
//show(desTable);
conVal = checkObj << werden ( 1 );
Ob ( (conVal == 1 ) & (Ntables == 1 ),
Wurf ( "Sowohl eine Design- als auch eine Constraint-Tabelle müssen geöffnet sein." )
);
Ob ( conVal == 1 ,
conTableNum = comboObj3 << werden ;
//show(conTableNum);
conTable = Datentabelle ( Bewertung ( conTableNum ) );
//show(conTable);
);
Ob ( (conVal == 1 ) & (desTableNum == conTableNum),
sameTableAlert,
Ob ( conVal == 1 ,
Aktuelle Datentabelle ( conTable );
numIneqCon = N Spalte ( conTable );
Für ( ich = 1 , i <= numIneqCon, i++,
con = Spalte ( ich );
prop = con << Eigentum bekommen ( "Einschränkungszustand" );
charprop = Verkohlen ( Name Ausdruck ( Stütze ) );
Ob (
(charprop != "ConstraintState (kleiner als)" ) & (charprop !=
"ConstraintState (größer als)" ),
Wurf ( "Muss eine Constraint-Tabelle verwenden." )
);
);
);
arbeite;
);
)
)
)
)
);