式の操作の例では、JSLのSubstitute Into()関数を使って、2次式の係数にある値を与えた後、その指定された2次式の解を求める方法を示しています。その例では、2次式の係数をSubstitute Into()の引数として指定しています。
列ダイアログの作成の節では、モーダルウィンドウを介してユーザに係数を入力させる例を示しています。
この節では、これらの例をさらに改善し、完全にカスタマイズされたインターフェースを作成します。最初にウィンドウを表示して係数を入力させます。そして、根を計算した後、独自に作成したグラフとともに結果を表示します。
// ウィンドウを表示して、ユーザに係数を入力させる
myCoeffs = New Window( "2次式の根を見つける",
<<Modal,
H List Box(
a = Number Edit Box( 1 ),
Text Box( "*x^2 + " ),
b = Number Edit Box( 2 ),
Text Box( "*x + " ),
c = Number Edit Box( 1 ),
Text Box( " = 0" )
),
Button Box( "OK",
a = a << Get;
b = b << Get;
c = c << Get;
Show( a, b, c );
),
Button Box( "キャンセル")
);
/* 結果を算出する:2次式は
x=(-b + - sqrt(b^2 - 4ac))/2a.係数を2次式に
入れる */
x = {Expr(
(-b + Sqrt( b ^ 2 - 4 * a * c )) / (2 * a)
), Expr(
(-b - Sqrt( b ^ 2 - 4 * a * c )) / (2 * a)
)};
xx = Eval Expr( x );
results = Expr( // 解のリストを保存する
/* 実根が見つかったかどうかテストし、適切な表示をする
yesの場合(たとえば、ウィンドウのデフォルトで)は、根とグラフを表示する */
xmin = xx[1] - 5;
xmax = xx[2] + 5;
ymin = -20;
ymax = 20;
win = New Window( "2次関数の根",
V List Box(
Text Box( "方程式の実根" ),
Text Box( " " || Expr( po ) || " = 0" ),
H List Box( Text Box( "are x=" ), Text Box( xxx ) ),
Text Box( " " ), // 空白行を取得するため
Graph Box(
Frame Size( 200, 200 ),
X Scale( xmin, xmax ),
Y Scale( ymin, ymax ),
Line Style( 2 ),
H Line( 0 ),
Line Style( 0 ),
Y Function( polynomial, x ),
Line Style( 3 ),
Pen Color( 3 ),
V Line( xx[1] ),
V Line( xx[2] ),
Marker Size( 2 ),
Marker( 0, {xx[1], 0}, {xx[2], 0} )
)
)
);
);
error = Expr(
/* noの場合(たとえば、a=3、b=4、c=5で)は、エラーウィンドウと
理解を手助けするグラフを表示する */
win = New Window( "エラー",
V List Box(
Text Box( " " ),
Text Box( " 多項式 " || po || " には実根がない。" ),
Text Box( " " ),
Text Box( "原因を知るために、関数のグラフを表示" ),
Graph Box(
Frame Size( 200, 200 ),
X Scale( -20, 20 ),
Y Scale( -20, 20 ),
Line Style( 2 ),
H Line( 0 ),
Line Style( 0 ),
Y Function( polynomial, x )
)
)
)
);
/* どちらの場合も、スクリプトは準備のための文字列を必要とする
指定された係数で多項式を書き直す*/
polynomial = Expr( a * x ^ 2 + b * x + c );
// 多項式のこのインスタンスを文字列で保存
po = Char( Eval Expr( polynomial ) );
// 解のリストを文字列で保存
xxx = Char( Eval Expr( x ) );
If( Is Missing( xx[1] ) | Is Missing( xx[2] ), // テスト準備完了
error,
results
);
前述のスクリプトを実行すると、最初に、次のようなウィンドウが表示されます。
図11.32 独自に作成したウィンドウ
[OK]をクリックすると、根またはエラーメッセージのどちらかを示す、結果のウィンドウが表示されます(図11.33)。もう一度スクリプトを実行し、フィールドに5、4、5とそれぞれ入力して[OK]をクリックします。JMPは実根がないというメッセージを表示します(図11.33の右側)。
図11.33 カスタムプラットフォームのレポート