...

Mapleの基本的な使い方

by user

on
Category: Documents
4

views

Report

Comments

Transcript

Mapleの基本的な使い方
2016年7月12日版
Mapleの基本的な使い方
担当: 荻田 武史
目次
1. 
2. 
3. 
4. 
5. 
6. 
7. 
8. 
9. 
10. 
11. 
12. 
13. 
入力方法 ... p.4 よく使う演算 ... p.11 式に値を代入 ... p.21 色々なデータ型(リスト・ベクトル等) ... p.33 式操作(展開・因数分解等) ... p.44 代数方程式 ... p.48 グラフを描く ... p.54 微分 ... p.62 積分 ... p.66 極限 ... p.71 常微分方程式 ... p.77 偏微分方程式 ... P.80 LaTeX形式への変換 ... p.84
2
Mapleとは?
•  数式処理や数値計算、グラフ作成な
どが出来るソフトウェア。 •  さっそくDockから起動してみよう。
3
入力方法(1)
•  Mapleの入力方法は2種類。 – テキスト入力:テキスト形式で入力。 – 数式入力:数式の形を組み立てながら
入力。 4
入力方法(2)
•  テキストとMathのボタンで入力方法
の切り替えができる。 ← ボタン →
テキスト入力
数式入力
5
入力方法を「テキスト」に固定する方法
画面上のメニューにある
Maple XXの「環境設定」を
選択
「表示」タブを選択
入力方法で 「テキスト」を 選択
「セッションに適用」
のボタンを押す
6
入力方法(3)
•  行の終わりに;(セミコロン)を付ける
と、その行を実行し結果を出力する。 •  行の終わりに:(コロン)を付けると、
その行を実行し結果を出力しない。 7
入力方法(4)
セミコロンをつけると 結果が表示される
コロンをつけると 結果が表示されない
8
ファイルの「保存」と「開く」
•  作業した内容をファイルに「保存」す
るには… – メニューバーの「ファイル」→「ワーク
シートとして保存」(新規保存) •  ファイルを「開く」ときは… – メニューバーの「ファイル」→「開く」 9
四則演算
•  入力例を実際に入力してみよう。 シンボル
説明
入力例
出力例
+ -­‐ / *
足し算
1 + 3;
4
引き算
1 -­‐ 3;
-­‐2
割り算
150 / 3; 7 / 3;
50 7/3
かけ算
2 * 510;
1020
10
よく使う演算
シンボル
説明
入力例
出力例
^ べき乗
2^3
8
sqrt 平方根
sqrt(2) evalf 浮動小数点(10進数)
で表示
evalf(7/3)
2.333333333
I (大文字のi)
虚数単位 2 + 3*I; (2 * I)^2;
2+3 I -­‐4
Pi
円周率π
evalf(Pi)
3.141592654
% %%
前の出力を使う 前の前の出力を使う
%; %%%;
2
11
変数への割り当て(1)
•  変数・・・扱われるデータを一定期間記
憶し、必要なときに利用出来るように
データに固有の名前を与えたもの。 •  Mapleではあらかじめ変数に値や数式
等を割り当てておくことができる。 → 毎回式を入力する必要なく、変数名
を使用して計算できる。 12
変数への割り当て(2)
•  変数への割り当てには、:=(コロン+イ
コール)を使用する。 •  変数に割り当てられているものを確認し
たい時は、変数名;(セミコロン) と入力
してEnterキーで実行する。 •  変数に何も割り当てられていない場合
は変数名が返される。 13
(例)変数への割り当て
•  順に入力して確かめてみよう。 入力
説明
a := 2; 変数aに2という値を割り当てる
b := sin(x)/x^2; sin ( x )
変数bに を割り当てる
2
x
a; b; 変数a、bに割り当てられているものを確認
c; 変数cに割り当てられているものを確認
a * b;
( )
を計算する
2×
2
sin x
x
14
変数の初期化(1)
•  割り当てた変数を初期化するには、
unassign または restart コマンドを使
用する。 unassign(‘変数名’): 特定の変数を初期
化する。 restart: Mapleを起動した時と同じ状態に
戻す(全ての変数を初期化)。 15
(例)変数の初期化
入力
説明
変数aを初期化
unassign(‘a’); 変数aとbを初期化
unassign(‘a’,’b’);
restart;
全ての変数を初期化
適当な変数に値を割り当てて、2つのコマ
ンドで初期化してみよう。 16
分数
•  分数に対して様々な処理ができる。 コマンド
説明
normal(式) 正規化する
numer(式) 分子を取り出す denom(式) 分母を取り出す rem(式1, 式2, 変数) 式1÷式2の余りを求める quo(式1, 式2, 変数) 式1÷式2の商を求める 17
(例)分数
入力
説明
eq1 := (x+y)/(x^3+y^3); eq2 := normal( eq1 ); 正規化する eq3 := (x^3+x+1)/(x^2 + x + 1); eq4 := numer( eq3); 分子を取り出す eq5 := denom( eq3 ); 分母を取り出す rem(eq4, eq5, x); 除算の余りを求める quo(eq4, eq5, x); 除算の商を求める 18
複素数
•  虚数単位は I (大文字のi)を使用する。 コマンド
説明
Re(式) 実部を取り出す
Im(式) 虚部を取り出す abs(式) 原点からの距離を求める
(絶対値) 19
(例)複素数
入力
説明
I^2; -­‐1
eq1 := 4 -­‐ 5*I; Re(eq1); 実部を求める Im(eq1); 虚部を求める abs(eq1); 原点からの距離を求める 20
式に値を代入
•  式に値を代入するにはsubsコマンドか
evalコマンドを使用する。 •  副次式を代入する場合にはalgsubsコマ
ンドを使用する。 コマンド
説明
subs(変数=値, 式) 式に値を代入する
eval(式, 変数=値) algsubs(副次式, 式) 副次式を代入する 21
(例)式に値を代入
入力
説明
subs(x=1, x^2+2*x+1); x^2+2*x+1にx=1を代入
eval(x^2+2*x+1, x=1); algsubs(a+b=1, a+b+c); a+b+cにa+b=1を代入 algsubs(a*b=2, a*b*c); a*b*cにa*b=2を代入 22
最大値と最小値、絶対値
•  入力した引数の中から、maxコマンドで
最大値、minコマンドで最小値を求める。 •  絶対値を求めるにはabsコマンドを使用
する。 コマンド
説明
max(値1,値2, … , 値n) 値1〜nの中の最大値を求める
min(値1,値2, … , 値n) 値1〜nの中の最小値を求める
abs(値) 値の絶対値を求める 23
(例)最大値・最小値、絶対値
入力
説明
max(1, 5 ,10, 2, 6); 入力した引数の最大値を求める
min(1, 5 ,10, 2, 6); 入力した引数の最小値を求める
abs(-­‐20); 絶対値を求める 24
整数の色々な演算
コマンド
factorial(整数1) 説明
整数1の階乗
入力例
factorial(5);
iquo(整数1,整数2) 整数の割り算の商 iquo(10,4); irem(整数1,整数2) 整数の割り算の余り irem(10,4); iroot(整数1,整数2) (整数2)のn乗が(整数1)に
最も近くなるときのn iroot(65,3); isqrt(整数1) 整数1の平方根に 最も近い整数 isqrt(99); modp(整数1, 整数2) 剰余 modp(100,3); igcd(整数1, 整数2) 最大公約数 igcd(123,45); ilcm(整数1, 整数2) 最小公倍数 Ilcm(6,8); 25
素数
•  素数に関する様々なコマンドがある。 コマンド
説明
ifactor(値) 素因数分解を行う
ithprime(値) 値が自然数kのとき、k番目の素
数を求める isprime(値) 値が素数かどうかを判定する。 素数の場合はtrue 素数でない場合はfalseを返す nextprime(値) prevprime(値) 指定した数の前後にある 素数を探す 26
(例)素数
入力
説明
ifactor(2014); 素因数分解をする
ifactor(27); ithprime(200); 200番目の素数を求める
isprime(37); 素数かどうか判定する
isprime(99); nextprime(100); 100の後にある素数を求める
prevprime(100); 100の前にある素数を求める
27
三角関数
•  三角関数を使うときは、単位はラジアン
を使用し、sin(ラジアン)のようにする。 入力
説明
Ang := 180; 角度が180度の場合
sin(Ang); これはNG sin(Ang*Pi/180); ラジアンに直す cos(2*Pi); tan(1/6*Pi); 28
(例)三角関数
入力
説明
arcsin(1/2); 逆関数を求めることもできる
arccos(1/2); arctan(sqrt(3)); simplify(sin(x)^2+cos(x)^2); 簡単化
eq := expand(cos(x+y)); 式を展開する combine(eq); 元に戻す 29
指数関数
•  指数関数は exp を使って表す exp(x): eのx乗を計算 exp(整数or有理数): 厳密に計算する exp(小数): 近似計算する 入力
説明
exp(2); 2
を厳密に計算
e
exp(2.0); 近似計算
30
対数関数
•  対数関数は log または ln を使って表す log(x)、ln(x): log x を求める log[底の値](値): 対数関数の底の値を指
定する 入力
説明
log(2); ln(2); log2を厳密に計算
log(2.0); ln(2.0); log2を近似計算
log[4](1024); log 4 1024
31
端数処理
コマンド
説明
入力例
round(値) 整数に丸める(四捨五入) round(1.3); ceil(値) 整数に丸める(切り上げ) ceil(1.3); floor(値) 整数に丸める(切り下げ) floor(1.8); trunc(値) 整数に丸める(切り捨て) trunc(-­‐4.2); trunc(4.2); 32
色々なデータ型
•  式や数式以外にもリストや集合、行列、ベクト
ルなどを扱うことができる。 データ型
説明
入力例
リスト 重複や順番も保持される
[a, b, c, d]; [b, a, d, a,c];
集合 重複しているものは一つになり、
順番は無視される
{a, b, c, d}; {b, b, d, a, c, a};
行列 線形代数演算
Matrix([[a, b], [c,d]]); ベクトル
行ベクトル、列ベクトルを扱うこと
ができる
Vector([a, b, c]); Vector[row]([a, b, c]);
33
リスト
•  リストの要素数を取り出すにはnopsコマンド、
データを取り出すにはopコマンドを使用する。 nops(リスト名): リストの要素数を求める op(リスト名) または p(番号, リスト名): リスト
のデータを取り出す。位置を指定することもで
きる。 変数名[番号]: 位置を指定してデータを取り出
す 34
(例)リスト
入力
説明
data := [[1,2], [3,4], [5,6]]; リストを作成
nops(data); データの個数を取り出す op(data); データを取り出す op(1,data); 1番目の要素を取り出す op(2, op(1,data)); [1,2]の2番目の要素を取り出す data[2]; 2番目の要素を取り出す 35
並び替え
•  sortコマンドで式やデータの並び替えが
できる。 入力 説明
eq := 1 + x^2 + x + x^3; sort(eq); 次数順に並び替え
data2 := [Banana, Apple, Lemon]; sort(data2); アルファベット順に 並び替え data3 := [1, 4, 3, 8, 5]; sort(data3); 小さい順に並び替え 36
総和と積(1)
•  総和はsumコマンドまたはaddコマンドで
求めることができる。
•  リストデータの和を求めることも出来る。 コマンド
説明
sum(変数, 変数=値1..値2) add(変数, 変数=値1..値2) 値1〜値2までの 総和を求める
リスト名 := [値1, 値2, … , 値n]; sum(リスト名[変数], 変数=1..n); add(リスト名[変数], 変数=1..n); リストの和を求める 37
総和と積(2)
•  積はproductコマンドまたはmulコマンド
で求めることができる。 •  リストデータの積を求めることも出来る。 コマンド
説明
product(変数, 変数=値1..値2) mul(変数, 変数=値1..値2) 値1〜値2までの 積を求める
リスト名 := [値1, 値2, … , 値n]; product(リスト名[変数], 変数=1..n); mul(リスト名[変数], 変数=1..n); リストの積を求める (n=値の個数) 38
(例)総和と積
入力
説明
sum(x, x=1..10); add(x, x=1..10); 1から10までの総和を求める
data := [2, 4, 6, 8, 10]; リストデータの作成
sum(data[i], i=1..5); リストの値の総和を求める sum(a*x^k, k=0..5); 変数を含む場合も 総和を求めることができる。 product(x, x=1..10); 1から10までの積
product(data[i], i=1..5); リストの値の積 39
行列
•  Matrix(3,3)で3*3の零行列が作れる。 •  行または列が10以上になる場合・・・青字の
出力の上でダブルクリックすると行列の要素
を確認できる。 青字をダブルクリック
でマトリックスブラウザ
が起動
40
行列の基本演算(1)
•  加算、減算はこれまでと同じように計算
できる。 •  行列同士のかけ算には .(ドット) 、行列
をスカラー倍するには * を使う。 •  逆行列は行列^(-­‐1)で求めることができる。 41
行列の基本演算(2)
コマンド
説明
Matrix([[a,b], [c,d]]); 行列を作成する
行列A + 行列B 足し算を行う
行列A – 行列B 引き算を行う 行列A . 行列B .(ドット)でかけ算を行う スカラー * 行列A 行列をスカラー倍する 行列A^(-­‐1) 逆行列を求める 42
(例)行列の基本演算
入力
mat1 := Matrix([[1, 2], [3, 4]]); 説明
mat2 := Matrix([[a, b], [c, d]]); mat1 + mat2; 足し算を求める
mat1 -­‐ mat2; 引き算を求める
mat1 . mat2; かけ算を求める
4*mat1; スカラー倍を求める
mat2^(-­‐1); 逆行列を求める
43
式操作:展開と因数分解
•  展開するにはexpandコマンド •  因数分解、部分分数分解するにはfactor
コマンドを使用する。 変数名 := expand(数式); factor(変数名); 44
(例)式操作:展開と因数分解
•  順に入力して試してみよう。 入力
説明
a1 := expand((x+2*y)^8);
(x+2*y)^8を展開
factor(a1);
a1を因数分解
a2 := (x+1)/(x+2);
expand(a2);
部分分数分解
45
その他の式操作(1)
コマンド
説明
入力例
simplify(式) 複雑な数式を見やす
く簡単化する
eq1 := 1/(1+1/(1+1/(1+x))); simplify(eq1);
csgn(式) 正負を求める
a := -­‐5; b := 3; csgn(a); csgn(b); coeff(多項式,
指定した次数の係数
を取り出す
eq2 := 6*z^3 -­‐ 5*z^2 + 2*z -­‐ 3*z + 4; coeff(eq2, z, 2);
lcoeff(式)
多項式に含まれる最
高次の係数を求める
lcoeff(eq2);
tcoeff(式)
多項式に含まれる最
低次の係数を求める
tcoeff(eq2);
変数名,次数) 46
その他の式操作(2)
コマンド
説明
入力例
degree(式) 多項式の最高次数を
求める
degree(eq2);
ldegree(式) 多項式の最低次数を
求める
ldegree(eq2); 47
代数方程式を解く
•  代数方程式を解くにはsolveコマンド、も
しくはfsolveコマンドを使用する。 solve(方程式, 解く変数): 厳密解を求め
る。 fsolve(方程式,解く変数): 近似解を求め
る。 48
(例)代数方程式を解く(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の近似解を求める
49
(例)代数方程式を解く(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);
50
漸化式を解く(1)
•  漸化式を解くにはrsolveコマンドを使用
する。 rsolve(漸化式, 初期条件) 入力
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));
51
漸化式を解く(2)
•  フィボナッチ数列を解いてみよう。 参考(hnp://ja.wikipedia.org/wiki/フィボナッチ数) " F0 = 1
$
# F1 = 1
$
% Fn+2 = Fn + Fn+1 ( n ≥ 0 )
52
漸化式を解く(3)
入力
fibo := {f(n)=f(n-­‐1)+f(n-­‐2), f(0)=1, f(1)=1}; rsolve(fibo, f(n)); 53
グラフを描く
•  Mapleでは2次元、3次元のグラフを
描くことができる。 plot : 二次元プロットを作成する。 plot3d : 三次元プロットを作成する。 54
2次元プロット(1)
•  二次元のグラフを描く plot(関数, 変数名=下限..上限) •  複数の関数を重ね書きする plot([関数1, 関数2], 変数名=下限..上限) ※標準では相対軸でのプロットを作成する。 絶対軸として確認する場合はオプションを追加す
る。 plot(関数, 変数=下限..上限, scaling=constrained); 55
2次元プロット(2)
•  媒介変数のプロットを作成する plot([横軸の関数, 縦軸の関数, 変数名=
下限..上限) •  座標点のプロットを作成する 座標点のリスト := [[x1,y1], [x2,y2],[x3,y3]]; plot(座標点のリスト); 56
(例)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);
座標点のリストを作成 座標点のグラフを描く
57
3次元プロット(1)
•  三次元のグラフを描く plot3d(関数, 横軸の範囲, 縦軸の範囲) •  複数の関数を重ね書きする plot([関数1, 関数2],横軸の範囲, 縦軸の
範囲) 58
3次元プロット(2)
•  重ね書きしたプロットの色を変更する plot([関数1, 関数2],横軸の範囲, 縦軸の
範囲, color=[色1, 色2]) •  媒介変数のプロットを作成する plot3d([横軸の関数, 縦軸の関数, 高さの
関数], 変数1の範囲, 変数2の範囲) 59
(例)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)], sin(x)*yを赤、 x=0..3, y=0..3, color=[red, blue]); 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) のグラフを描く
60
グラフのオプション
•  グラフをクリックするとグラフオプションを
変更するメニューバーが表示される。 plot 3dplot 色々と変更してみよう。 61
微分(1)
•  微分するには、diffコマンドを使用する。 diff(数式, 変数): 指定した変数で微分す
る。 Diff(数式, 変数): 微分を計算しない数式
の形式のまま扱う。このとき、value(変数)
で解を求めることが出来る。 62
微分(2)
•  複数回微分する場合や複数の変数で微
分する場合は、変数をカンマで区切って
追加する。 diff(数式, 変数1, 変数1): 指定した変数
で2階微分する。 diff(数式, 変数1, 変数2): 変数1と変数2
で微分する。 63
微分(3)
•  区分関数の微分をすることができる。 変数A = piecewise(区間1, 値1or関数1, 区
間2, 値2or関数2): 区分関数を定義する。 (※最後の値または関数の区間を指定しなかった場合、
otherwise(前の区間以外)として扱われる) diff(変数A, 変数x): 区分関数の変数Aを
変数xで微分する 64
(例)微分
入力
説明
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の解を求める
65
積分(1)
•  積分するには定積分、不定積分ともにintコ
マンドを使用する。 •  Mapleの不定積分では、任意定数は解に含
まれない。 int(数式, 変数): 指定した変数で不定積分を
行う。 int(数式, 変数 = 下限..上限): 指定した変数
と区間で定積分を行う。 66
積分(2)
•  複数回積分する場合はintコマンドをさらに
入力する必要がある。(微分のdiffとは違う
ので注意!) int(int(数式, 変数1), 変数1): 指定した変数で
2回積分する。 Int(数式, 変数): 積分を計算しない数式の形
式のまま扱う。微分同様、value(変数)で解を
求めることが出来る。 67
積分(3)
•  微分同様、区分関数の積分をすること
ができる。 変数A = piecewise(区間1, 値1or関数1, 区
間2, 値2or関数2): 区分関数を定義する。 int(変数A, 変数x): 区分関数の変数Aを
変数xで積分する 68
(例)積分(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)); 区分関数peqを定義 int(peq, x);
区分関数peqを積分する
69
(例)積分(2)
入力
説明
deq := Int(x^2+x, x); value(deq); 積分を計算しない形式で表示
deqの解を求める
int(ln(x), x); log(x)の不定積分
int(int(ln(x), x), x); log(x)をさらに積分する
70
極限
•  極限を行うには、limitコマンドを使用す
る。 limit(数式, 変数=値, オプション): (変数)
が(値)に近づくときの(数式)の極限値を計
算する。(※無限大はinfinityと記述する) オプションにrightまたはlerを指定すること
で右極限、左極限を求めることができる。 71
(例)極限
•  入力して確認してみよう 入力
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, ler);
左極限を求める
72
級数展開(1)
•  級数展開するにはseriesコマンドを使用
する。 series(数式, 変数=展開点): 6次までの多
項式に級数展開する。 series(数式, 変数=展開点, 次数): 指定し
た次数まで展開する 73
(例)級数展開
入力
説明
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する
74
数値積分
•  数値積分とは・・・与えられた関数の定
積分の値を数値的に求める。 evalf(Int(数式, 範囲)): 数値積分を行う その他、様々な数値積分の手法を指定す
ることができる。 75
(例)数値積分
入力
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));
76
常微分方程式
•  常微分方程式を入力するには diff コマ
ンドを使用する。 dsolve(微分方程式, 求める関数): 微分
方程式を解く 入力
説明
deq := diff(f(x), x); d
f (x) と入力する
dsolve(deq, f(x)); f(x)を求める dx
77
常微分方程式の一般解
•  微分方程式の初期条件等の条件を指定し
ない場合、任意定数を含む一般解を求める。 •  必要な条件を定義することで任意定数を含
まない一般解を求めることができる。 dsolve({微分方程式, 初期条件}, 求める関数): 初期条件を定義して任意定数を含まない一般
解を求める。 78
(例)常微分方程式の一般解
入力
説明
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);
適当な値を入力して 解を確認してみる
79
偏微分方程式
•  偏微分方程式を入力するには、常微分
方程式同様 diff コマンドを使用する。 pdsolve(微分方程式, 求める関数): 偏微
分方程式を解く 入力
説明
pdeq := diff(f(x,y), x); ∂
を入力
f (x, y)
pdsolve(pdeq, f(x,y)); f(x,y)を求める ∂x
80
偏微分方程式の一般解
•  偏微分方程式は pdsolve コマンドで求めること
ができる。 •  変数分離のヒントを与えることで他の解を求め
ることもできる。 •  buildオプションで解を組み立てた形式で求める pdsolve(微分方程式, 求める関数, ヒント, build) : 偏微分方程式を解く 81
(例)偏微分方程式の一般解
入力
説明
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);
変数分離のヒントを 与えて解く 82
(例)偏微分方程式の数値解
入力
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次元プロットを作成
83
LaTeX形式への変換
•  数式をLaTeX形式に変換するにはlatexコ
マンドを使用する。 入力
説明
eq := sin(x) / cos(x); latex(eq); LaTeX形式に変換
deq := Diff(sin(x),x) = diff(sin(x),x); latex(deq); 84
Fly UP