Maple 14 における新規パッケージおよび改良されたパッケージew and Enhanced Packages in Maple 14
Maple 14 に含まれる新規パッケージおよび改良された既存パッケージは以下のとおりです。
新規パッケージ
改良されたパッケージ
|
DifferentialAlgebra
|
|
•
|
新規の DifferentialAlgebra パッケージは旧 Maple バージョンにおける diffalg に代わるパッケージで、多項式型の連立微分方程式 (ODE、PDE、DAE、PDAE) の単純化および操作と、主要計算をより高速にするために直接 C 言語で実行する改良された一連のコマンドおよび、より使いやすいインターフェイスを備えています。
|
•
|
パッケージの主要機能は RosenfeldGroebner コマンドによって提供されます。このコマンドは微分方程式システムを 3 角形分割し、変数を 1 つずつ除去していくことで可積分条件に対してシステムを簡単化するか、特異解を求めて微分方程式システムを解きます。
|
–
|
従属変数 (関数) 間で従属性が異なるシステムや従属性が全くないシステムを処理するための柔軟性を持ち合わせています。
|
–
|
システムには任意の変数および関数を含めることができます。
|
–
|
一般解のみ、特異解のみ、またはすべての解 (デフォルトの動作) を計算するよう選択することができます。
|
–
|
(任意関数の新しい扱い方に関連して) 非自明な微分体上で多項式型連立微分方程式を単純化することができます。
|
–
|
従属変数と (または) 独立変数の等級序列変更後に (イデアルで表現されている) 等価微分方程式システムを高速に再計算できる最新のアルゴリズムがパッケージに含まれています。
|
•
|
計算をより簡単、より速く、そしてより柔軟に実行できるように再設計されたインターフェイスについては、次のような特徴を持ち合わせています:
|
–
|
より簡単に問題を入力でき、解を読みやすく、短い表記で返せるようにさまざま数学的表記が使用できるようになりました。入力に使用されている表記法を示す必要はありません。出力に使用する表記法は任意で指定可能です。
|
–
|
計算の基礎体を指定する必要がなくなりました。基礎体は、その場で、一貫して入力から自動的に導き出されます。
|
–
|
微分環を再定義する必要なく、微分環に含まれている従属変数や関数、独立変数や関数、任意変数や関数に変更または追加を行うことができます。
|
–
|
PDE システムの任意変数や任意関数間の代数的関係を relations = {..equations..} の形式で RosenfeldGroebner in a natural way, as in relations = {..equations..}に直接渡す (指定する) ことができます。
|
|
パラメトリックな微分方程式システム
|
|
>
|
with(DifferentialAlgebra);
|
![[BelongsTo, ChangeRanking, DifferentialRing, Equations, Get, Inequations, Is, NormalForm, PowerSeriesSolution, ReducedForm, RosenfeldGroebner, Tools]](/support/helpjp/helpview.aspx?si=2532/file01532/math251.png)
| (2.1.1) |
パラメータ p にも依存する次の についての非線形 ODE を検討します。
>
|
ODE := (p-1)*diff(u(x),x)-u(x)^2;
|
| (2.1.2) |
次の微分環を使用すると、p' が (従属性がなく、すべての導関数がゼロの) 従属変数であるかのように ODE" を操作することができます。これにより、パラメータ化した ODE の概念を実現します。
>
|
ring := DifferentialRing(derivations = [x], blocks = [u,p]);
|
| (2.1.3) |
問題を解析し、特異解を求めると、特異解は臨界値 に関連していることが分かります。
>
|
ideal := RosenfeldGroebner(ODE, ring);
|
| (2.1.4) |
両方を考慮すると次のようになります。
>
|
Equations(ideal, solved);
|
| (2.1.5) |
p は任意変数とみなし、値に関しては検討しません。
>
|
ideal := RosenfeldGroebner(ODE, ring, arbitrary = p);
|
| (2.1.6) |
>
|
Equations(ideal, solved);
|
| (2.1.7) |
|
|
べき級数解
|
|
より単純な jet notation を使用して直接入力された熱伝導方程式を検討します (下付き文字は導関数を表しています)。
| (2.2.1) |
これは 1 従属変数 u(t, x) についての問題です。微分環を設定します:
>
|
ring := DifferentialRing(derivations = [t, x], blocks = [u]);
|
| (2.2.2) |
PDE のイデアルを計算します。
>
|
ideal := RosenfeldGroebner(PDE, ring);
|
| (2.2.3) |
jet 表記による 2 つの任意関数 u(0, x) = f(x) および D[1](u)(0, x) = g(x) に依存する初期値問題の級数解は次のようになります。
>
|
PowerSeriesSolution(ideal, 2, [u = f(x), u[t] = g(x)]);
|
| (2.2.4) |
|
|
正規形
|
|
次の PDE システムを検討します。
>
|
sys := [diff(g(x,y),x) = 2*g(x,y)^2+2, diff(g(x,y),y)^2 = -1/4*(-g(x,y)^4-2*g(x,y)^2-1)/y];
|
| (2.3.1) |
これは 1 未知数 に関する問題です。微分環を設定します。
>
|
ring := DifferentialAlgebra[DifferentialRing](derivations = [x,y], blocks = [g]):
|
特異イデアルを無視し、一般イデアルのみを計算します。
>
|
ideal := RosenfeldGroebner(sys, ring, singsol = none);
|
| (2.3.2) |
計算されたイデアルで一般解を表す方程式を確認します。
>
|
eqs := Equations(ideal[1], solved);
|
| (2.3.3) |
解の 1 つは次のようになります ( pdetest参照)
>
|
sol := tan(2*x-y^(1/2));
|
| (2.3.4) |
>
|
pdetest(g(x,y) = sol, eqs);
|
| (2.3.5) |
下記の 2 つの式、expr1 および expr2 を検討します。
>
|
expr1 := 4*diff(g(x,y), x,y)*y/(g(x,y)^4+2*g(x,y)^2+1) - 4*diff(g(x,y), y)*y*(4*g(x,y)^3*diff(g(x,y), x) + 4*g(x,y)*diff(g(x,y),x))/(g(x,y)^4+2*g(x,y)^2+1)^2;
|

