Maple 14 における記号処理能力の強化
Maple 14 では次の分野でその記号処理能力が改良されています。
|
assuming
|
|
•
|
さまざまな前提条件下で結果を調べるにあたり関連した追加的柔軟性を与えられることにより、assuming コマンドは「この変数のみについて (only for this variable)」の形式の前提条件と「すべての変数について (for all variables)」の形式の前提条件が処理できます。また、Maple 14 では assuming は方程式ラベルも処理できるようになっています。
|
| (1.1) |
>
|
simplify((1.1)) assuming positive and x < y;
|
| (1.2) |
以下は、もう少し複雑な例です。
>
|
[about(x), about(y)] assuming x, posint, odd, x < 10, y, negint, even, y > -10;
|
Originally x, renamed x~:
is assumed to be: AndProp(integer,LinearProp(2,integer,1),RealRange(1,9))
Originally y, renamed y~:
is assumed to be: AndProp(integer,LinearProp(2,integer,0),RealRange(-9,-1))
| |
| (1.3) |
および に対する前提条件は と同等で、従来どおり、一時的な前提条件です。つまり、assuming なしでは about(x) についても about(y) についてもなにも分かりません。
•
|
assuming コマンドは Matrix と関連コマンドの任意グループ引数に対して使用できるようになりました。説明のため、この例では任意引数 readonly = true を使用します。
|
>
|
simplify(Matrix([[sqrt(x^2), 0], [0, sqrt(y^2)]], readonly = true)) assuming positive;
|
| (1.4) |
assuming コマンドは、最新の keyword parameters アプローチを利用した前提条件のオプションを採用し、実装しているすべての Maple マッピングおよびプログラムで一律に適用されることがなくなりました。例として次の 2 つの結果を比較します。
| (1.5) |
>
|
SolveTools:-Polynomial((1.5), x, domain = parametric);
|
| (1.6) |
>
|
SolveTools:-Polynomial((1.5), x, domain = parametric) assuming Not(0);
|
| (1.7) |
>
|
[(y^2-2*y*x+x^2)^(1/2), (y^2+2*y*x+x^2)^(1/2)];
|
| (1.8) |
>
|
map(simplify@factor, (1.8)) assuming real, y > x;
|
| (1.9) |
|
|
convert と FunctionAdvisor
|
|
•
|
より多くの式が数学関数に変換できるようになりました。
|
>
|
convert(AngerJ(a,z), Bessel) assuming a::integer;
|
| (2.1) |
>
|
FunctionAdvisor(specialize,arctan(y,x), arccos);
|
| (2.2) |
|
|
記号 _n_ についての _d^n/dz^n_ 微分
|
|
Maple 14 ではより多くの種類の記号階の微分方程式が扱えるようになりました。
| (3.1) |
>
|
%diff((3.1), z$n) = diff((3.1), z$n);
|
| (3.2) |
| (3.3) |
>
|
%diff((3.3), z$n) = diff((3.3), z$n);
|
| (3.4) |
| (3.5) |
>
|
%diff((3.5), z$n) = diff((3.5), z$n);
|
| (3.6) |
| (3.7) |
>
|
%diff((3.7), z$n) = diff((3.7), z$n);
|
| (3.8) |
| (3.9) |
>
|
%diff((3.9), z$n) = diff((3.9), z$n);
|
| (3.10) |
| (3.11) |
>
|
%diff((3.11), z$n) = diff((3.11), z$n);
|
| (3.12) |
| (3.13) |
>
|
%diff((3.13), z$n) = diff((3.13), z$n);
|
| (3.14) |
|
|
新しい Solve コマンド
|
|
•
|
Solve は PDEtools パッケージに新しく追加された統合コマンドで、ユーザーの入力に基づいて、解く対象が不等式、初期値または境界条件を含むのか含まないのか、そして連立代数方程式なのか、または連立微分方程式なのかによって solve、dsolve または pdsolve を呼び出します。さらに、Solve は非多項式型の方程式系についても指定変数に依存しない解を計算できる場合があります。
|
| (4.1) |
>
|
eq[1] := a*x^2 + b*x + c;
|
| (4.2) |
| (4.3) |
>
|
eq[2] := diff(y(x),x) = y(x);
|
| (4.4) |
| (4.5) |
>
|
eq[3] := [diff(u(x, t), t)+c*(diff(u(x, t), x)) = -lambda*u(x, t), u(x, 0) = phi(x)];
|
| (4.6) |
| (4.7) |
|
上記例は solve、dsolve または pdsolve を 1 つのコマンドで呼び出し、入力および出力に対して統一された形式を持つ利点を示しています。Solve は追加機能も提供します:与えられた変数に依存しない解を計算できます。independentof が指定されていると、不等式が含まれていても系を解くことができます。
|
>
|
eq[4] := [k*a*c*(a+b)*exp(k*d*t)-2*a*exp(k*t)*k+Q*(-c+a)*x, a <> 0];
|
| (4.8) |
>
|
Solve(eq[4], {a, b, c, d}, independentof = {t, x});
|
| (4.9) |
|
微分方程式または微分方程式系についても与えられた変数と独立した解を計算できます。
|
>
|
eq[5] := diff(f(x,y),x)*diff(g(x,y),x) + diff(f(x,y),y)*diff(g(x,y),y) + g(x,y)*(diff(f(x,y), x,x) + diff(f(x,y), y,y)) = -1;
|
| (4.10) |
|
次は、 にも、 にも依存しない PDE の解の例です。
|
>
|
Solve(eq[5], independentof = x);
|
| (4.11) |
>
|
Solve(eq[5], independentof = y);
|
| (4.12) |
|
|
代数ソルバ
|
|
>
|
f1 := expand((x-1)^4*eval(z^4-z-1,z=x^3+x)):
|
>
|
Polynomial(f1, x, domain=integer);
|
| (5.1) |
>
|
Polynomial(f1, x, domain=real);
|
| (5.2) |
•
|
次は、SolveTools[Polynomial] を使用してパラメトリック多項式の区分的解を求める例です。
|
>
|
Polynomial(a*x^2-(b+a)*x+b, x, domain=parametric);
|
| (5.3) |
>
|
PolynomialSystem({y^3+1,y+x^2-1}, {x,y}, domain=real);
|
| (5.4) |
>
|
PolynomialSystem({y^3+1,y+x^2-1}, {x,y}, domain=real, explicit);
|
| (5.5) |
>
|
PolynomialSystem({y-x^2+1, y+x^2-1}, [x,y], engine=groebner, backsubstitute=false);
|
| (5.6) |
•
|
SolveTools[Engine] コマンドによって、solve に新しい下位インターフェイスが追加されました。このインターフェイスでは最低限の前処理や後処理と、ユーザープログラム内での使用により適した統一形式の入力および出力が使用されます。solve はまだ Maple の求解機能への推奨ユーザーレベルインターフェイスです。
|
| (5.7) |
| (5.8) |
| (5.9) |
|
|
新しい IntegrationTools コマンド
|
|
>
|
with(IntegrationTools):
|
>
|
i1 := Int(Int(f(x,y),x),y);
|
| (6.1) |
>
|
i2 := CollapseNested( i1 );
|
| (6.2) |
Int(f(x,y),[x, y]) = Int(Int(f(x,y),x),y)
| |
>
|
i3 := ExpandMultiple( i2 );
|
| (6.3) |
Int(Int(f(x,y),x),y) = Int(f(x,y),[x, y])
| |
|
|
不定積分と定積分
|
|
>
|
%int(x*(EllipticK(2/x)*(1-2/x^2)-EllipticE(2/x)), x);
|
| (7.1) |
| (7.2) |
|
この改良により、以下のような被積分関数についても定積分が計算できるようになりました。
|
>
|
subsop(2 = (x = alpha..infinity), (7.1));
|
| (7.3) |
| (7.4) |
•
|
定積分器は、微分積分学の基本定理を適用して極限を計算する際は別の実装を使用するように改良されました。これにより、以前の Maple バージョンでは未評価の極限が返されていたような場合でも閉形式の解が返せるようになりました。この新しいコードは、オプション method=FTOCMS を使用して直接利用することもできます。method オプションの詳細については、int/method を参照してください。
|
>
|
int( (x^3+x^2)/(exp(x)-1), x=0..infinity);
|
| (7.5) |
>
|
int( (x^3+x^2)/(exp(x)-1), x=0..infinity, method=FTOCMS);
|
| (7.6) |
>
|
int( (x^3+x^2)/(exp(x)-1), x=0..infinity, method=NoFTOCMS);
|
| (7.7) |
|
|