数式処理ソフトMaple入門(I)
ー微積分とplotー
関西学院大学理工学部 西谷滋人
Copyright @2007 by Shigeto R. Nishitani
最初の一歩
中学までは数学が好きだったけど,高校に進んで嫌いになったという人もいると思いま
す.大學に行くともっと嫌いというか,そんな人には訳が分からなくなってきます.で
も,理系の場合はそうも言ってられないので,数式をいじくり回して適当に答案書いて
なんとか単位をもらったりなんかしてます(私のことではありません...).高校の微積分
と大学の微積分は違うのでしょうか? 逆行列とか固有値とかは難しいもんなんでしょう
か? もっと簡単にできないかなと私も20年前まで思っていました.そんなときに数式
処理ソフトに出会いました.衝撃でした.それ以来,数式処理ソフトは私のコンピュー
タに常駐しています.製品とか版とかは変わりましたが.数式処理ソフトは,数学の天
才でない人が,理系で生きていくために必須の道具だと思います,Mapleはそんな数式
処理ソフトのひとつです.
どんな感じか見ていきましょう.Mapleを立ち上げて,次のような文を打ち込んでく
ださい.
O eq1:=-(1/2)*(x-2)^2+2;
ただし,Maple10以降では入力モードのデフォルトが「Math」に変わっています.左
上にある,「テキスト」というボタンを押してください.毎回するのが面倒な場合
は,環境設定/「表示」タブ/入力方法で「テキスト」を選択して,「全体に適用」
ボタンを押して,Mapleを再起動させてください.
そして,キーボードのenterを押してください.これは次の式
1
2
K xK2 C2
2
をeq1としなさいということをMapleに命令したことになります.最後の ; は,ここ
が文章の区切りですというしるしです.このような文をコマンドと呼びます.では次
のコマンドを打ち込んでください.
O expand(eq1);
1 2
K x C2x
2
(2.1)
展開したの分かります? そう.これは,高校数学の最初に出てくる「次の式を展開
せよ」という問題をMapleに解かせたのです.expandというのが展開せよという命令
で,括弧 () で囲まれた箇所にある式を入力として受け取って,展開した結果を出力
してくれます.英語で「展開せよ」という動詞がexpandです.Mapleの生まれ故郷は
カナダなので英語で命令が書かれています.近い将来「展開(式1)」とかでやってくれ
るようになるかも知れませんが,それより英単語を覚えたほうがかっこいいと思いま
すよ(ぜったい).
では逆の操作,因数分解をさせてみます.「展開はなにも頭を使わんでもできるけ
ど,因数分解はそうはいかんぜよ」ということを皆さん実感されているでしょう.で
もMapleでは,なんの違いもありません.因数の事を英語でfactorと言います.
こいつをMapleに教えてやると
O factor(eq1);
1
K x xK4
2
(2.2)
となります.こんなんコンピュータをわざわざ出さんでもと思ったあなた,これなら
どう?
O factor((a+b+c)^3-(a^3+b^3+c^3));
3 bC c aC b
aC c
(2.3)
(でや,まいったか).
次にeq1をF1という関数と定義しましょう.変数をxとして定義するのは以下のような
コマンドになります.
O F1:=unapply(eq1,x);
1
F1 := x/K
xK2
2
2
C2
(2.4)
このコマンドunapplyを辞書でひいてもありません.語源はちょっと凝っています.変
数を関数に適用するというのをapplyといいますが,関数を作るのはその逆の操作なの
でというらしいです.わからんかったら覚えてください.どうせfactorも初めは覚え
るのですから.英語圏の人はこんなのを覚える必要もないので楽ですね.英単語を
覚えるのが苦手な人は
http://ist.ksc.kwansei.ac.jp/ nishitani/Maple/JtoE.html
を参照してください.ちょっとは役にたつでしょう.
この関数をプロットしてみましょう.関数F1の変数xを0から4までの範囲でplotしな
さいというコマンドは次のようになります.
O plot(F1(x),x=0..4);
2.0
1.5
1.0
0.5
0
0
1
2
x
3
4
これで高校の数学の半分が終わっちゃいました(ウソです).
球を放り投げたら
ちょっと動かしてみましょう.
「宇宙のどっかには重力が地球の9.8分の一の星があるはずで,そこでボールを放り投
げたらどうなるか?」
という問題です.つぎのようなコマンドを打ち込んでください.とその前に注意.いま
までは一行に入るコマンドしか打ち込んでいませんでしたが,長くなると見にくいで
す.そこで改行したくなります.このときは,shift+enterを入力してください.
先ずはアニメにするためのおまじない(with)です.
O with(plots);with(plottools);
あっ.出力は余り意味ありません.びびらせただけです.気にさわるようでしたら,
最後の ; を : にすれば「代入だけ,出力はなし」というコマンドになり,消えま
す.
animate, animate3d, animatecurve, arrow, changecoords, complexplot,
complexplot3d, conformal, conformal3d, contourplot, contourplot3d,
coordplot, coordplot3d, densityplot, display, fieldplot, fieldplot3d,
gradplot, gradplot3d, graphplot3d, implicitplot, implicitplot3d,
inequal, interactive, interactiveparams, intersectplot, listcontplot,
listcontplot3d, listdensityplot, listplot, listplot3d, loglogplot, logplot,
matrixplot, multiple, odeplot, pareto, plotcompare, pointplot,
pointplot3d, polarplot, polygonplot, polygonplot3d,
polyhedra_supported, polyhedraplot, rootlocus, semilogplot,
setcolors, setoptions, setoptions3d, spacecurve, sparsematrixplot,
surfdata, textplot, textplot3d, tubeplot
arc, arrow, circle, cone, cuboid, curve, cutin, cutout, cylinder, disk,
(3.1)
(3.1)
dodecahedron, ellipse, ellipticArc, hemisphere, hexahedron,
homothety, hyperbola, icosahedron, line, octahedron, parallelepiped,
pieslice, point, polygon, project, rectangle, reflect, rotate, scale,
semitorus, sphere, stellate, tetrahedron, torus, transform, translate,
vrml
O ball := proc(x)
plots[display](
circle([x,F1(x)],0.1));
end proc:
O animate(ball,[xx],xx=0..4,frames=50,scaling=constrained);
xx = 0.
2.0
1.5
1.0
0.5
0
1
2
3
4
できあがった画面をクリックして,メニューバーの下に出てきた右向き矢印(>)を
押してください.球が放り投げられているのが分かると思います.すこし「とろ」
そうだったら,FPSの右にある数字を上げてください.FPSはframes per secondの
略です.ゼルダとかでアイテムが落ちていくときの動きとかはまさにこうやって表示
させています(たぶん).
微分
もうすこし数学っぽいことをさせてみましょう.高校数学の大敵のひとつが微積分で
す.これをMapleにやらせます.これができれば高校の数学は半分終わりです(ホン
ト).いつものとおり英語を調べれば,「微分する」はdifferentiateと言います.長い
ですよね.「diffる」としたいとこですね.そうします.Mapleでも.「る」はないけ
ど
O df1:=diff(F1(x),x);
df1 := Kx C 2
(4.1)
ちなみに2次微分は次の通りです.
O diff(F1(x),x,x);
K1
(4.2)
いままでと同じようにすぐにプロットさせてみましょう.関数dF1を定義します.
(4.3)
O dF1:=unapply(df1,x);
dF1 := x/Kx C 2
(4.3)
次のようにして2つの関数を同時にplotさせます.
O plot([F1(t),dF1(t)],t=0..4);
あ.ここで変数をtに変えています.これは,球を斜めに投げ上げるかわりに真上に投
げたときの球の高さxの変化を時間(time, t)で追っかけたと考えていることに相当しま
す.その時の1次微分,つまり傾きが,そう速度になります.
2
1
0
1
2
t
K1
3
4
K2
【課題1】2次微分
では2次微分も同時にplotしてみてください.どうなった? 予測通り? これが物理
でいう「重力加速度一定の法則」です.
これをぐちゃぐちゃやっている間に必ずちょんぼります.ここでMapleの隠された真
実をひとつお教えします.それは
「Mapleは,コマンドを上から順ではなく,入れた順に解釈する」
です.だから,見た目はあっているのにうまいこと行かないということが頻発しま
す.そんなときは,入力値をすべて忘れさせるコマンドrestartを一番上に置いて最初
から始めます.メニューバーの「挿入」/「実行グループ」を使ったり,enterを入れ
る順とかを意識して,どの順にコマンドを受け取るべきかというこちらの意思を断固
としてきゃつらに示さねばならないのです.
微積分の例
「単純な1次や2次の数式だけしか扱えないのでは」とあなどるなかれ.次みたいな複雑
な関数の微分や積分もすぐです.
O F2:=unapply(x/(x^2-2*x+4),x);
x
F2 := x/
2
x K2 xC4
(6.1)
O diff(F2(x),x);
(6.2)
x 2 xK2
1
2
x K2 xC4
K
(6.2)
2
2
x K2 xC4
積分する(integrate)は,Mapleでint・るです.
O int(F2(x),x);
1
1
2
ln x K 2 x C 4 C
2
3
1
3 arctan
6
2 xK2
3
(6.3)
おっとこれは習ってないかもしれませんね.でも知らなくても合っているはずです
(たぶん).plotも簡単です.赤いほうがもとのF2で,緑がその微分です.
O plot([F2(x),diff(F2(x),x)],x);
0.4
0.3
0.2
0.1
K10
0
K5
5
x
K0.1
x
-2
f(x)
a
f'(x)
-
2
b
0
10
+
a
0
-
こんな増減表なるものをしょっちゅう書かされますが,+やー,やじるしですませ
ていたところのビミョーな変化も一目です.ちなみに関数の一次微分が0となるxを求
めるには,
「関数の一次微分(diff(F2(x),x))が0となる(=0)式(eq2)を,xについて解
く(solve(eq2,x))」
と考えて,次の通りです.
O eq2:=diff(F2(x),x)=0;
solve(eq2,x);
1
eq2 := 2
K
x K2 xC4
K2, 2
x 2 xK2
2
2
=0
x K2 xC4
(6.4)
先ほどのplotの緑がx軸と交差する点の座標にご注目あれ.
このあと...
どうです.すごいでしょ(えへん).Mapleのコマンドを身に付けたい人は
http://ist.ksc.kwansei.ac.jp/ nishitani/Lectures/Maple/BottomLine0.html
へ行ってみてください.ここには基本から応用までの簡単な解説と演習問題が用意し
てあります.初級の欄には高校の数学の問題をたくさん載せています.例えば,「接
線と逆関数」には高校数学によくでてくる接線の式を求める問題があります.もう少
し簡単な課題をいくつか次にあげました.特に微分・積分と現実世界での動きとの対
応に注意してください.ややこしいことを省いて手短にいうと,「微分は傾き,積分
は面積」ですので,それを実感してください.
【課題2】ビリヤード球
ビリヤード球の跳ね返りは以下のような関数で定義できる.球を動かしてみよ.
O F3:=x->piecewise(x<0,x,x>0,-x);
F3 := x/piecewise x ! 0, x, 0 ! x, Kx
(8.1)
【課題3】車の距離・速度・加速度
次のような速度変化をさせた車は時間とともにどれだけ進む? 答えは下側の図の通り.
では加速度の変化はどうよ.
O F3:=x->piecewise(x<1,x, x>1 and x<2,1, x>2,3-x);
F3 := x/piecewise x ! 1, x, 1 ! x and x ! 2, 1, 2 ! x, 3K x
O plot(F3(x),x=0..3);
1.0
0.8
0.6
0.4
0.2
0
0
1
2
x
3
(9.1)
2.0
1.5
1.0
0.5
0
0
1
2
3
x
【課題4】人工衛星(惑星)の動き
もうすこし複雑なコマンドです.地球の重力圏に引き込まれないように宇宙船を操縦す
るときに必要となる重力ポテンシャルの視覚化です.ちょっとややこしいので,planet.
mwというファイルを
http://ist.ksc.kwansei.ac.jp/ nishitani/Lectures/Maple/BottomLine0.html
からダウンロードして,ぐりぐり回して遊んでください.なぜこの絵がそれらしく見え
るか考えてください.
O restart;
a:=1;
b:=0.8;
with(plots):with(plottools):
e:=sqrt(1-b^2/a^2);
a := 1
b := 0.8000000000
e := 0.6000000000
(10.1)
O potential:=plot3d(-1/sqrt((x-e*a)^2+y^2),x=-1.2..1.2,y=
-1.2..1.2,view=-3..0,style=wireframe);
potential := PLOT3D ...
O theta40:=[0,
.8499000261,
2.258146178,
3.123171483,
3.683483607,
4.140219423,
4.555116757,
4.959912319,
.1702850391,
1.173249127,
2.529619975,
3.279183922,
3.804031515,
4.246389688,
4.656250390,
5.062538193,
.3621441466,
1.548794064,
2.755986277,
3.422833759,
3.919742362,
4.350612453,
4.757168589,
5.166573260,
.5843340015,
1.927856352,
2.950772893,
3.556924188,
4.031550481,
4.453374408,
4.858258539,
5.272498249,
(10.2)
5.380855976, 5.492275381, 5.607504105, 5.727454284,
5.853268956, 5.986421978, 6.128873603, 6.283321858]:
O planet2:=proc(x)
local t;
t:=theta40[round(x)];
plots[display](
sphere([a*sin(t),b*cos(t),-1/sqrt((a*sin(t)-e*a)^2+(b*
cos(t))^2)],0.1), style=patchnogrid );
end:
animate(planet2,[xx],xx=1..39,frames=39,
background=potential, orientation=[-90,0],
scaling=constrained,axes=none);
xx = 1.
知っている人はケプラーの第一,第二法則との対応を確かめてください.
ダウンロードは右クリックして「ファイルを保存」として,mwという拡張子にしま
す.
ダウンロード

微積分 - 関西学院大学理工学部情報科学科