Example Maplets の使用
このワークシートでは、Maplets[Examples] サブパッケージ内にある各 example maplet がコード内でどのように使用されるかを紹介する例題を提供しています。
|
Alert
|
|
この例題では、Alert maplet が有用となる局面を与えています。
>
|
if Maplets[Examples][Alert]( "Do you really want to delete the file?" ) = true then
fremove( "whateverfile.mpl" );
end if;
|
|
|
Confirm
|
|
この maplet では、コーシーの主値積分を使用すべきがどうかをユーザに質問します。ユーザがキャンセルを選択すると、積分は実行されません。
>
|
cpv := Maplets[Examples][Confirm]( "Should Cauchy principal value integration be used?" ):
if cpv = true then
int( 1/x^3, x = -3..5, CauchyPrincipalValue );
elif cpv = false then
int( 1/x^3, x = -3..5 );
else
NULL;
end if;
|
|
|
GetColor
|
|
この手続きでは、全ての引数を指定して plot を呼び出します。また、GetColor example maplet を使用することで、プロットの色をユーザに質問します。
>
|
MyPlot := proc()
plot( args, color = Maplets[Examples][GetColor]() );
end proc:
|
>
|
MyPlot( sin(x), x = 0..2*Pi );
|
|
|
GetEquation
|
|
このプロシージャでは、GetEquation maplet から受け取るユーザ入力と共に、x に関して solve を呼び出します。
>
|
MySolve := proc()
solve( Maplets[Examples][GetEquation]( 'caption' = "Enter an equation in `x`:" ), x );
end proc:
|
|
|
GetExpression
|
|
このプロシージャでは、GetExpression maplet から受け取るユーザ入力と共に、x に関して diff を呼び出します。
>
|
MyDiffx := proc()
diff( Maplets[Examples][GetExpression]( 'caption' = "Enter an expression in `x`:" ), x );
end proc:
|
|
|
GetFile
|
|
この例では、コメント文字を外すと、ユーザの選択するファイルを削除します。
>
|
# fremove( Maplets[Examples][GetFile]() );
|
|
|
GetInput
|
|
この例では、ユーザに整数を要求します。ユーザの入力は Maplet セッションに返されます。
>
|
parse( Maplets[Examples][GetInput]( "Enter an integer:", 'type' = plain ) );
|
|
|
Integration
|
|
この Integration maplet の例では、積分の種類の選択、被積分関数や積分の変数、積分範囲やその他のオプションを入力するように、ユーザに促します。
>
|
Maplets[Examples][Integration]( 1/x^3 );
|
|
|
KernelOpts
|
|
この example maplet は、kernelopts ルーチンへのインターフェイスとなります。
>
|
Maplets[Examples][KernelOpts]();
|
|
|
LinearAlgebra
|
|
Maplets[Examples] パッケージの LinearAlgebra サブパッケージには、LinearAlgebra ルーチンのいくつかに対するインターフェイスが用意されています。
>
|
Maplets[Examples][LinearAlgebra][BezoutMatrix]();
|
>
|
Maplets[Examples][LinearAlgebra][ConditionNumber](M);
|
>
|
Maplets[Examples][LinearAlgebra][HilbertMatrix]();
|
>
|
Maplets[Examples][LinearAlgebra][MatrixNorm](M);
|
>
|
Maplets[Examples][LinearAlgebra][QRDecomposition](M);
|
>
|
Maplets[Examples][LinearAlgebra][SingularValues](M);
|
>
|
Maplets[Examples][LinearAlgebra][VectorNorm](V);
|
|
|
Message
|
|
このプロシージャは、以下の Maple ルーチンを実行し、その結果をメッセージボックス内に表示します。
>
|
MySolve := proc()
local solns;
solns := solve( args );
if solns = NULL then
if _SolutionsMayBeLost then
Maplets[Examples][Message]( "No solutions, but some solutions may have been lost" );
else
Maplets[Examples][Message]( "No solutions" );
end if;
else
Maplets[Examples][Message]( sprintf( "%q", solns ) );
end if;
solns;
end proc:
|
>
|
MySolve(x^3 - 6.3 * x);
|
|
|
Question
|
|
このプロシージャは、変数の符号が定められていない場合に、ユーザへその変数の符号を質問します。
>
|
MySignum := proc(x)
local sgnm;
sgnm := signum( 0, x, 0 );
if type( sgnm, 'specfunc'('anything', 'signum') ) then
if Maplets[Examples][Question]( sprintf( "Is %a positive?", x ) ) then
1;
else
sgnm;
end if;
else
sgnm;
end if;
end proc:
|
|
|
Selection
|
|
以下のプロシージャは、引数と共に LinearAlgebra[QRDecomposition] を呼び出します。また、Selection example maplet を用いて、希望の出力形式をユーザに質問します。
>
|
MyQRDecomposition := proc(M::Matrix)
LinearAlgebra[QRDecomposition]( args, output = [seq(
[Q, R, rank][i],
i = [Maplets[Examples][Selection]( ["Q", "R", "rank"], default = 1 )]
)] );
end proc:
|
>
|
MyQRDecomposition( <<1,2,5>|<5,3,6>|<2,5,3>> );
|
|
|
ShowTable
|
|
このプロシージャは、Units パッケージを用いて変換表を作成し、Showtable example maplet を用いてそれを表示します。
この表は output = grid が返す Matrix データ構造と共に convert/conversion_table として現実に使用されます。(最初の引数は、リストからなるリストです。)
>
|
MyConversionTable := proc(L::list(name))
Maplets[Examples][ShowTable](
map2( map, convert, op(1, convert( L, conversion_table, output = columns, filter = evalf[5] )), string ),
width = 500
);
end proc:
|
>
|
MyConversionTable( [kg, g, lb, stone] );
|
|
|
SignQuery
|
|
この積分は、全ての確定させたい不定元について、それが正であるかどうかをチェックします。正の不定元は、assuming コマンドを用いて、積分の中で正であると仮定されます。
>
|
MyInt := proc(integrand::algebraic, var::{name, name = range})
local indts, i, positives, varT;
if type( var, name ) then
varT := var;
else
varT := lhs( var );
end if;
indts := select( 'type', indets( integrand ), 'name' ) minus {varT};
positives := NULL;
for i in indts do
if Maplets[Examples][SignQuery]( i ) then
positives := positives, i::positive;
end if;
end do;
int( integrand, var ) assuming positives;
end proc:
|
>
|
MyInt( exp(-n*x), x=0..infinity );
|
|
|