数式処理

まずは,簡単な計算から始めてみましょう.

> 2*a + 3*a;

5*a

数式の展開を計算するには, expand を使います.

> expand( (a+b)^5 );

a^5+5*a^4*b+10*a^3*b^2+10*a^2*b^3+5*a*b^4+b^5

因数分解を行うには, factor を使います.

> factor( x^4+64 );

(x^2-4*x+8)*(x^2+4*x+8)

その他,微積分や方程式の求解などさまざまな計算が可能です.たとえば int(expr, x) は式 expr を変数 x のもとで積分し,diff(expr, x) は偏微分します. simplify(expr) は式 expr を簡単化した結果を返します.

> int( x^2*sin(x)^2, x );

x^2*(-1/2*cos(x)*sin(x)+1/2*x)-1/2*x*cos(x)^2+1/4*cos(x)*sin(x)+1/4*x-1/3*x^3

> diff(%, x);

2*x*(-1/2*cos(x)*sin(x)+1/2*x)+x^2*(1/2*sin(x)^2-1/2*cos(x)^2+1/2)-1/4*cos(x)^2+x*cos(x)*sin(x)-1/4*sin(x)^2+1/4-x^2

> simplify(%);

x^2*sin(x)^2

方程式を解くには,solve を使います.Mathematicaでは等号には == を用いますが,Maple では = を使います.

> solve( x^2 -  7*x + 3*a = 0, x );

7/2+1/2*(49-12*a)^(1/2), 7/2-1/2*(49-12*a)^(1/2)

以下のようにして,連立方程式もsolveで解くことができます.

> solve( {x^3+y^3=1, x+y=2}, {x,y} );

{y = RootOf(6*_Z^2-12*_Z+7, label = _L1), x = -RootOf(6*_Z^2-12*_Z+7, label = _L1)+2}

答えが求まっていませんね.Mapleでは本当に必要となるまで求解を行いません.恐らく計算効率を上げるために,遅延評価と呼ばれるテクニックを使っているのだと思います.

求解を行わせるには allvalues を利用します(答の中の I は虚数単位を表しています).

> allvalues(%);

{y = 1+1/6*I*6^(1/2), x = 1-1/6*I*6^(1/2)}, {y = 1-1/6*I*6^(1/2), x = 1+1/6*I*6^(1/2)}

微分方程式にはdsolveを使います.diff(y(x),x,x) は y(x) の二階微分です.また,答の中の C1, C2は積分定数です.

> dsolve( diff(y(x),x,x) - k*y(x) = 1, y(x) );

y(x) = exp(k^(1/2)*x)*_C2+exp(-k^(1/2)*x)*_C1-1/k

シグマ計算も簡単に行えます.

> sum( i^2, i=1..n );

1/3*(n+1)^3-1/2*(n+1)^2+1/6*n+1/6

因数分解すると,見慣れた形になります.

> factor(%);

1/6*n*(n+1)*(2*n+1)