fsolve( 方程式 , 解く変数 ) : 近似解を求め
る。
代数方程式を解く
• 順に入力して確かめてみよう。
(例)代数方程式を解く(1)
入力 説明
eq1 := 3*x^2 + 8*x + 4;
solve(eq1, x); eq1の厳密解を求める
fsolve(eq1, x); eq1の近似解を求める
式に小数点が含まれる場合、solveコマンドでも近似解を返す eq2 := 3*x^2 + 8*x + 4.0;
solve(eq2, x); eq2の近似解を求める
(例)代数方程式を解く(2)
入力 説明
eq3 := 4*x + 2*y = 4;
eq4 := 2*x + 3*y = 3;
このような連立方程式も 解くことができる。
solve({eq3, eq4}, {x, y}); 引数(括弧の中身)を集合{}を使
用して入力する。
fsolve({eq3, eq4}, {x, y});
解に複素数が含まれる場合、
3つ目の引数にcomplexと指定する。
eq5 := 2*x^2 + 1;
fsolve(eq5, x, complex);
• 漸化式を解くには rsolve コマンドを使用 する。 rsolve( 漸化式 , 初期条件 )
漸化式を解く(1)
入力 説明
eqs1 := {a(n+1)=a(n)+4, a(0)=1}; 等差数列の漸化式を解く。
rsolve(eqs1, a(n));
eqs2 := {a(n+1)=p*a(n)+q}; 漸化式に変数が含まれて
いる場合も解ける。
rsolve(eqs2, a(n));
• フィボナッチ数列を解いてみよう。
参考( hnp://ja.wikipedia.org/wiki/ フィボナッチ数)
漸化式を解く(2)
F
0= 1 F
1= 1
F
n+2= F
n+ F
n+1( n ≥ 0 )
"
# $
% $
漸化式を解く(3)
入力
fibo := {f(n)=f(n-‐1)+f(n-‐2), f(0)=1, f(1)=1};
rsolve(fibo, f(n));
• Maple では2次元、3次元のグラフを 描くことができる。
plot : 二次元プロットを作成する。
plot3d : 三次元プロットを作成する。
グラフを描く
• 二次元のグラフを描く
plot( 関数 , 変数名 = 下限 .. 上限 )
• 複数の関数を重ね書きする
plot([ 関数 1, 関数 2], 変数名 = 下限 .. 上限 )
※標準では相対軸でのプロットを作成する。
絶対軸として確認する場合はオプションを追加す る。
plot( 関数 , 変数 = 下限 .. 上限 , scaling=constrained);
2次元プロット(1)
• 媒介変数のプロットを作成する
plot([ 横軸の関数 , 縦軸の関数 , 変数名 =
下限 .. 上限 )
• 座標点のプロットを作成する
座標点のリスト := [[x1,y1], [x2,y2],[x3,y3]];
plot( 座標点のリスト );
2次元プロット(2)
• 入力して確認してみよう
(例)2次元プロット
入力 説明
plot(sin(x), x=0..10); y = sin(x) (0≦x≦10) の グラフを描く
plot([sin(x), sin(x)^2], x=0..10); y = sin(x)とy = sin(x)^2の グラフを重ね書きする
plot([t, sin(t), t=0..10]); x = t (0≦t≦10), y = sin(t)の グラフを描く
points := [[1,3], [2,4], [3,7], [4,5]];
plot(points);
座標点のリストを作成 座標点のグラフを描く
• 三次元のグラフを描く
plot3d( 関数 , 横軸の範囲 , 縦軸の範囲 )
• 複数の関数を重ね書きする
plot([ 関数 1, 関数 2], 横軸の範囲 , 縦軸の 範囲 )
3次元プロット(1)
• 重ね書きしたプロットの色を変更する plot([ 関数 1, 関数 2], 横軸の範囲 , 縦軸の
範囲 , color=[ 色 1, 色 2])
• 媒介変数のプロットを作成する
plot3d([ 横軸の関数 , 縦軸の関数 , 高さの
関数 ], 変数 1 の範囲 , 変数 2 の範囲 )
3次元プロット(2)
• 入力して確認してみよう
(例)3次元プロット
入力 説明
plot3d(sin(x)*cos(y), x=0..10,
y=0..10); sin(x)*cos(y)の
グラフを描く plot3d([sin(x)*y, x+cos(y)],
x=0..3, y=0..3); sin(x)*y と x*cos(y)の グラフを重ね書きする plot3d([sin(x)*y, x+cos(y)],
x=0..3, y=0..3, color=[red, blue]); sin(x)*yを赤、
x*cos(y)を青で描く plot3d([t, s, sin(t)*cos(s)],
t=0..8, s=0..2); x = t, y = s, z = sin(t)*cos(s) のグラフを描く
• グラフをクリックするとグラフオプションを 変更するメニューバーが表示される。
plot
3dplot
色々と変更してみよう。
グラフのオプション
• 微分するには、 diff コマンドを使用する。
diff( 数式 , 変数 ) : 指定した変数で微分す る。
Diff( 数式 , 変数 ) : 微分を計算しない数式 の形式のまま扱う。このとき、 value (変数)
で解を求めることが出来る。
微分(1)
• 複数回微分する場合や複数の変数で微 分する場合は、変数をカンマで区切って 追加する。
diff( 数式 , 変数 1, 変数 1) : 指定した変数
で2階微分する。
diff( 数式 , 変数 1, 変数 2) : 変数 1 と変数 2 で微分する。
微分(2)
• 区分関数の微分をすることができる。
変数 A = piecewise( 区間 1, 値 1or 関数 1, 区
間 2, 値 2or 関数 2) : 区分関数を定義する。
(※最後の値または関数の区間を指定しなかった場合、
otherwise(前の区間以外)として扱われる)
diff( 変数 A, 変数 x) : 区分関数の変数 A を
変数 x で微分する
微分(3)
(例)微分
入力 説明
diff(x^2, x); x^2をxで微分する
diff(sin(x)*x, x); sin(x)*xをxで微分する
diff(ln(x), x, x); log(x)をxで2階微分する
diff(sin(x*y), x, y); sin(x*y)をxとyで微分する
peq := piecewise(x<0, sin(x), cos(x));
diff(peq, x); 区分関数peqを定義
区分関数peqをxで微分する deq := Diff(x^2+x, x);
value(deq);
微分を計算しない形式で表示 deqの解を求める
• 積分するには定積分、不定積分ともに int コ マンドを使用する。
• Maple の不定積分では、任意定数は解に含
まれない。
int( 数式 , 変数 ) : 指定した変数で不定積分を 行う。
int( 数式 , 変数 = 下限 .. 上限 ) : 指定した変数
と区間で定積分を行う。
積分(1)
• 複数回積分する場合は int コマンドをさらに 入力する必要がある。(微分の diff とは違う ので注意!)
int(int( 数式 , 変数 1), 変数 1) : 指定した変数で
2回積分する。
Int( 数式 , 変数 ) : 積分を計算しない数式の形 式のまま扱う。微分同様、 value (変数)で解を 求めることが出来る。
積分(2)
• 微分同様、区分関数の積分をすること ができる。
変数 A = piecewise( 区間 1, 値 1or 関数 1, 区
間 2, 値 2or 関数 2) : 区分関数を定義する。
int( 変数 A, 変数 x) : 区分関数の変数 A を
変数 x で積分する
積分(3)
(例)積分(1)
入力 説明
int(x^2, x); x^2を積分する(不定積分)
int(x^2, x=1..3); x^2を1≦x≦3の区間で
積分する(定積分)
int(x^2, x=a..b); 積分範囲に変数を
指定することもできる peq := piecewise(x<0, sin(x), cos(x));
int(peq, x);
区分関数peqを定義
区分関数peqを積分する
(例)積分(2)
入力 説明
deq := Int(x^2+x, x);
value(deq);
積分を計算しない形式で表示 deqの解を求める
int(ln(x), x); log(x)の不定積分
int(int(ln(x), x), x); log(x)をさらに積分する
• 極限を行うには、 limit コマンドを使用す る。
limit( 数式 , 変数 = 値 , オプション ) : ( 変数 ) が ( 値 ) に近づくときの ( 数式 ) の極限値を計 算する。 (※無限大は infinity と記述する)
オプションに right または ler を指定すること で右極限、左極限を求めることができる。
極限
• 入力して確認してみよう
(例)極限
入力 説明
limit(sin(x)/x, x=0);
eq := (2*x^2+x-‐3)/(x^2-‐2*x+1);
limit(eq, x=infinity);
limit(1/x, x=0, right); 右極限を求める
limit(1/x, x=0, ler); 左極限を求める
x→0
lim
sin(xx)x→∞
lim
2x2 + x −3 x2 −2x +1
• 級数展開するには series コマンドを使用 する。
series( 数式 , 変数 = 展開点 ) : 6 次までの多
項式に級数展開する。
series( 数式 , 変数 = 展開点 , 次数 ) : 指定し た次数まで展開する
級数展開(1)
(例)級数展開
入力 説明
eq1 := series(sin(x), x=0); sin(x)を級数展開
eq2 := series(sin(x), x=0, 8); 8次までの多項式に級数展開
↓級数展開した結果のグラフを作成する↓
peq1 := convert(eq1, polynom); plotの前にconvertで剰余項を 取り除く必要がある
plot(peq1, x=-‐4..4); plotする
• 数値積分とは・・・与えられた関数の定 積分の値を数値的に求める。
evalf(Int( 数式 , 範囲 )) : 数値積分を行う
その他、様々な数値積分の手法を指定す ることができる。
数値積分
(例)数値積分
入力 説明
evalf(Int(sin(x), x=0..1)); sin(x)の0≦x≦1の範囲の積分 を数値的に求める
evalf(Int(eq1, x=0..1, digits=20, method=_Dexp));
指数関数法
evalf(Int(eq1, x=0..1, digits=20, method=_Gquad));
ガウス求積法
evalf(Int(eq1, x=0..1, digits=20, method=_NCrule));
ニュートン・コーツ法
• 常微分方程式を入力するには diff コマ ンドを使用する。
dsolve( 微分方程式 , 求める関数 ) : 微分
方程式を解く
常微分方程式
入力 説明
deq := diff(f(x), x);
と入力する
dsolve(deq, f(x)); f(x)を求める
d
dx f ( x)
• 微分方程式の初期条件等の条件を指定し
ない場合、任意定数を含む一般解を求める。
• 必要な条件を定義することで任意定数を含 まない一般解を求めることができる。
dsolve({ 微分方程式 , 初期条件 }, 求める関数 ) :
初期条件を定義して任意定数を含まない一般 解を求める。
常微分方程式の一般解
(例)常微分方程式の一般解
入力 説明
deq := diff(f(x), x) = x*f(x); 微分方程式を定義する
ini := f(0) = 1; 初期条件iniを定義する
sol1 := dsolve({deq, ini}, f(x)); 初期条件を使用して 微分方程式を解く
sol2 := dsolve({deq, ini}, numeric); numericオプションを指定すると
数値解を求めることができる
sol2(1.5); 適当な値を入力して
解を確認してみる
• 偏微分方程式を入力するには、常微分 方程式同様 diff コマンドを使用する。
pdsolve( 微分方程式 , 求める関数 ) : 偏微
分方程式を解く
偏微分方程式
入力 説明
pdeq := diff(f(x,y), x);
を入力
pdsolve(pdeq, f(x,y)); f(x,y)を求める
∂
∂ x f ( x , y)
• 偏微分方程式は pdsolve コマンドで求めること ができる。
• 変数分離のヒントを与えることで他の解を求め ることもできる。
• build オプションで解を組み立てた形式で求める
pdsolve( 微分方程式 , 求める関数 , ヒント , build)
: 偏微分方程式を解く
偏微分方程式の一般解
(例)偏微分方程式の一般解
入力 説明
pdeq1 := diff(f(x,y), x) = 4*diff(f(x,y), y); 偏微分方程式を定義 する
pdsolve(pdeq1, f(x,y)); 偏微分方程式を解く
pdsolve(pdeq1, f(x,y), HINT=g(x)+h(y), build); 変数分離のヒントを
与えて解く
∂
∂ x f ( x, y) = 4 ∂
∂ y f ( x , y)
(例)偏微分方程式の数値解
入力 説明
pdeq2 := diff(f(x,t), x) = -‐0.3*diff(f(x,t), t); 偏微分方程式を定義 ini2 := {f(x,0)=sin(x), f(0,t)=-‐sin(t)}; x,tの初期条件を定義 pds1 := pdsolve(pdeq2, ini2,
numeric, vme=t, range=0..1);
numericオプションを指定して実行
(モジュール形式で出力)
p1:=pds1:-‐plot(t=0, color=red):
p2:=pds1:-‐plot(t=1,color=blue):
p3:=pds1:-‐plot(t=2,color=green):
plots[display](p1, p2, p3);
tが変化するときの 2次元プロットを作成
pds1:-‐plot3d(t=0..1, axes=boxed); 3次元プロットを作成