Dai un'occhiata a questo script per vedere se è quello che stavi cercando?
Nomi predefiniti qui ( 1 );
Ntabelle = Tabella N ();
listatabella = {};
Per ( io = 1 , i <= Ntabelle, i++,
tableList[i] = Tabella dati ( io )
);
//mostra(lista tabella);
desTable = {};
conTable = {};
stesso avviso tabella = espr (
Dialogo (
"Scegli tabelle di dati diverse per ogni selezione." ,
Casella di testo ( " " ),
Pulsante( "OK" )
)
);
noTableAlert = espr (
Dialogo ( "Deve essere aperta una tabella di dati di progettazione." , Casella di testo ( " " ), Pulsante( "OK" ) )
);
noMixtureFacAlert = espr (
Dialogo ( "Il Design Table non ha fattori di miscelazione." , Casella di testo ( " " ), Pulsante( "OK" ) )
);
fareLavoro = espr (
//Valuta la tabella dati
numCols = N Col ( desTable );
numRighe = Riga N ( desTable );
numMixFac = 0 ;
matrice X = [];
mixInferiore = [];
mixUpper = [];
sommamiscela = [];
mixCon = [];
//mostra(numCol);
//mostra(numRighe);
Tabella dati corrente ( desTable );
Per ( io = 1 , i <= numCols, i++,
col = Colonna ( io );
prop = col << ottenere proprietà ( "Miscela" );
//mostra(prop);
Se ( È Lista ( puntello ),
numMixFac++;
tmp = col << ottenere come matrice ;
//mostra(tmp);
XMatrice ||= tmp;
//mostra(XMatrice);
mixLower ||= {prop[ 1 ]};
mixUpper ||= {prop[ 2 ]};
mixsum ||= {prop[ 3 ]};
//mostra(numMixFac);
);
);
Se ( numMixFac == 0 ,
noMixtureFacAlert,
satCon = J ( numRighe, 1 , 0 );
//show(satCon);
//Imposta Simple Constraint Matrix
numVincoliOld = 2 *numMixFac + 1 ;
conMatrice = J ( 1 , numMixFac, 1 );
conMatrice = conMatrice |/ Identità (numMixFac) |/ Identità (numMixFac);
//mostra(conMatrice);
mixSumVal = mixSum[ 1 ];
mixCon = mixCon || {mixSumVal} || mixInferiore || mixUpper;
//mostra(mixCon);
//Ottieni vincoli di disuguaglianza lineare se è presente una tabella di vincoli
Se ( conVal == 1 ,
numConstraintsNew = numConstraintsOld;
Tabella dati corrente (contabella);
numIneqRiga = Riga N (contabella);
//cerca vincoli duplicati
FullConMat = conMatrix || mixCon`;
Per ( io = 1 , io <= numIneqCon, i++,
con = Colonna ( io );
prop = con << ottenere proprietà ( "Stato di vincolo" );
charprop = Char ( Nome Espr (prop));
Se ( numIneqRow != numMixFac + 1 ,
Gettare ( "Puoi usare i vincoli solo con progetti di miscele pure." )
);
ineqConMat = con << ottenere come matrice ;
//mostra(ineqConMat);
test generale = 0 ;
Per ( j = 1 , (j <= numVincoliVecchi), j++,
//trova il primo elemento diverso da zero
Per ( k = 1 , k <= numMixFac + 1 , k++,
Se ( FullConMat[j, k] != 0 ,
piv = FullConMat[j, k];
ind = k;
k = numMixFac + 2 ;
)
);
prova = 0 ;
Se (ineqConMat[ind] != 0 ,
mult = piv / ineqConMat[ind];
nuovaRiga = ineqConMat * multi;
nuovaRiga = nuovaRiga` - FullConMat[j, 0 ];
Per ( k = 1 , k <= numMixFac + 1 , k++,
Se ( Addominali ( nuovaRiga[k] ) > 1e - 10 ,
prova++
)
);
,
prova++
);
Se ( prova == 0 ,
test generale++;
j = numVincoliOld + 1 ;
);
);
//mostra(test generale);
Se (Test generale == 0 ,
tmp = ineqConMat[ 1 :: numMixFac];
conMatrix = conMatrix |/ tmp`;
numVincoliNuovo++;
tmp = ineqConMat[numMixFac + 1 :: numMixFac + 1 ];
mixCon = mixCon || tmp;
);
//mostra(mixCon);
);
,
numConstraintsNew = numConstraintsOld
);
//mostra(conMatrice);
//Verifica come le righe soddisfano i vincoli
resultMat = conMatrix * XMatrix`;
//mostra(risultatoMat);
Per ( j = 1 , j <= numRighe, j++,
Per ( io = 1 , i <= numVincoliNuovo, i++,
Se ( Addominali ( risultatoMat[i, j] - mixCon[i] ) < . 00000001 ,
satCon[j, 1 ]++
)
)
);
//show(satCon);
//etichetta i punti
Tabella dati corrente ( desTable );
pointCol = desTable << Nuova colonna ( "Tipo di punto" , Carattere, Nominale );
Per ( io = 1 , i <= numRighe, i++,
Se (
(satCon[i] >= numMixFac),
pointCol[i] = "Vertice" ;
Stato di riga ( io ) = Stato del colore ( 3 );,
(satCon[i] == numMixFac - 1 ),
pointCol[i] = "Bordo" ;
Stato di riga ( io ) = Stato del colore ( 4 );,
(satCon[i] == 1 ),
pointCol[i] = "Interno" ;
Stato di riga ( io ) = Stato del colore ( 5 );,
numFace = numMixFac - satCon[i];
pointCol[i] = Char ( numFace ) || "Faccia a D" ;
Stato di riga ( io ) = Stato del colore ( numMixFac - satCon[i] + 6 );
)
);
pointCol << etichetta ( 1 );
//Crea script di trama ternario
xStringa = "" ;
Per ( io = 1 , i <= numCols, i++,
col = Colonna ( io );
prop = col << ottenere proprietà ( "Miscela" );
Se ( È Lista ( puntello ),
nome col = Char ( Nome colonna ( io ) );
//mostra(nomecolonna);
xStringa = xStringa || espr ( " :" ) || nome col || espr ( "," );
);
);
len = Lunghezza ( xStringa );
xStringa2 = sost ( xStringa, 1 , len - 1 );
//mostra(xString2);
Se ( numMixFac > 2 ,
frameString = "" ;
Se ( numMixFac == 3 ,
frameString = frameString || "report(obj)[framebox(" || Char ( 1 ) ||
")]< ,
numPlots = (numMixFac * (numMixFac - 1 )) / 2 ;
Per ( io = 1 , i < numGrafici, i++,
frameString = frameString || "report(obj)[framebox(" || Char ( i ) ||
")]< \!N "
);
frameString = frameString || "report(obj)[framebox(" || Char ( i ) ||
")]< ;
);
d1 = "obj=Trama ternaria(Y(" || xString2 || ")); \!N " || frameString;
d2 = val ( espr ( Analizza (d1)));
d3 = espr ( desTable << Nuova proprietà tabella ( "Complotto ternario" , un ) );
val ( Sostituire ( Nome Espr (d3), espr ( un ), Nome Espr (d2)));
);
Se ( NTtabelle > 1 ,
dlg << chiudi la finestra
);
);
);
initStato = 0 ;
Se (
(Ntabelle == 0 ), noTableAlert,
(Ntabelle == 1 ),
conVal = 0 ;
desTable = tableList[ 1 ];
lavora;,
dlg = Nuova finestra ( "Identifica i punti di miscela" ,
Scatola di confine ( Sinistra ( 3 ), metter il fondo a( 3 ), Giusto ( 2 ), lati( 28 ), superiore( 3 ),
Casella di riepilogo V (
Scatola del pannello ( "Impostazioni tabella" ,
checkOggetto = Casella di controllo (
{ "Usa tabella dei vincoli" },
Se ( initStato == 0 ,
pbox << aggiungere (
pbox2 = Scatola del pannello ( "Seleziona tabella dati vincoli" ,
comboObj3 = Combo box ( Elenco tabelle )
)
);
pbox << riproporre ;
,
pbox2 << eliminare ;
pbox << riproporre ;
);
Se ( initStato == 0 ,
initStato = 1 ,
initStato = 0
);
)
),
pbox = Scatola del pannello ( "Seleziona tabelle dati" ,
Scatola del pannello ( "Seleziona tabella dati di progettazione" , comboObj1 = Combo box ( Elenco tabelle ) ),
),
Bottone ( "OK" ,
desTableNum = comboObj1 << ottenere ;
//mostra(desTableNum);
desTable = Tabella dati ( val ( desTableNum ) );
//mostra(desTable);
conVal = checkObj << ottenere ( 1 );
Se ( (conVal == 1 ) & (Ntabelle == 1 ),
Gettare ( "Sia una tabella di progettazione che quella di vincoli devono essere aperte." )
);
Se ( conVal == 1 ,
conTableNum = comboObj3 << ottenere ;
//mostra(conTableNum);
conTabella = Tabella dati ( val ( conTableNum ) );
//mostra(conTable);
);
Se ( (conVal == 1 ) & (desTableNum == conTableNum),
stesso avviso tabella,
Se ( conVal == 1 ,
Tabella dati corrente (contabella);
numIneqCon = N Col (contabella);
Per ( io = 1 , io <= numIneqCon, i++,
con = Colonna ( io );
prop = con << ottenere proprietà ( "Stato di vincolo" );
charprop = Char ( Nome Espr (prop));
Se (
(carprop != "Stato Vincolo (minore di)" ) & (charprop !=
"Stato Vincolo (maggiore di)" ),
Gettare ( "Necessità di utilizzare una tabella di vincoli." )
);
);
);
lavora;
);
)
)
)
)
);