Mapleの使い方(3) 担当: 荻田 武史 今回やること • 前回の続き • 数学関数 – 三角関数、指数・対数関数 • プログラミング – 用語、関数、繰り返し文 積分(1) • 積分するには定積分、不定積分ともにintコ マンドを使用する。 • Mapleの不定積分では、任意定数は解に含 まれない。 int(数式, 変数): 指定した変数で不定積分を 行う。 int(数式, 変数 = 下限..上限): 指定した変数 と区間で定積分を行う。 積分(2) • 複数回積分する場合はintコマンドをさらに 入力する必要がある。(微分のdiffとは違う ので注意!) int(int(数式, 変数1), 変数1): 指定した変数で 2回積分する。 Int(数式, 変数): 積分を計算しない数式の形 式のまま扱う。微分同様、value(変数)で解を 求めることが出来る。 積分(3) • 微分同様、区分関数の積分をすること ができる。 変数A = piecewise(区間1, 値1or関数1, 区 間2, 値2or関数2): 区分関数を定義する。 int(変数A, 変数x): 区分関数の変数Aを 変数xで積分する 積分(4) 入力 説明 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)); 区分関数peqを定義 int(peq, x); 区分関数peqを積分する 積分(5) 入力 説明 deq := Int(x^2+x, x); value(deq); 積分を計算しない形式で表示 deqの解を求める int(ln(x), x); log(x)の不定積分 int(int(ln(x), x), x); log(x)をさらに積分する 極限(1) • 極限を行うには、limitコマンドを使用す る。 limit(数式, 変数=値, オプション): (変数) が(値)に近づくときの(数式)の極限値を計 算する。(※無限大はinfinityと記述する) オプションにrightまたはleKを指定すること で右極限、左極限を求めることができる。 極限(2) • 入力して確認してみよう 入力 limit(sin(x)/x, x=0); eq := (2*x^2+x-‐3)/(x^2-‐2*x+1); limit(eq, x=infinity); 説明 sin(x) lim x→0 x limit(1/x, x=0, right); 2x 2 + x − 3 lim 2 x→∞ x − 2x +1 右極限を求める limit(1/x, x=0, leK); 左極限を求める 級数展開(1) • 級数展開するにはseriesコマンドを使用 する。 series(数式, 変数=展開点): 6次までの多 項式に級数展開する。 series(数式, 変数=展開点, 次数): 指定し た次数まで展開する 級数展開(2) 入力 説明 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する 数値積分(1) • 数値積分とは・・・与えられた関数の定 積分の値を数値的に求める。 evalf(Int(数式, 範囲)): 数値積分を行う その他、様々な数値積分の手法を指定す ることができる。 数値積分(2) 入力 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); d f (x) と入力する dsolve(deq, f(x)); f(x)を求める dx 常微分方程式の一般解(1) • 微分方程式の初期条件等の条件を指定し ない場合、任意定数を含む一般解を求める。 • 必要な条件を定義することで任意定数を含 まない一般解を求めることができる。 dsolve({微分方程式, 初期条件}, 求める関数): 初期条件を定義して任意定数を含まない一般 解を求める。 常微分方程式の一般解(2) 入力 説明 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 コマンドを使用する。 psolve(微分方程式, 求める関数): 微分 方程式を解く 入力 説明 pdeq := diff(f(x,y), x); ∂ を入力 f (x, y) psolve(pdeq, f(x,y)); f(x,y)を求める ∂x 偏微分方程式の一般解(1) • 偏微分方程式は pdsolve コマンドで求めること ができる。 • 変数分離のヒントを与えることで他の解を求め ることもできる。 • buildオプションで解を組み立てた形式で求める pdsolve(微分方程式, 求める関数, ヒント, build) : 偏微分方程式を解く 偏微分方程式の一般解(2) 入力 説明 pdeq1 := diff(f(x,y), x) = 4*diff(f(x,y), y); 偏微分方程式を定義 する ∂ ∂ f (x, y) = 4 f (x, y) ∂x ∂y pdsolve(pdeq1, f(x,y)); 偏微分方程式を解く pdsolve(pdeq1, f(x,y), HINT=g(x)+h(y), build); 変数分離のヒントを 与えて解く 偏微分方程式の数値解 入力 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, ]me=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二次元プロットを作成 三角関数(1) • 三角関数を使うときは、単位はラジアン を使用し、sin(ラジアン)のようにする。 入力 説明 Ang := 180; 角度が180度の場合 sin(Ang); これではダメ sin(Ang*Pi/180); ラジアンに直す cos(2*Pi); tan(1/6*Pi); 三角関数(2) 入力 説明 arcsin(1/2); 逆関数を求めることもできる arccos(1/2); arctan(sqrt(3)); simplify(sin(x)^2+cos(x)^2, trig); 簡単化するにはsimplifyコマ ンドにtrigオプションを指定 eq := expand(cos(x+y)); 式を展開する combine(eq, trig); 元に戻すにはcombineコマ ンドにtrigオプションを指定 指数関数 • 指数関数は exp を使って表す exp(x): eのx乗を計算 exp(整数or有理数): 厳密に計算する exp(小数): 近似計算する 入力 説明 exp(2); 2 を厳密に計算 e exp(2.0); 近似計算 対数関数 • 対数関数は log または ln を使って表す log(x)、ln(x): log x を求める log[底の値](値): 対数関数の底の値を指 定する 入力 説明 log(2); ln(2); log2を厳密に計算 log(2.0); ln(2.0); log2を近似計算 log[4](256); log 4 256 プログラミング 用語 変数: 数値や文字などを入れる箱のよう なもの。扱われるデータを一定期間記憶し て必要なときに利用出来る 引数: 関数などを呼び出すときに渡す値 戻り値: プログラム中の関数などが処理 を終了し、処理の結果として返す値 プログラミング 関数(1) • 自分で独自の関数を定義することが できる。 • x の関数 sin(x) を f と名付けf(x) = sin(x) と定義したいとき、 -‐>(ハイフ ン+不等号)を使って f := x -‐> sin(x); と書く。 プログラミング 関数(2) • 2変数の関数も同様に定義すること ができる。 • x と y の関数sqrt(x^2 + y^2) を g と名 付け、g(x, y) = sqrt(x^2 + y^2) と定義 したいとき g := (x, y) -‐> sqrt(x^2 + y^2); と書く。 プログラミング 関数(3) • 実際に入力して確かめてみよう。 入力 説明 f := x -‐> sin(x); f = sin(x) を定義する f(1/2*Pi); g := (x,y) -‐> sqrt(x^2 + y^2); g(0.5, 0.1); g = sqrt(x^2 + y^2) を定義する プログラミング 関数(4) 入力 説明 f1 := exp(x) * sin(x); 式を定義(≠関数) f2 := x -‐> f1; f2(0); 計算されない! • 一度計算した結果を関数として再利用する ときは unapply コマンドを使って関数を作 ることができる。 h := unapply(関数, 変数); プログラミング 関数(5) 入力 説明 f1 := exp(x) * sin(x); f1式を定義 f3 := unapply(f1, x); 関数f3(x) = f1式を定義 f3(0); 正しく計算される h := unapply(diff(sin(x), x), x); sin(x)をxで微分した結果を 関数hとして定義する h(1/3*Pi); プログラミング プロシージャ(1) • プロシージャ(手続き) proc による定義をするこ とで、複数の計算などをひとつにまとめることが できる。 変数 := proc(引数1, 引数2, ... , 引数n) 数式; end proc; とまとめて書く(shiK + returnで改行できる)。 変数(引数1, 引数2, … , 引数n); で呼び出し、処理結果を返す。 プログラミング プロシージャ(2) • プロシージャの内部だけで使用可能な変数 (局所変数)を用意することができる。 プロシージャの中で local 変数; と宣言することで使用できる。 ※proc内部で定義した局所変数は、外部から 利用することが出来ないので注意。 プログラミング プロシージャ(3) 入力 説明 f := proc(x,y,z) x^2 + y^2 + z^2; end proc; プロシージャを定義 f(1,2,3); 引数を指定して プロシージャを呼び出す プログラミング プロシージャ(4) 入力 説明 g := proc(eq, n) local t; t := expand((1-‐eq)^n); return(t); end proc; localで変数tを宣言。 return(t)とすることで、戻り値を tに指定することができる。 g(x, 2); g(x+y, 3); t; proc内部の局所変数tは 外部から使用できない。 プログラミング 繰り返し文(1) • パラメータ(変数)を動かしながら計算する場合 は、 for 文を使う。 for 変数 from 数1 to 数2 do 変数を数1〜数2まで 1ずつ増やしながら ここに書かれた処理を繰り返す end do; 数2の後に by 数3 を追記することで、繰り返しのス テップ幅(刻み幅)を変更出来る。 プログラミング 繰り返し文(2) • 例えば1から10までの合計を求めたい場合は 下のようにまとめて書く。(shiK + returnで改 行できる。end doまで書いてからreturnで実 行) 入力 s := 0; for k from 1 to 10 do s := s+k; end do プログラミング 繰り返し文(3) • 一行目:合計を入れる変数s(初期値は0)をつ くる。 • 二行目:変数kが1から10になるまで、forとend の間(三行目)を繰り返す。 • 三行目:sをs+kで上書きする(10回繰り返す)。 kは繰り返すたびに1ずつ勝手に増えるので、 sは最終的に1から10の合計になる。 プログラミング 繰り返し文(4) 入力 説明 s := 0: for k from 1522 to 1533 do s := s+k; end do 1522から1533までの合計を求 める s := 0: for k from 1 to 10 by 2 do s := s+k; end do 刻み幅を2に変えて、 1から10の間の 奇数の合計を求める プログラミング 繰り返し文(演習) • 0から30までの偶数の合計をfor 文を使って求めてみよう。 • 3から50までの3の倍数の積をfor 文を使って求めてみよう。
© Copyright 2024