| (2.3.6) |
>
|
expr2 := - diff(g(x, y), x, y)/diff(g(x, y), y)^2;
|
| (2.3.7) |
これらの式は、実際は同値関係にあり、ideal で表示した微分イデアルの法になります。すなわち、g(x, y) = sol で評価した場合、そして一般的には、微分イデアルのどの解で評価してもこれらの 2 つの式は同じになります:
>
|
simplify(subs(g(x,y) = sol, expr1 - expr2));
|
| (2.3.8) |
expr1 と expr2 の間の同値性はこれらの式の正規形を計算し、構文的に同等であることから確認できます。
>
|
NF[1] := NormalForm(expr1, ideal);
|
| (2.3.9) |
>
|
NF[2] := NormalForm(expr2, ideal);
|
| (2.3.10) |
| (2.3.11) |
|
|
|
DEtools パッケージ
|
|
|
積分因子を使用する DEtools[particularsol]
|
|
particularsol は、ODE が持つことができる (元が n 未満の) 積分因子の不完全集合からなる n 階 ODE の特解が計算できるようになりました。これは、ODE を一般的に解くことはできないが、特解でも差し支えない場合に便利です。たとえば、次の 2 階非線形 ODE を検討します。
>
|
ode := diff(y(x), x,x) = (-p*y(x)^p*(p- 1)*diff(y(x), x)^2 + x*diff(y(x), x)*y(x)^2 + y(x)^3)/(y(x)^(p+1))/p;
|
| (3.1.1) |
上記 2 階非線形 ODE の一般解は未知です。Maple 13 では、対称式を検討することにより、任意ではない定数に依存した 2 つの特解が計算できました。また、この の 1 つの積分因子も計算できました。Maple 14 では、これを基に、一連において 3 つ目の解となる 1 つの任意変数 に依存する特解が計算できます。
>
|
particular_sol := DEtools[particularsol](ode);
|
| (3.1.2) |
この新しい特解の利用例を説明するために、初期値でこの を解くことを意味する初期値問題を検討します。
>
|
iv := y(0) = 1, D(y)(0) = 0;
|
| (3.1.3) |
標準的なアプローチでは、まず の一般解を計算しますが、これは未知であるため、このアプローチは使用できません。そのため、まず particularsol を使用してその 1 つのパラメータ (_C1) を計算し、さまざまな方法で、初期条件に合うようにパラメータの調整を試みます。たとえば、このような目的のために Maple 13 で導入された DEtools[IVPsol] に使用する特解と初期値を直接渡します。ODE と初期値問題全体を解くには、たとえば、次のように指定します。
>
|
DEtools[IVPsol]([iv], particular_sol[3]);
|
| (3.1.4) |
または、この特解を dsolve に渡し、この与えられた解から問題を解く方法もあります。
>
|
dsolve([ode, iv], solution = particular_sol[3]);
|
| (3.1.5) |
このアプローチは、ユーザーによる指定がなくとも Maple 14 の dsolve によって自動的に試みられることにご留意ください (その場合は、まず一般解が求められ、これが失敗してからの試みとなるため計算には非常に時間がかかります)。
>
|
sol := dsolve([ode, iv]);
|
| (3.1.6) |
|
|
DEtools[firint] と線形 ODE の第 1 積分の完全集合の計算
|
|
DEtools[firint] コマンドは線形 ODE の第 1 積分の完全集合が計算できるようになりました。すなわち、互いに独立した、ODE の階数と同じ数だけの第 1 積分が計算できるようになりました。次は、典型的な例です:
>
|
PDEtools[declare](g(x), y(x), prime = x);
|
| (3.2.1) |
>
|
ode := diff(y(x), x,x) = ((diff(g[1](x), x,x))*g[2](x)-g[1](x)*(diff(g[2](x), x,x)))*(diff(y(x), x))/(g[2](x)*(diff(g[1](x), x))-g[1](x)*(diff(g[2](x), x)))+((diff(g[1](x), x))*(diff(g[2](x), x,x))-(diff(g[1](x), x,x))*(diff(g[2](x), x)))*y(x)/(g[2](x)*(diff(g[1](x), x))-g[1](x)*(diff(g[2](x), x)))+((diff(g[0](x), x,x))*(-g[2](x)*(diff(g[1](x), x))+g[1](x)*(diff(g[2](x), x)))+((diff(g[1](x), x))*g[0](x)-g[1](x)*(diff(g[0](x), x)))*(diff(g[2](x), x,x))-((diff(g[2](x), x))*g[0](x)-g[2](x)*(diff(g[0](x), x)))*(diff(g[1](x), x,x)))/(-g[2](x)*(diff(g[1](x), x))+g[1](x)*(diff(g[2](x), x)));
|
![ode := `y''` = (g[1]^`''`*g[2]-g[1]*g[2]^`''`)*`y'`/(g[2]*g[1]^`'`-g[1]*g[2]^`'`)+(g[1]^`'`*g[2]^`''`-g[1]^`''`*g[2]^`'`)*y/(g[2]*g[1]^`'`-g[1]*g[2]^`'`)+(g[0]^`''`*(-g[2]*g[1]^`'`+g[1]*g[2]^`'`)+(g[1]^`'`*g[0]-g[1]*g[0]^`'`)*g[2]^`''`-(g[2]^`'`*g[0]-g[2]*g[0]^`'`)*g[1]^`''`)/(-g[2]*g[1]^`'`+g[1]*g[2]^`'`)](/support/helpjp/helpview.aspx?si=2532/file01532/math748.png)
| (3.2.2) |
>
|
basis_sol := [[g[1](x), g[2](x)], g[0](x)];
|
| (3.2.3) |
>
|
sol := y(x) = _C1*g[1](x) + _C1*g[2](x) + g[0](x);
|
| (3.2.4) |
| (3.2.5) |
|
次は、 の第 1 積分の完全集合を計算します。
|
>
|
first_integrals := DEtools[firint](ode, y(x), basis = basis_sol);
|
| (3.2.6) |
>
|
map(DEtools[firtest], [first_integrals], ode, y(x));
|
| (3.2.7) |
|
|
|
動的システム
|
|
•
|
2 つの新規コマンド、EquilibriumPoint および Linearize がこのパッケージに追加されました。EquilibriumPoint は非線形システム DAE の局所的平衡点を求めます。Linearize は非線形微分方程式の集合を線形化して状態空間形式に変換することができます。これらのコマンドを使用すると、トリム (trim) 条件を解析したり、トリム (平衡) 点で線形化して得られた線形モデルの状態空表現で作業ができるため、制御システムの設計に有用です。
|
•
|
新規コマンド SystemConnect がこのパッケージに追加されました。これを使用すると、さまざまな DynamicSystems オブジェクトを相互接続することができます。
|
|
|
Groebner
|
|
>
|
Groebner[Support]([x^2+23*2+12, y-x/2-1/3]);
|
| (5.1) |
|
|
IntegerRelations パッケージ
|
|
>
|
alpha := sqrt(2)+(-1)^(1/3);
|
| (6.1) |
>
|
powers := map(evalf, [seq(expand(alpha^i), i=0..4)]);
|
![powers := [1., 1.914213562+.8660254037*I, 2.914213562+3.315515146*I, 2.707106782+8.870387035*I, -2.500000000+19.32423841*I]](/support/helpjp/helpview.aspx?si=2532/file01532/math955.png)
| (6.2) |
>
|
u := IntegerRelations[PSLQ](powers);
|
| (6.3) |
>
|
minpoly := PolynomialTools[FromCoefficientList](u,x);
|
| (6.4) |
>
|
radnormal(eval(minpoly, x=alpha));
|
| (6.5) |
|
|
LinearAlgebra
|
|
•
|
LinearAlgebra パッケージのコマンドへの出力オプションの与え方に改良が加えられました。LinearAlgebra パッケージに含まれているコマンドの多くは 1 つ以上の Matrices (行列) または Vectors (ベクトル) を返します。今までは、行列またはベクトルコンストラクタにオプションを渡す方法として、オプション outputoptions=[...] を指定するしかありませんでした。この方法は安全で確実ですが、少々不便でした。このリリースから、これらのコンストラクタに渡すオプションは LinearAlgebra コマンドに直接指定することが可能になりました。次に例を示します:
|
>
|
LinearAlgebra[RandomMatrix](5, datatype=float);
|
| (7.1) |
•
|
オプション outputoptions=[...] を使用する今までの方法は、引き続き有効です。特に LinearAlgebra コマンドが 1 つ以上のオブジェクトを返すような場合は、この方法を使用する必要があります。次に例を示します:
|
>
|
LinearAlgebra[LUDecomposition]( <1,2,3;4,5,6;7,8,9>, output=['P','L','U'], outputoptions['L']=[datatype=float] );
|
| (7.2) |
•
|
コンストラクタのオプションがコマンドの呼出手順 (直接指定) と outputoptions サブオプションの両方に指定されている場合、指定順に関わらず後者が優先されます。これにより、すべての出力に適用するオプションを指定しておき、特定の出力に対してのみ別のコンストラクタオプションを指定することが可能になります。
|
>
|
LinearAlgebra[LUDecomposition]( <1,2,3;4,5,6;7,8,9>, output=['P','L','U'], datatype=float, outputoptions['L']=[datatype=integer] );
|
| (7.3) |
•
|
新規コマンド CARE と DARE が LinearAlgebra パッケージに追加されました。これらのコマンドはそれぞれ、連続時間代数リッカチ方程式 (Continuous Algebraic Ricatti Equation) および離散時間代数リッカチ方程式 (Discrete Algebraic Ricatti Equation) と呼ばれる実数型の陰的線形システムの数値解を求めるために使用できます。これらの方程式は最適レギュレータ (LQR; Linear-Quadratic Regulator) の計算など、最適制御の分野でよく使用される方程式です。
|
|
|
PDEtools パッケージ
|
|
–
|
Solve;このコマンドの目的は 2 つです:1 つ目の目的はsolve、dsolve および pdsolve の機能を 1 つのコマンドで提供し、ユーザーの入力から実際に呼び出すコマンドを判断することで、2 つ目の目的は非多項式型の代数方程式システムと微分方程式システムおよび、任意数の identity 変数向けとして solve[identity] で提供されている機能を一般化し、指定されている変数に依存しない解を計算する新規の関連機能を提供することです。
|
>
|
eq[1] := a*x^2 + b*x + c;
|
| (8.1) |
| (8.2) |
>
|
eq[2] := diff(y(x),x) = y(x);
|
| (8.3) |
| (8.4) |
>
|
eq[3] := [diff(u(x, t), t)+c*(diff(u(x, t), x)) = -lambda*u(x, t), u(x, 0) = phi(x)];
|
| (8.5) |
| (8.6) |
|
上記例は 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];
|
| (8.7) |
>
|
Solve(eq[4], {a, b, c, d}, independentof = {t, x});
|
| (8.8) |
|
微分方程式または微分方程式システムについても与えられた変数と独立した解を計算できます。
|
>
|
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;
|
| (8.9) |
|
次は、 にも、 にも依存しない PDE の解の例です。
|
>
|
Solve(eq[5], independentof = x);
|
| (8.10) |
>
|
Solve(eq[5], independentof = y);
|
| (8.11) |
| (8.12) |
|
これらの無限小の対称変換の基礎となっている 1 階偏微分の不変式は次のようになります。
|
>
|
PDE := InvariantEquation(S, u(x, t), name = Lambda);
|
| (8.13) |
|
における 3 階 PDE の不変式は次のようになります。
|
>
|
PDE := InvariantEquation(S, u(x, t), order = 3);
|
| (8.14) |
| (8.15) |
|
InvariantEquations を使用して n 次対称群による式の不変量を計算することもできます。たとえば、次の、2 つの従属変数 を含む問題の 5 つの対称式のリストを検討します。
|
>
|
G := [[_xi[x] = 0, _xi[t] = 1, _eta[u] = 0, _eta[v] = 0], [_xi[x] = 0, _xi[t] = 0, _eta[u] = 1, _eta[v] = 0], [_xi[x] = 1, _xi[t] = 0, _eta[u] = 2*t, _eta[v] = 0], [_xi[x] = t, _xi[t] = 0, _eta[u] = t^2+x, _eta[v] = 0], [_xi[x] = 1/2*x+3/2*t^2, _xi[t] = t, _eta[u] = t^3+3*t*x, _eta[v] = -v]];
|
![G := [[_xi[x] = 0, _xi[t] = 1, _eta[u] = 0, _eta[v] = 0], [_xi[x] = 0, _xi[t] = 0, _eta[u] = 1, _eta[v] = 0], [_xi[x] = 1, _xi[t] = 0, _eta[u] = 2*t, _eta[v] = 0], [_xi[x] = t, _xi[t] = 0, _eta[u] = t^2+x, _eta[v] = 0], [_xi[x] = (1/2)*x+(3/2)*t^2, _xi[t] = t, _eta[u] = t^3+3*t*x, _eta[v] = -v]]](/support/helpjp/helpview.aspx?si=2532/file01532/math1396.png)
| (8.16) |
|
関連の 1 階不変 PDE (1st order invariant PDE) 族は次のようになります:
|
>
|
PDE := InvariantEquation(G, [u, v](x, t), arbitraryfunctionname = Lambda);
|
| (8.17) |
>
|
map(SymmetryTest, G, PDE, [u, v](x, t));
|
| (8.18) |
|
|
RegularChains
|
|
RegularChains パッケージには、Maple 14 で以下の新規コマンドが追加されました:
•
|
SubresultantChain:1 変数多項式とされる 2 つの多項式の部分終結式チェインを暗号化するデータ構造を作成します。値による表現、単項式を基底とした表現、ベズー (Bezout) 行列を用いた表現など、さまざまな部分終結式チェインの表現がサポートされています。
|
また、既存のコマンドに関しては、以下の改良がなされました:
•
|
RegularGcd:regular chain を法とする GCD (最大公約数) をより高速に計算する新規の呼出手順が提供されています。
|
•
|
RealRootIsolate:代替アルゴリズムとして Discoverer が提供されています。有限の複素解を持つ半代数的システムの実数根も分離します。
|
•
|
Triangularize:新しく、より高速なアルゴリズムを実装しています。このアルゴリズムは特に有限個の解を持つシステムに対して有効です。
|
|
|
RootFinding
|
|
–
|
与えられた実数型の多様体上に位置しない点に対して、EnclosingBox はその点を囲み、多様体と交差しない矩形を計算します。
|
–
|
WitnessPoints コマンドは実数多様体または実数多様体の補集合に接続されている各コンポーネント上の点を求めることができます。
|
|
次は、原点を含む単位円の中に納まる矩形を計算し、表示する例です:
|
| (10.1) |
>
|
EnclosingBox(circle, [x=0, y=0], 'output'='plot');
|
>
|
HasRealRoots([circle, x*y-1]);
|
| (10.2) |
>
|
HasRealRoots([circle, 2*x*y-1]);
|
| (10.3) |
>
|
Isolate([circle, 2*x*y-1], [x,y]);
|
| (10.4) |
>
|
HasRealRoots([circle, 4*x*y-1]);
|
| (10.5) |
>
|
Isolate([circle, 4*x*y-1], [x,y]);
|
![[[x = -.2588190451, y = -.9659258263], [x = -.9659258263, y = -.2588190451], [x = .9659258263, y = .2588190451], [x = .2588190451, y = .9659258263]]](/support/helpjp/helpview.aspx?si=2532/file01532/math1597.png)
| (10.6) |
|
|