このスクリプトをチェックして、探していたものかどうかを確認してください。
名前はデフォルトでここにあります(( 1 );
Ntables = Nテーブル();
tableList = {};
にとって(i = 1 、i <= Ntables、i ++、
tableList [i] =データ表( 私 )
);
// show(tableList);
desTable = {};
conTable = {};
sameTableAlert = Expr ((
ダイアログ((
「選択ごとに異なるデータテーブルを選択してください。」 、
テキストボックス(( 「」 )、
ボタン( "わかった" )。
)。
);
noTableAlert = Expr ((
ダイアログ(( 「設計データテーブルが開いている必要があります。」 、 テキストボックス(( 「」 )、 ボタン( "わかった" )))
);
noMixtureFacAlert = Expr ((
ダイアログ(( 「設計表には混合要素はありません。」 、 テキストボックス(( 「」 )、 ボタン( "わかった" )))
);
doWork = Expr ((
//デザインテーブルを評価します
numCols = N列(desTable);
numRows = N行(desTable);
numMixFac = 0 ;
XMatrix = [];
mixLower = [];
mixUpper = [];
mixSum = [];
mixCon = [];
// show(numCols);
// show(numRows);
現在のデータテーブル(desTable);
にとって(i = 1 、i <= numCols、i ++、
col =桁( 私 );
prop = col <<プロパティを取得(( "混合" );
// show(prop);
もしも((リストです(小道具)、
numMixFac ++;
tmp = col <<行列として取得;
// show(tmp);
XMatrix || = tmp;
// show(XMatrix);
mixLower || = {prop [ 1 ]};
mixUpper || = {prop [ 2 ]};
mixSum || = {prop [ 3 ]};
// show(numMixFac);
);
);
もしも(numMixFac == 0 、
noMixtureFacAlert、
satCon = J (numRows、 1 、 0 );
// show(satCon);
//単純な制約マトリックスを設定します
numConstraintsOld = 2 * numMixFac + 1 ;
conMatrix = J (( 1 、numMixFac、 1 );
conMatrix = conMatrix | /身元(numMixFac)| /身元(numMixFac);
// show(conMatrix);
mixSumVal = mixSum [ 1 ];
mixCon = mixCon || {mixSumVal} || mixLower || mixUpper;
// show(mixCon);
//制約テーブルがある場合は線形不等式制約を取得します
もしも(conVal == 1 、
numConstraintsNew = numConstraintsOld;
現在のデータテーブル(conTable);
numIneqRow = N行(conTable);
//重複する制約を探します
FullConMat = conMatrix || mixCon`;
にとって(i = 1 、i <= numIneqCon、i ++、
con =桁( 私 );
prop = con <<プロパティを取得(( 「ConstraintState」 );
charprop =チャー((名前Expr (小道具));
もしも(numIneqRow!= numMixFac + 1 、
投げる(( 「純粋な混合設計でのみ制約を使用できます。」 )。
);
ineqConMat = con <<行列として取得;
// show(ineqConMat);
全体的なテスト= 0 ;
にとって(j = 1 、(j <= numConstraintsOld)、j ++、
//最初の非ゼロ要素を見つけます
にとって(k = 1 、k <= numMixFac + 1 、k ++、
もしも(FullConMat [j、k]!= 0 、
piv = FullConMat [j、k];
ind = k;
k = numMixFac + 2 ;
)。
);
テスト= 0 ;
もしも(ineqConMat [ind]!= 0 、
mult = piv / ineqConMat [ind];
newRow = ineqConMat * mult;
newRow = newRow`-FullConMat [j、 0 ];
にとって(k = 1 、k <= numMixFac + 1 、k ++、
もしも((腹筋(newRow [k])> 1e - 10 、
test ++
)。
);
、
test ++
);
もしも(テスト== 0 、
全体的なテスト++;
j = numConstraintsOld + 1 ;
);
);
// show(overallTest);
もしも(overallTest == 0 、
tmp = ineqConMat [ 1 :: numMixFac];
conMatrix = conMatrix | / tmp`;
numConstraintsNew ++;
tmp = ineqConMat [numMixFac + 1 :: numMixFac + 1 ];
mixCon = mixCon || tmp;
);
// show(mixCon);
);
、
numConstraintsNew = numConstraintsOld
);
// show(conMatrix);
//行が制約をどのように満たすかを確認します
resultMat = conMatrix * XMatrix`;
// show(resultMat);
にとって(j = 1 、j <= numRows、j ++、
にとって(i = 1 、i <= numConstraintsNew、i ++、
もしも((腹筋(resultMat [i、j] --mixCon [i])<。 00000001 、
satCon [j、 1 ] ++
)。
)。
);
// show(satCon);
//ポイントにラベルを付けます
現在のデータテーブル(desTable);
pointCol = desTable <<新しい列(( 「ポイントタイプ」 、キャラクター、名目);
にとって(i = 1 、i <= numRows、i ++、
もしも((
(satCon [i]> = numMixFac)、
pointCol [i] = "バーテックス" ;
行の状態(i)=色の状態(( 3 );、
(satCon [i] == numMixFac- 1 )、
pointCol [i] = "角" ;
行の状態(i)=色の状態(( 4 );、
(satCon [i] == 1 )、
pointCol [i] = "インテリア" ;
行の状態(i)=色の状態(( 5 );、
numFace = numMixFac --satCon [i];
pointCol [i] =チャー(numFace)|| 「D-Face」 ;
行の状態(i)=色の状態(numMixFac --satCon [i] + 6 );
)。
);
pointCol <<ラベル(( 1 );
//三角プロットスクリプトを作成します
xString = "" ;
にとって(i = 1 、i <= numCols、i ++、
col =桁( 私 );
prop = col <<プロパティを取得(( "混合" );
もしも((リストです(小道具)、
colname =チャー((列名( 私 ) );
// show(colname);
xString = xString || Expr (( ":" )|| colname || Expr (( "、" );
);
);
len =長さ(xString);
xString2 = Substr (xString、 1 、len- 1 );
// show(xString2);
もしも(numMixFac> 2 、
frameString = "" ;
もしも(numMixFac == 3 、
frameString = frameString || "report(obj)[framebox(" ||チャー(( 1 )||
")] << mark size(4);" 、
numPlots =(numMixFac *(numMixFac- 1 ))/ 2 ;
にとって(i = 1 、i
frameString = frameString || "report(obj)[framebox(" ||チャー(i)||
")] <<マーカーサイズ(4); \!N 「」
);
frameString = frameString || "report(obj)[framebox(" ||チャー(i)||
")] << mark size(4);" ;
);
d1 = "obj = Ternary Plot(Y(" || xString2 || ")); \!N 「」 || frameString;
d2 =評価(( Expr ((解析(d1)));
d3 = Expr (desTable <<新しいテーブルプロパティ(( 「三角プロット」 、a));
評価((代わりの((名前Expr (d3)、 Expr (a)、名前Expr (d2)));
);
もしも(NTables> 1 、
dlg <<ウィンドウを閉じる
);
);
);
initState = 0 ;
もしも((
(Ntables == 0 )、noTableAlert、
(Ntables == 1 )、
conVal = 0 ;
desTable = tableList [ 1 ];
仕事する;、
dlg =新しい窓(( 「混合点の特定」 、
ボーダーボックス((左(( 3 )、 下( 3 )、右(( 2 )、sides( 28 )、 上( 3 )、
Vリストボックス((
パネルボックス(( 「テーブル設定」 、
checkObj =チェックボックス((
{{ 「制約テーブルを使用する」 }、
もしも(initState == 0 、
pbox <<追加((
pbox2 =パネルボックス(( 「制約データテーブルの選択」 、
comboObj3 =コンボボックス(tableList)
)。
);
pbox <<再表示;
、
pbox2 <<消去;
pbox <<再表示;
);
もしも(initState == 0 、
initState = 1 、
initState = 0
);
)。
)、
pbox =パネルボックス(( 「データテーブルの選択」 、
パネルボックス(( 「設計データテーブルの選択」 、comboObj1 =コンボボックス(tableList))、
)、
ボタンボックス(( "わかった" 、
desTableNum = comboObj1 <<得る;
// show(desTableNum);
desTable =データ表((評価(desTableNum));
// show(desTable);
conVal = checkObj <<得る(( 1 );
もしも((conVal == 1 )&(Ntables == 1 )、
投げる(( 「設計テーブルと拘束テーブルの両方が開いている必要があります。」 )。
);
もしも(conVal == 1 、
conTableNum = comboObj3 <<得る;
// show(conTableNum);
conTable =データ表((評価(conTableNum));
// show(conTable);
);
もしも((conVal == 1 )&(desTableNum == conTableNum)、
sameTableAlert、
もしも(conVal == 1 、
現在のデータテーブル(conTable);
numIneqCon = N列(conTable);
にとって(i = 1 、i <= numIneqCon、i ++、
con =桁( 私 );
prop = con <<プロパティを取得(( 「ConstraintState」 );
charprop =チャー((名前Expr (小道具));
もしも((
(charprop!= 「ConstraintState(未満)」 )&(charprop!=
"ConstraintState(より大きい)" )、
投げる(( 「制約テーブルを使用する必要があります。」 )。
);
);
);
仕事する;
);
)。
)。
)。
)。
);