第 9 章 数式処理 / 数値計算ソフトウエア
9.1 MuPAD 入門
9.1.6 微分, 積分
MuPADを使うと,微分, 積分に出て来る多くの計算をコンピュータにやらせることができます.
表 9.3: 数学関数
関数名 意味 使用例
float 有理数を浮動小数点数で近似する float(5/3);
round 四捨五入する round(1.2);
frac 有理数から1未満の部分を抽出する frac(23/4);
sqrt 平方根を取る sqrt(2);
sign 符号を取る sign(-10);
fact 階乗 fact(4);
abs 実数や複素数の絶対値を取る abs(1+I);
Re 複素数の実部を取る Re(3+4*I);
Im 複素数の虚部を取る Im(3+4*I);
conjugate 共役複素数を取る conjugate(3+4*I);
ln 対数関数 ln(E);
exp 指数関数 exp(1);
sin 正弦関数 sin(PI);
cos 余弦関数 cos(PI/2);
tan 正接関数 tan(PI/4);
asin 逆正弦関数 asin(sqrt(2)/2);
acos 逆余弦関数 acos(1/2);
atan 逆正接関数 atan(1);
和の公式
まず最初に,和の公式をMuPADを使って求めてみましょう. 和を求めるには, MuPADの関数sumを使 います.
では,
1 + 2 +· · ·+n (9.27)
を計算してみましょう.
(9.1.6)を数学の記号∑
を使って書き直すと,
∑n i=1
i (9.28)
となります.
MuPADで(9.1.6)を計算するための記法は,
sum(i,i=1..n); (9.29)
です.
(9.1.6)をMuPADで実行すると,結果は次のようになります.
>> sum(i,i=1..n);
2
n n
- +
--2 2
(9.30)
9.1. MuPAD入門 125 これは,みなさんが良く知っている公式
1 + 2 +· · ·+n= n(n+ 1)
2 (9.31)
と同じです.
続いて,
12+ 22+· · ·+n2 (9.32)
を計算してみましょう.
MuPADでは, 数のべきは記号「^」を使ってあらわします. たとえば, x2のことは, x^2と標記します.
ですから, MuPADで(9.1.6)を計算するための記法は,
sum(i^2,i=1..n); (9.33)
です.
(9.1.6)を実行すると,以下のような結果が得られます.
>> sum(i^2,i=1..n);
2 3
n n n
- + +
--6 2 3
(9.34)
これも,みなさんが良く知っている通りの結果です.
MuPADは無限級数を計算することもできます. 例として,
∑∞ i=0
1
i! (9.35)
を計算してみましょう. (9.1.6)の和は,よく知られているように, オイラーの数eになります.
(9.1.6)をMuPADで計算するための記法は,
sum(1/i!,i=0..infinity); (9.36)
です. ここに,記号「!」はMuPADでも階乗を意味します.
(9.1.6)を実行すると,
>> sum(1/i!,i=0..infinity);
exp(1)
(9.37)
のような結果が得られます. exp(1)(数学の記法で書けばe1)はeと一致するので, MuPADが正しい結果 を出していることがわかります.
積の公式
積を求めるには,関数sumのかわりに関数productを使います. 使い方は関数sumと同じです.
例題として,
∏n i=1
i (9.38)
を計算してみましょう. (9.1.6)は, 定義から明らかに,nの階乗n!になります.
(9.1.6)をMuPADの記法で書き直すと
product(i,i=1..n); (9.39)
となります. これを実行すると,
>> product(i,i=1..n);
gamma(n + 1)
(9.40)
という結果が得られます.
上の計算結果において,gamma()はガンマ関数と呼ばれる関数をあらわしています. 数学の記法では,ガ ンマ関数はΓ(x)と書かれます. ところで, 引数が自然数のとき, Γ(n+ 1) =n!となることが知られていま す. ですから,この場合もMuPADは正しい結果を与えていることが確認できます.
極限
MuPADには,極限を求める機能があります. このためには,関数limitを使います.
たとえば, みなさんが良く知っている通り,
nlim→∞
( 1 + 1
n )n
=e (9.41)
なわけですが, MuPADは実際にこの計算をすることができます.
(9.1.6)の左辺をMuPADに計算させるには,
limit((1+1/n)^n,n=infinity); (9.42)
と入力します. すると,以下のような結果が得られます.
>> limit((1+1/n)^n,n=infinity);
exp(1)
(9.43)
exp(1)の意味はオイラーの数eと同じですから,この結果は(9.1.6)と一致します.
次に,
xlim→0
sinx
x (9.44)
の計算をしてみましょう. みなさんがよく知っている通り,この値は1です.
MuPADに(9.1.6)を計算させるには,
limit(sin(x)/x,x=0); (9.45)
と入力します. 実行結果は次のようになります.
>> limit(sin(x)/x,x=0);
1
(9.46)
微分
数学関数を微分するには, MuPADの関数diff を使います.
たとえば, d
dxsinx (9.47)
をMuPADに計算させたいときには,
diff(sin(x),x); (9.48)
と入力します.
結果は
9.1. MuPAD入門 127
>> diff(sin(x),x);
cos(x)
(9.49)
のようになります.
合成関数の微分も簡単にできます.
たとえば, d
dx(sinx)2 (9.50)
をMuPADに計算させたいときには,
diff(sin(x)^2,x); (9.51)
と入力します.
結果は
>> diff(sin(x)^2,x);
2 cos(x) sin(x)
(9.52)
のようになります.
多変数関数をある変数について偏微分するときには,関数diffの第1引数に微分したい関数, 第2引数に 微分したい変数を書きます.
たとえば, x2sinyをxについて微分したいときには,
diff(x^2*sin(y),x); (9.53)
とします.
(9.1.6)を実行すると,
>> diff(x^2*sin(y),x);
2 x sin(y)
(9.54)
という結果が得られます.
同様に,x2sinyをyについて微分したいときには,
diff(x^2*sin(y),y); (9.55)
とします.
(9.1.6)を実行すると,
>> diff(x^2*sin(y),y);
2
x cos(y)
(9.56)
という結果が得られます.
3変数以上の関数についても,取り扱いはこれまでと同様です.
積分
数学関数を積分するときには, MuPADの関数intを使います. 関数intは,定積分を求めるときにも不定 積分を求めるときにも使えます.
不定積分を求めるときの一般的な書き方は,
int(関数, 変数) (9.57)
のようになります. ここに,「関数」と書かれた部分には適当な数学関数,「変数」と書かれた部分にはx,y などの変数が入ります.
例として, まず
∫ 1
xdx (9.58)
の計算をしてみましょう. これを計算すると, 結果はlogx(自然対数)となるはずです.
(9.1.6)を計算するためのMuPADの書式は,
int(1/x,x); (9.59)
です.
(9.1.6)を実行すると,結果は
>> int(1/x,x);
ln(x)
(9.60)
となります. ln(x)はMuPADで自然対数を計算するための関数ですから,上記では正しく不定積分の計算 がなされていることがわかります.
一方,定積分を求めるときの一般的な書き方は,
int(関数, 変数=初期値..終了値) (9.61)
のようになります. ここに,「関数」と書かれた部分には適当な数学関数,「変数」と書かれた部分にはx,y などの変数が入ります. また,初期値,終了値には適当な数あるいは記号が入ります.
では,定積分の例として,半円の面積を求めてみましょう. このために, MuPADで
∫ 1
−1
√1−x2dx (9.62)
の計算をします.
(9.1.6)をMuPADのコマンドを使って書き直すと,
int(sqrt(1-x^2),x=-1..1); (9.63)
のようになります.
(9.1.6)を実行したときの結果は
>> int((1-x^2)^(1/2),x=-1..1);
PI --2
(9.64)
のようになります. PIはMuPADで円周率πをあらわす定数ですから,半円の面積が正しく計算されてい ることが確認できます.
先の計算結果からもわかるように, MuPADは数学演算の結果が数学記号を使って表現できるときには, 可能な限りその数学記号を保存しようとします. これはなぜかというと,数学記号に基づいて計算している 限りは計算結果に誤差が含まれることはないからです.
計算結果として数学記号ではなく数値が必要なときには, MuPADの関数floatを使います.
たとえば, 半円の面積を数値で計算したいときには,
float(int(sqrt(1-x^2),x=-1..1)); (9.65)
(9.1.6)を実行すると,結果は
>> float(int(sqrt(1-x^2),x=-1..1));
1.570796326
(9.66)
9.1. MuPAD入門 129 のようになり,π/2の近似値が計算されていることが確認できます.
積分範囲として数ではなく記号を指定することもできます. このような例として,
∫ b a
x2dx (9.67)
の計算をしてみましょう. 結果はb3/3−a3/3になるはずです.
(9.1.6)をMuPADのコマンドに直した
int(x^2,x=a..b); (9.68)
を実行してみると,
>> int(x^2,x=a..b);
3 3
a b
- +
--3 3
(9.69)
となり,正しい計算がなされていることが確認できます.
なお,複雑な積分については, MuPADは計算結果を簡単な形で表示してくれないことがあります.
9.1.7 フーリエ変換とラプラス変換
本節では, 1年次後学期と2年次前学期の講義内容をやや先取りするのですが, MuPADを使って関数を フーリエ変換やラプラス変換する方法について説明します.
フーリエ変換とラプラス変換の定義 関数f(t)が与えられているとき,積分
∫ ∞
−∞
f(t)e−iωtdt (9.70)
によって定まる関数 F(ω) =
∫ ∞
−∞
f(t)e−iωtdt (9.71)
F(ω)のことを,関数f(t)のフーリエ変換といいます.
また,関数F(ω)が与えられているとき,積分 1
2π
∫ ∞
−∞
F(ω)eiωtdω (9.72)
によって定まる関数のことを,関数F(ω)の逆フーリエ変換indexMuPAD@MuPAD!ぎゃくふーりえへんか ん@逆フーリエ変換といいます.
フーリエ変換と逆フーリエ変換は互いに他方の逆変換になっています. ですから,ある関数をフーリエ変 換してからさらに逆フーリエ変換する,あるいは逆フーリエ変換してからフーリエ変換すると,もとの関数 に戻ります.
フーリエ変換は工学の分野では非常に重要な道具であり,特に電気電子工学の分野では日常的に利用され ています. 本学科では, 2年次前期に開講される電気数学IIIでフーリエ変換が取り扱われています.
フーリエ変換と同様に工学の分野でよく使われるものに, ラプラス変換というものがあります. これは, 関数f(t)に対し,積分
∫ ∞
0
f(t)e−stdt (9.73)
によって定まる関数
F(s) =
∫ ∞
0
f(t)estdt (9.74)
のことをいいます. フーリエ変換とラプラス変換の違いは,フーリエ変換ではωが実数だったのに対して, ラプラス変換ではsが複素数であることです.
フーリエ変換と同様に,ラプラス変換にも逆変換が存在します. これを逆ラプラス変換と言います. 逆ラ プラス変換の定義は逆フーリエ変換に比べてやや複雑で,
lim
T→∞
∫ σ+iT σ−iT
F(s)estdt (9.75)
というものです. ここに,σはsの実部をあらわしています.
ラプラス変換も工学の分野では非常に重要な道具であり, 電気電子工学の分野で日常的に利用されます.
本学科では, 1年次後期に開講される電気数学IIでラプラス変換が取り扱われています.
ここでは, 1年次の学生にとってはやや先回りになるのですが, MuPADを使って数学関数をフーリエ変 換やラプラス変換する方法について簡単に触れておくことにします.
フーリエ変換する
数学関数をフーリエ変換するには,すこし長いのですが, transform::fourierというコマンドを使います.
では,例題をやってみます. まず,関数
exp[−t2]
を ∫ ∞
−∞
exp[−t2] exp[−wt]dt
によってフーリエ変換してみましょう. 計算結果をgという変数に記憶しておくことにすると,このための
MuPADのコマンドは,
g:=(transform::fourier(exp(-t^2),t,w));
←- (9.76)
となります. MuPADによる計算結果は以下のように表示されます.
>> g:=(transform::fourier(exp(-t^2),t,w));
/ 2 \
1/2 | w |
PI exp| - -- |
\ 4 /
(9.77)
逆フーリエ変換する
数学関数を逆フーリエ変換するには, transform::ifourierというコマンドを使います. では,先にフーリエ 変換した関数を逆フーリエ変換して,もとの関数に戻ることを確認しましょう. このためのMuPADのコマ ンドは,
transform::ifourier(g,w,t);
←- (9.78)
となります. MuPADによる計算結果は以下のように表示されます.
>> transform::ifourier(g,w,t);
2 exp(- t )
(9.79)
逆フーリエ変換によって確かにもとの関数exp[−t2]に戻っていることが確認できます.