Consultez ce script pour voir si c'est ce que vous cherchiez?
Noms par défaut ici ( 1 );
Ntables = Tableau N ();
tableListe = {} ;
Pour ( je = 1 , i <= Ntables, i++,
tableListe[i] = Tableau de données ( je )
);
//show(tableList);
desTable = {} ;
conTable = {} ;
memeTableAlert = Expr (
Dialogue (
"Choisir des tables de données différentes pour chaque sélection." ,
Zone de texte ( " " ),
Bouton( "D'ACCORD" )
)
);
noTableAlert = Expr (
Dialogue ( "Une table de données de conception doit être ouverte." , Zone de texte ( " " ), Bouton( "D'ACCORD" ) )
);
noMixtureFacAlert = Expr (
Dialogue ( "La table de conception n'a pas de facteurs de mélange." , Zone de texte ( " " ), Bouton( "D'ACCORD" ) )
);
faire du travail = Expr (
//Évaluer la table de conception
nombreCols = Col N ( désTable );
nombreLignes = N rangée ( désTable );
numMixFac = 0 ;
XMatrice = [] ;
mixLower = [] ;
mixUpper = [] ;
sommemix = [] ;
mixCon = [] ;
//show(numCols);
//show(numRows);
Tableau de données actuel ( désTable );
Pour ( je = 1 , je <= nombreCols, je++,
col = Colonne ( je );
prop = colonne << obtenir une propriété ( "Mélange" );
//montre(accessoire);
Si ( Est une liste (accessoire),
numMixFac++ ;
tmp = colonne << obtenir comme matrice ;
//montre(tmp);
XMatrix ||= tmp ;
//show(XMatrix);
mixLower ||= {prop[ 1 ]} ;
mixUpper ||= {prop[ 2 ]} ;
mixSum ||= {prop[ 3 ]} ;
//show(numMixFac);
);
);
Si ( numMixFac == 0 ,
noMixtureFacAlert,
satCon = J ( nombreLignes, 1 , 0 );
//show(satCon);
// Configurer une matrice de contraintes simple
numConstraintsOld = 2 * numMixFac + 1 ;
conMatrice = J ( 1 , numMixFac, 1 );
conMatrice = conMatrice |/ Identité ( numMixFac ) |/ Identité ( numMixFac );
//show(conMatrix);
SommeMixVal = SommeMix[ 1 ] ;
mixCon = mixCon || {mixSumVal} || mixLower || mixUpper ;
//show(mixCon);
// Récupère les contraintes d'inégalité linéaire s'il existe une table de contraintes
Si ( conVal == 1 ,
numConstraintsNew = numConstraintsOld ;
Tableau de données actuel (conTable);
numIneqRow = N rangée (conTable);
//recherche les contraintes en double
FullConMat = conMatrix || mixCon` ;
Pour ( je = 1 , je <= numIneqCon, je++,
con = Colonne ( je );
prop = con << obtenir une propriété ( "Etat de contrainte" );
charprop = Carboniser ( Nom Expr (accessoire) );
Si ( numIneqRow != numMixFac + 1 ,
Jeter ( "Ne peut utiliser des contraintes qu'avec des conceptions de mélange pur." )
);
ineqConMat = con << obtenir comme matrice ;
//show(ineqConMat);
test global = 0 ;
Pour ( j = 1 , (j <= numConstraintsOld), j++,
//trouver le premier élément non nul
Pour ( k = 1 , k <= numMixFac + 1 , k++,
Si ( FullConMat[j, k] != 0 ,
piv = FullConMat[j, k] ;
ind = k;
k = numMixFac + 2 ;
)
);
essai = 0 ;
Si ( ineqConMat[ind] != 0 ,
mult = piv / ineqConMat[ind] ;
nouvelleLigne = ineqConMat * mult;
nouvelleLigne = nouvelleLigne` - FullConMat[j, 0 ] ;
Pour ( k = 1 , k <= numMixFac + 1 , k++,
Si ( Abdos ( newRow[k] ) > 1e - dix ,
tester++
)
);
,
tester++
);
Si ( essai == 0 ,
globalTest++;
j = numConstraintsOld + 1 ;
);
);
//show(globalTest);
Si ( test global == 0 ,
tmp = ineqConMat[ 1 :: numMixFac] ;
conMatrix = conMatrix |/ tmp`;
numConstraintsNew++ ;
tmp = ineqConMat[numMixFac + 1 :: numMixFac + 1 ] ;
mixCon = mixCon || tmp ;
);
//show(mixCon);
);
,
numConstraintsNew = numConstraintsOld
);
//show(conMatrix);
//Vérifier comment les lignes satisfont les contraintes
resultMat = conMatrix * XMatrix` ;
//show(resultMat);
Pour ( j = 1 , j <= nombreLignes, j++,
Pour ( je = 1 , je <= numConstraintsNew, je++,
Si ( Abdos ( resultMat[i, j] - mixCon[i] ) < . 00000001 ,
satCon[j, 1 ]++
)
)
);
//show(satCon);
//label les points
Tableau de données actuel ( désTable );
pointCol = desTable << Nouvelle colonne ( "Type de points" , Caractère, Nominal );
Pour ( je = 1 , je <= nombreLignes, je++,
Si (
(satCon[i] >= numMixFac),
pointCol[i] = "Sommet" ;
État de la ligne ( je ) = État de la couleur ( 3 );,
(satCon[i] == numMixFac - 1 ),
pointCol[i] = "Bord" ;
État de la ligne ( je ) = État de la couleur ( 4 );,
(satCon[je] == 1 ),
pointCol[i] = "Intérieur" ;
État de la ligne ( je ) = État de la couleur ( 5 );,
numFace = numMixFac - satCon[i] ;
pointCol[i] = Carboniser ( nombreFace ) || "Visage en D" ;
État de la ligne ( je ) = État de la couleur ( numMixFac - satCon[i] + 6 );
)
);
pointCol << étiqueter ( 1 );
//Créer un script de tracé ternaire
xChaîne = "" ;
Pour ( je = 1 , je <= nombreCols, je++,
col = Colonne ( je );
prop = colonne << obtenir une propriété ( "Mélange" );
Si ( Est une liste (accessoire),
nomcol = Carboniser ( Nom de colonne ( je ) );
//show(colname);
xChaîne = xChaîne || Expr ( " :" ) || nom_colonne || Expr ( "," );
);
);
len = Longueur ( xString );
xChaîne2 = Substr ( xChaîne, 1 , len - 1 );
//show(xString2);
Si ( numMixFac > 2 ,
frameString = "" ;
Si ( numMixFac == 3 ,
frameString = frameString || "report(obj)[framebox(" || Carboniser ( 1 ) ||
")]< ,
numPlots = (numMixFac * (numMixFac - 1 )) / 2 ;
Pour ( je = 1 , i < nombrePlots, i++,
frameString = frameString || "report(obj)[framebox(" || Carboniser ( je ) ||
")]< \!N "
);
frameString = frameString || "report(obj)[framebox(" || Carboniser ( je ) ||
")]< ;
);
d1 = "obj=Tracé ternaire(Y(" || xString2 || ") ); \!N " || frameString ;
d2 = Éval ( Expr ( Analyser ( d1 ) ) );
d3 = Expr ( desTable << Nouvelle propriété de table ( "Parcelle ternaire" , un ) );
Éval ( Remplaçant ( Nom Expr ( d3 ), Expr ( un ), Nom Expr ( d2 ) ) );
);
Si ( NTables > 1 ,
dg << Fermer la fenêtre
);
);
);
initState = 0 ;
Si (
(Ntables == 0 ), pas d'AlerteTable,
(Ntables == 1 ),
conVal = 0 ;
desTable = tableListe[ 1 ] ;
faire du travail;,
dlg = Nouvelle fenetre ( "Identifier les points de mélange" ,
Boîte à bordure ( La gauche ( 3 ), bas( 3 ), À droite ( 2 ), côtés( 28 ), Haut( 3 ),
Zone de liste V (
Panneau électrique ( "Paramètres du tableau" ,
checkObj = Case à cocher (
{ "Utiliser le tableau des contraintes" },
Si ( initState == 0 ,
pbox << ajouter (
pbox2 = Panneau électrique ( "Sélectionner la table de données de contrainte" ,
comboObj3 = Boîte combo (tableList)
)
);
pbox << réafficher ;
,
pbox2 << effacer ;
pbox << réafficher ;
);
Si ( initState == 0 ,
initState = 1 ,
initState = 0
);
)
),
pbox = Panneau électrique ( "Sélectionner les tableaux de données" ,
Panneau électrique ( "Sélectionner le tableau des données de conception" , comboObj1 = Boîte combo ( tableList ) ),
),
Boîte à boutons ( "D'ACCORD" ,
desTableNum = comboObj1 << avoir ;
//show(desTableNum);
desTable = Tableau de données ( Éval ( desTableNum ) );
//show(desTable);
conVal = checkObj << avoir ( 1 );
Si ( (conVal == 1 ) & (Ntables == 1 ),
Jeter ( "Une table de conception et une table de contraintes doivent être ouvertes." )
);
Si ( conVal == 1 ,
conTableNum = comboObj3 << avoir ;
//show(conTableNum);
conTable = Tableau de données ( Éval ( ConTableNum ) );
//show(conTable);
);
Si ( (conVal == 1 ) & (desTableNum == conTableNum),
memeTableAlert,
Si ( conVal == 1 ,
Tableau de données actuel (conTable);
numIneqCon = Col N (conTable);
Pour ( je = 1 , je <= numIneqCon, je++,
con = Colonne ( je );
prop = con << obtenir une propriété ( "Etat de contrainte" );
charprop = Carboniser ( Nom Expr (accessoire) );
Si (
(charprop != "ConstraintState (inférieur à)" ) & (charprop !=
"ConstraintState (supérieur à)" ),
Jeter ( "Besoin d'utiliser une table de contraintes." )
);
);
);
faire du travail;
);
)
)
)
)
);