「Maxima」を活用して数学の学習ロードを駆け抜けよう!
(注) MathJaxを使用しているので、 スマホでは表示に時間がかかることがあります。
モバイル利用(Android)でのメニュー選択は、 SiteMapを利用するか、 「長押し」から「新しいタブを開く」を選択してください。![]()
■ 数式処理ソフト「Maxima」を活用した数学学習 [Map] |
| ||||
| ||||
[御案内] 「Maxima」(マキシマ)は,フリーの数式処理ソフトです. 有料の Mathematica や Maple に劣らないレベルの数式処理が可能であり, Linux,Windows,MacOSのみならず,Android版もあります. ここでは,数学学習での Maxima の活用法について解説します. | ||||
[お知らせ] スマホ(Android)版Maximaの解説本を出版しました. 計算問題やグラフの確認をするときに非常に重宝します. フリーソフトなので一度試してみてください. PC版のコマンドレファランスとしても利用できます。
| ||||
|
■数学学習での活用 |
|
式の変形 |
最初の例示画面にあるように,
式の展開(expand)や因数分解(factor)を行うことができます.
「factor」は整数係数での因数分解を行い,
整数係数で分解できないときは式がそのまま返されます. 複数の文字を含む式を一つの文字で整理するには,「rat」を利用します. 下記では,\(\small (x+y+z)^2\) を展開して \(\small y\) について 整理しています.「%」は直前の展開式を表します. 「rat((x+y+z)^2, y)」としてもかまいません.
|
微分積分 |
最初の例示画面にあるように,
関数の微分(diff)や積分(integrate)の計算を行うことができます.
下記では,\(\small \sin^3(2x)\) の \(\small x=\pi/3\) での微分係数の
値を求めています.円周率 \(\small \pi\) は「%pi」で表します.
(%i7)の「%」は,直前の結果である(%o6)の微分結果を表します.
|
|
線形代数 |
冒頭の例示画面で紹介したように,
行列に関して行列式や固有値の計算をすることができます.
下図では,行列の積や逆行列の計算が行われています.
2次以上の次数でもかまいません.
M\(\small *\)Mとすると,行列としての積の計算ではなく,
対応する成分ごとの積が計算されます.
(%i7)では,「ratsimp」により式の簡略化が行われています.
「ratsimp(%)」とすることでもかまいません.
「%」は,直前の(%o6)に示されているMの逆行列を表します.
|
|
微分方程式 |
|
冒頭での画面例示にあるように,
Maximaには微分方程式の解析解を求めたり,
初期値問題を解くコマンドが用意されています.
「ode2」を利用すると1階と2階の常微分方程式の一般解を求めることができます.
得られた一般解に対して,「ic1」では1階の場合の初期条件,
「ic2」では2階の場合の初期条件を指定して特殊解が求められます.
■1階微分方程式 次に,この解で, たとえば「\(\small x=1, y=e\)」を満たす特殊解を求めてみましょう. 1階微分方程式の一般解から特殊解を求めるコマンドは「ic1」です. |
|
■解曲線と勾配場 これにより解は求められましたが,一体どのようなグラフなのでしょうか. 1階微分方程式は,多くの場合は \(\small \frac{dy}{dx}=(x, yの式)\) の形に表すことができます.(%i6) の式は \(\small \frac{dy}{dx}=\frac{y}{x-y}\) です.これは,解が分からなくても,点 \(\small (x,y)\) が与えられると, その点を通る解曲線の接線の傾きが分かることを意味します. したがって,格子点での接線を短く引けば, 解を表す具体的な式が求められなくても 解曲線の状況をある程度把握できることになります. そのような図を勾配場といいます. Maximaには,その勾配場を描画するパッケージ(plotdf)があります. それはデフォルトでは読み込まれないので, パッケージを読み込むコマンド「load」で明示的に読み込ませます. その上で,\(\small \frac{dy}{dx}=f(x,y)\) の勾配場を描画するには 「plotdf(f(x,y))」を実行します. 下図では,(%o13)の右半分は省略されています. 次に,(%i14)を実行すると,ちょっとの時間をおいて下図が表示されます. 最初から点を指定することもできます. 上記の画面をいったん閉じます. 例えば点 \(\small (1, e)\) を通る解曲線を描画するには, 改めて 「plotdf(y/(x-y), [trajectory_at, 1, 2.71828])$」として 具体的な数値で指定します.ここでは「%e」は使用できません. いずれにしろ,微分方程式は,単に解を求めるばかりではなく, そのグラフも同時に把握することが重要です.特に勾配場は, それを実際に手作業で描画するのは大変なので 通常の教科書で解説されることは少ないのですが, Maximaを利用すると微分方程式の解の式と勾配場の中でのグラフを 簡単に見ることができます.この機能は, 微分方程式の理解を大きく向上させることになるでしょう. |
|
■2階微分方程式 冒頭の例示画面にあるように, 定数係数の2階線形微分方程式の一般解も「ode2」で求めることができます. 初期値問題を解くときは「ic2」を利用します. 変数を増やして1階の連立微分方程式に直せば, 「plotdf」によりベクトル場を図示することもできます. なお,「ode2」で解けるのは2階までです.3階以上には対応していません. 微分方程式の解を求めるコマンドには, 「ode2」の他に「desolve」があります. 「desolve」はラプラス変換を利用して解を求めます. 例えば,\(\small x''+x=t\) の解を求めるには,次のようにします. 「ode2」の場合は一般解を求めてから初期条件を与えますが, 「desolve」で特殊解を求めるには, 「desolve」を実行する前に与える必要があります.初期条件の指定は 「atvalue」により行います.この微分方程式を, たとえば「\(\small x(0)=1,~x'(0)=4\) 」 という初期条件のもとで解くには次のようにします.
■連立微分方程式 \(\small y(t)=\frac{(y(0)+3x(0))e^{3t}}{4} +\frac{(3y(0)-x(0))e^{-t}}{4}\) たとえば,\(\small x(0)=1, y(0)=1 \) という条件のもとでの解を求めるには, 「atvalue」により初期値を指定してから,改めて「desolve」を実行します. 同様にして,3元以上の場合の解も求めることができます. |
|
フーリエ解析 |
|
Maximaには,
フーリエ級数やフーリエ変換を求めるパッケージも備わっています.
その機能はデフォルトでは読み込まれていないので,
最初に「load(fourie)」または「load("fourie")」を実行して
パッケージを読み込ませます.
(「fourier」ではありません.)
それにより,フーリエ係数やフーリエ級数の式,グラフ化,
そしてフーリエ変換を求めることができます.
★所持しているスマホやタブレットがAndroidの場合は, 「Maxima on Android」というアプリを組み込めば スマホやタブレットでもフーリエ解析の計算ができることになります!
■フーリエ級数とフーリエ係数 |
|
■単位ステップ関数のフーリエ級数 項数を変えながらのグラフを鑑賞するため, 関数 \(\small g(x,n)\) を(%i12)のように定義して, plot2dを利用してグラフを描いてみましょう. (%o9)にはフーリエ係数がまとめられています. plot2dでは,関数を [ ] 内に続けて指定すると複数のグラフが描画されます. |
|
■フーリエ余弦級数・フーリエ正弦級数 ここまでは,定義域が \(\small [-p, p]\) の関数を周期 \(\small 2p\) の 周期関数に拡大して考えています.定義域が \(\small [0, p]\) の場合に, それを偶関数や奇関数として定義域を \(\small [-p, p]\) にして 同様のことを考えるのが,フーリエ余弦級数やフーリエ正弦級数です. フーリエ余弦係数は「fourcos(f(x), x, p)」, フーリエ正弦係数は「foursin(f(x), x, p)」により求められます. たとえば,区間 \(\small [0, 1]\) で関数 \(\small f_2(x)=1-x\) を考えて, 区間 \(\small [-1, 1]\) に偶関数(even function)で拡張すると \(\small 1-|x|\) です. なお,(%i26)で改行しながら入力するには, TeXmacs+Maximaでは「Shift+Enter」, wxMaximaでは「Enter」です. \(\small f_2(x)=1-x\) を奇関数(odd function)で拡張すると \(\small \frac{|x|}{x}-x\) で表されます.フーリエ正弦係数と, そのグラフは次のようになります.凡例は,項数だけを示しました. |
|
■複素フーリエ級数 三角関数と指数関数は,一見すると全く関係がないように見えますが, 複素数まで考えると オイラーの公式 \(\small e^{i\theta}=\cos\theta+i\sin\theta\) により, これらの間には密接な関係性があります.オイラーの公式から, \[\small \displaystyle \cos\theta=\frac{e^{i\theta}+e^{-i\theta}}{2},\quad \sin\theta=\frac{e^{i\theta}-e^{-i\theta}}{2i}\] となり,実数の世界の三角関数は指数が純虚数の指数関数で表すことができるので, フーリエ級数は指数関数による級数で表すことができます. 実際,この関係を利用すると, \[\small\begin{align*} a_n\cos&\frac{n\pi x}{p}+b_n\sin\frac{n\pi x}{p}\\ &=\frac{a_n-ib_n}{2}e^{\frac{in\pi x}{p}}+\frac{a_n+ib_n}{2}e^{\frac{i(-n)\pi x}{p}}\end{align*}\] と変形できることから, \[\small c_0=a_0,~ c_n=\frac{a_n-ib_n}{2},~ c_{-n}=\frac{a_n+ib_n}{2}\] とおくと,\(\small f(x)\) のフーリエ級数は次の式で表すことができます. 関数 \(\small f(x)\) の複素フーリエ級数といいます. \[\small\displaystyle f(x)\sim\sum_{n=-\infty}^{\infty}c_ne^{\frac{in\pi x}{p}}\] この係数 \(\small c_n\) は,\(\small a_n\pm ib_n\) の箇所を 積分の式に直してオイラーの公式を利用すると,任意の整数に対して \[\small\displaystyle c_n=\frac1{2p}\int_{-p}^{p}f(x)e^{-\frac{in\pi x}{p}}\,dx\] となります.\(\small c_n\) を複素フーリエ係数といいます. 複素フーリエ係数が分かれば,実フーリエ係数は \[\small a_n=c_n+c_{-n},\quad b_n=i(c_n-c_{-n})\] により求めることができます. 以上の詳細は,フーリエ解析の書籍を参照してください. 「fourie」パッケージに,この複素フーリエ係数を求めるコマンドはありませんが, \(\small c_n\) は「integrate」により求めることができます. 次に,\(\small c(n)\) から \(\small a_n, b_n\) を求めてみましょう. 前述の計算では個別に式変形や簡略化を行っていますが, 面倒なので3つのコマンドを入れ子にしています. \(\small a_n=c_n+c_{-n},~b_n=i(c_n-c_{-n})\) を利用します. (%i35)では \(\small a_n\) を,(%i36)では \(\small b_n\) を求めています. 当然ながら,単位ステップ関数の箇所で 求めた値と一致します. |
|
■「integrate」での計算 念のため,「fourie」というパッケージを使用しないで, 積分を求める基本的なコマンドである「ingegrate」でどこまでが可能であるかを 調べてみましょう. たとえば, \[\small f(x)=x\qquad (-1\leq x\lt 1)\] を考えると,\(\small p=1\) であり奇関数であることから \(\small a_n=0\) なので \[\small \displaystyle b_n=\int_{-1}^{1}x\sin{n\pi x}\,dx\] を計算する必要があります.「integrate」を利用すると次のように計算されます. いろいろな計算を続けていくと, \(\small n\) が整数であることを宣言したかどうかを忘れてしまう場合があります. そのようなときは,「featurep」により確認することができます. 末尾に「p」がつくと真偽判定を行うコマンドになり, 真であれば「true」,偽であれば「false」が返されます. 整数であるという宣言を取り消すには,(%i6)のように「remove」を用います. 次に,絶対値関数を考えてみます. \[\small f(x)=|x|\qquad (-1\leq x\lt 1)\] この関数は偶関数なので \(\small b_n=0\) となり \(\small a_n\) だけを 求めることになりますが,下図の(%o8)のようにMaximaは積分式をそのまま返します. 絶対値関数(absolute function) \(\small |x|\) は「abs(x)」です. (%i14)では,指数関数で表された式を「demoivre」を利用して三角関数の式に直し, (%i15)ではそれを簡略化しています. この箇所では「fourie」というパッケージは読み込んでいないので, (%o15)に対して「foursimp」は効きません.自分で考えることにより, \(\small |x|\) のフーリエ余弦係数は \(\frac{2((-1)^n-1)}{n^2\pi^2}\) であることが分かります. フーリエ解析で扱う関数は, 不連続な点や微分可能ではない点を含む関数と三角関数との積の積分を 計算しなければならない場面が頻出します. そのような関数は絶対値や単位ステップ関数などを用いて表されることが多いので, そのたびに以上のようなことを行うのは面倒です. フーリエ解析を「integrate」だけで行うのは煩雑極まりないといえるでしょう. |
|
■フーリエ積分 フーリエ級数は, 有限区間で定義された関数を周期関数に拡張して考えたものですが, 実数全体で定義されて, 必ずしも周期関数とは限らない関数で同様のことを考えたのがフーリエ積分です. 関数 \(\small f(x)\) を実数全体で定義された関数とします. この関数の,区間 \(\small [-L, L]\) の部分が周期的に繰り返されるとして そのフーリエ級数を考えます. そのフーリエ級数で \(\small L\to \infty\) の場合を考えて, フーリエ係数に相当する式として得られるのがフーリエ変換です. このことを複素フーリエ級数で考えると,\(\small \lim\sum\) が含まれるので, フーリエ級数に相当する式は総和ではなく積分の式になり, \(\small f(x)\) は次の式で表されます. これを \(\small f(x)\) のフーリエ積分といいます. \[\small \displaystyle f(x)\sim\frac1{2}\int_{-\infty}^{\infty}F(\omega)e^{i\omega x}\,d\omega \quad \cdots\cdots (1)\] ここで,\(\small F(\omega)\) は次の式で表され, 複素フーリエ級数の \(\small c_n\) に相当する式です. \[\small \displaystyle F(\omega)=\frac1{\pi}\int_{-\infty}^{\infty}f(x)e^{-i\omega x}\,dx\quad \cdots\cdots (2)\] (2)の \(\small F(\omega)\) を 関数 \(\small f(x)\) の フーリエ変換 といいます. (1)の式を逆フーリエ変換ということもあります. なお,係数の \(\small 1/2, 1/\pi\) の値や位置は本により異なります. Maximaの出力結果を見ると, Maximaでは上記のように定めているように思われます. また,関数 \(\small f(x)\) は, このような無限積分が存在するための適当な条件のもとで考えることになります. (2)の積分変数を \(\small u\) に変えて(1)に代入して変形すると,(1)は 三角関数を用いた式に変形することができます. \[\small \displaystyle \int_{0}^{\infty} \left\{A(\omega)\cos\omega x+B(\omega)\sin\omega x\right\}\,d\omega\] ここで,\(\small A(\omega), B(\omega)\) がフーリエ係数に相当する式で フーリエ積分係数といい, 次の式で表されます. \[\small \displaystyle A(\omega)=\frac1{\pi}\int_{-\infty}^{\infty}f(u)\cos\omega u\,du\] \[\small \displaystyle B(\omega)=\frac1{\pi}\int_{-\infty}^{\infty}f(u)\sin\omega u\,du\] \(\small F(\omega)\) との間には,\(\small F(\omega)=A(\omega)-iB(\omega)\) という関係があります. \(\small f(x)\) が偶関数のときは \[\small \displaystyle f(x)\sim \int_0^{\infty}C(\omega)\cos\omega x\,d\omega\] \[\small \displaystyle C(\omega)=\frac2{\pi}\int_{0}^{\infty}f(u)\cos\omega u\,du\] \(\small f(x)\) が奇関数のときは \[\small \displaystyle f(x)\sim \int_0^{\infty}S(\omega)\sin\omega x\,d\omega\] \[\small \displaystyle S(\omega)=\frac2{\pi}\int_{0}^{\infty}f(u)\sin\omega u\,du\] と表されます.\(\small C(\omega)\) をフーリエ余弦変換, \(\small S(\omega)\) をフーリエ正弦変換といいます. フーリエ変換 \(\small F(\omega)\) との関係は, 偶関数であれば \(\small C(\omega)=F(\omega)\) ですが, 奇関数のときは \(\small S(\omega)=iF(\omega)\) です. 「fourie」パッケージを読み込ませると, 「fourint(f(x),x)」により \(\small A(\omega), B(\omega)\) , 「fourintcos(f(x),x)」により \(\small C(\omega)\), 「fourintsin(f(x),x)」により \(\small S(\omega)\) が, それぞれ \(\small \omega\) の代わりに \(\small z\) を用いた式で求められます。 以上の詳細については,フーリエ解析の書籍を参照してください. フーリエ級数は,項数を増やすことで収束の様子を見ることができます. フーリエ積分でも, 積分範囲を広げていくことで収束の様子をみることができます. 以下に,幾つかの具体例でやってみましょう. 最初に「fourie」と「abs_integrate」を読み込み, 第二種不完全ガンマ関数が現れたら 簡単な式に変形するようにしておきます.また, 指定した範囲の関数を切り出す関数cut(x,a,b)を定義しておきます. 一方,フーリエ変換 \(\small F(\omega)\) を \[\small \displaystyle F(\omega)=\frac1{\pi}\int_{-\infty}^{\infty}f(x)e^{-i\omega x}\,dx\] により求めると,結果は指数関数を含む式で表されるはずです. そこで,(%o8)をオイラーの公式を利用して指数関数の形で表してみましょう. そのような変形をするコマンドは「exponentialize」です. 繰り返すと,(%o10)は \(\small F(\omega)=A(\omega)-iB(\omega)\) を 求めて指数関数に直した式で, (%o11)はフーリエ変換の定義式により直接積分して得られた式です. \(\small F(\omega)\) は,(%i11)の積分を \(\small \pi\) で割った式で 定めているので,2つの結果は一致していることが分かります. なお,\(\small \infty\) は「inf」,\(\small -\infty\) は「minf」です. 次に,同様のことを偶関数で行ってみましょう. (%i16)で定義した \(\small f_2(x)\) は次のような関数です. |
|
■フーリエ積分の収束の様子 フーリエ級数は,項数を増やすごとにもとの関数に近づいていくことを 見ることできて分かりやすいのですが, 無限積分で表されるフーリエ積分は,なかなかその意味を把握しにくいところです. 関数の変化の特徴を調べるのにフーリエ変換は重要な役割を果たしますが, その詳細はフーリエ解析の書籍を参照してください. ここでは,\(\small f_2(x)\) のフーリエ積分を考えて, 積分範囲を広げていくと元の関数に近づいていく様子を鑑賞してみましょう. まず,上記の計算結果から,\(\small f_2(x)\) は次の無限積分で表されます. \[\small \displaystyle f_2(x)=\int_0^{\infty}C(\omega)\cos{\omega x}\,d\omega\] \[\small \displaystyle C(\omega)=\frac2{\pi}\cdot\frac{1-\cos\omega}{\omega^2}\] \(\small f_2(x)\) は \(\small C(\omega)\) を代入すると次の式で表されます. \[\small \displaystyle \begin{align*} f_2(x)&=\frac2{\pi}\int_0^{\infty} \frac{(1-\cos\omega)\cos{\omega x}}{\omega^2}\,d\omega\\ &=\lim_{a\to\infty}\frac2{\pi}\int_0^a \frac{(1-\cos\omega)\cos{\omega x}}{\omega^2}\,d\omega \end{align*}\] 区間 \(\small [0, a]\) での積分の値を, この区間を \(\small n\) 等分した数値積分で計算して, \(\small a, n\) を大きくしていった場合を考えてみましょう. 区間 \(\small [0, a]\) を \(\small n\) 等分した分点を \(\small \omega_k\) とすると,\(\small \varDelta \omega=\frac{a}{n},~\omega_k=\frac{ka}{n}\) となるので,定積分の定義により \[\small\displaystyle \begin{align*} \frac2{\pi}&\int_0^a\frac{(1-\cos\omega)\cos{\omega x}}{\omega^2}\,d\omega\\ &=\lim_{n\to\infty}\frac2{\pi}\sum_{k=1}^{n} \frac{(1-\cos\omega_k)\cos{\omega_k x}}{\omega_k^2}\,\varDelta \omega\\ &=\lim_{n\to\infty}\frac2{\pi}\sum_{k=1}^{n} \frac{(1-\cos\frac{ka}{n})\cos{\frac{ka}{n} x}}{\left(\frac{ka}{n}\right)^2} \cdot\frac{a}{n}\\ \end{align*}\] となります.そこで, \[\small g(x,a,n,k)= \frac{(1-\cos\frac{ka}{n})\cos{\frac{ka}{n} x}}{\left(\frac{ka}{n}\right)^2} \cdot\frac{a}{n}\] \[\small g_2(x,a,n)=\frac2{\pi}\sum_{k=1}^{n}g(x,a,n,k)\] として定めて,\(\small x\) の値を変えるごとに \(\small g_2(x,a,n)\) の 値を求めてプロットしてみましょう. \(\small g_2(x,a,n)\) は,\(\small g(x,a,n,k)\) を定義済みとすると 次のように定義されます. g2(x,a,n):=(2/%pi)\(\small *\)sum(g(x,a,n,k),k,1,n) 区間 \(\small [-2, 2]\) で \(\small \varDelta \omega=0.1\) となるような 刻み幅で考えるものとします.\(\small a\to\infty\) ですが, 値を大きくすると計算時間もかかるので \(\small (a, n)\) の組合せは \(\small (2, 20), (3, 30), (5, 50)\) で考えてみます.連続関数としてではなく,指定された区間内の分点での \(\small g_2(x,a,n)\) の 値を繋いでいくことになります.このような離散的なグラフは, 「discrete」を指定して点 \(\small (x_i, y_i)\) を繋いでいくことで 描画されます. plot2d([discrete, 分点のリスト, 値のリスト], xの範囲, yの範囲) 積分の刻み幅を \(\small 0.1\) として, 区間 \(\small [-2, 2]\) の分点も同じ刻み幅で考えると, \(\small -2, -1.9, -1.8,\ldots, 2\) となりますが, この値の列(分点のリスト)は 「makelist(-2+0.1\(\small *\)i, i, 0, 40)」により生成されます. 対応する \(\small g_2(x,a,n)\) の値の列も同様の書式で 「makelist(g2(-2+0.1\(\small *\)i,a,n),i,0,40)」により生成されます. 下図は,\(\small f2(x)\) のグラフと,\(\small (a, n)\) が \(\small (2, 20), (3, 30), (5, 50)\) の場合のグラフを描画したものです. \(\small a\) の値が増えるごとに,つまり積分範囲が広がるごとに \(\small f_2(x)\) のグラフに近づいていくことが分かります.ちなみに,\(\small (a,n)=(5,50)\) の場合のグラフを描画するには, \(\small [-2,2]\) 内の40個の分点で \(\small g2(x,5,50)\) の値を計算する 必要があり,個々の \(\small g2(x,5,50)\) の値は 積分範囲 \(\small [0,5]\) での定積分の値を数値積分で \(\small n=50\) の和を求めて計算しています. \(\small a\to\infty\) であるからといって, \(\small a, n\) をあまり大きな値で試すと,最近のPCといえどもかなりの 計算時間がかかるので気をつけて下さい. |
|
ラプラス変換 |
|
■ラプラス変換と逆変換 ラプラス変換は,\(\small t\geq 0\) で定義された関数 \(\small f(t)\) に 対して次の無限積分で定義されます.\(\small s\) は複素数です. \(\small f(t)\) のラプラス変換を \(\small \mathcal{L}\left\{f(t)\right\}\) で表します. \[\small \mathcal{L}\left\{f(t)\right\}=\int_0^{\infty}f(t)e^{-st}\,dt=F(s)\] この積分を計算すると,\(\small f(t)\) に関する微分・積分の計算が \(\small F(s)\) では \(\small s\) を掛ける, \(\small s\) で割るということに対応します. \[\small \mathcal{L}\left\{f'(t)\right\}=sF(s)-f(0)\] \[\small \mathcal{L}\left\{\int_0^t{f(t)\,dt}\right\}=\frac1{s}F(s)\] したがって,\(\small f(t)\) に関する微分方程式や積分方程式が, ラプラス変換を行うと \(\small F(s)\) と \(\small s\) との単なる 乗除の代数式に変換されます. その代数式を解いて \(\small F(s)\) を求めて, ラプラス変換の逆計算をすることで \(\small f(t)\) を求めることができます. \(\small F(s)\) から \(\small f(t)\) を求めることをラプラス逆変換といい, 次の記号で表します. \[\small \mathcal{L}^{-1}\left\{F(s)\right\}=f(t)\] Maximaでは,関数 \(\small f(t)\) の ラプラス変換を求めるコマンドは「laplace(f(t),t,s)」, 逆ラプラス変換を求めるコマンドは「ilt(F(s),s,t)」です. |
|
■基本的関数のラプラス変換 以下に具体例を示します.新たなパッケージを読み込む必要はありません. (%i14) laplace('integrate(f(x)\(\small *\)g(t-x),x,0,t),t,s); (%o14)から,畳み込み積分について次のことが成り立ちます. \[\small \mathcal{L}\left\{f(t)*g(t)\right\} =\mathcal{L}\left\{f(t)\right\}\mathcal{L}\left\{g(t)\right\}\] |
|
■ラプラス逆変換 ラプラス変換 \(\small F(x)\) からもとの関数 \(\small f(t)\) を求めることを ラプラス逆変換といい \(\small \mathcal{L}^{-1}\left\{F(s)\right\}=f(t)\) で 表します.ラプラス逆変換のコマンドは「ilt」です. 通常は,基本的な関数の \(\small f(t)\) と \(\small F(s)\) との 対応関係を逆に見ることで計算します. 基本的関数のラプラス変換のラプラス逆変換を求めると,下図の通りです. (%i17)の計算はなされずコマンドがそのまま返されています. (%i13)と(%o13)の関係から, 本来は単位ステップ関数 unit_step(t) が返されるべきです. ラプラス変換の性質には \[\small \mathcal{L}\left\{f(t-a)\right\}=e^{-as}F(s)\] という性質があるので,\(\small e^{-as}/s\) の逆ラプラス変換は, \(\small 1/s\) の逆ラプラス変換を \(\small a\) だけ平行移動した関数です. そこで,(%i18)により \(\small 1/s\) の逆ラプラス変換を考えると \(\small \mathcal{L}^{-1}\left\{\frac1{s}\right\}=1\) となります. 単位ステップ関数(unit_step(t))である \(\small \Theta(t)\) としては表示されません. しかし,ラプラス変換での関数 \(\small f(t)\) は \(\small t\geq 0\) の場合を考え,\(\small t<0\) のときは「0」である関数を考えているので, (%o18)は, \(\small 1/s\) の逆ラプラス変換は単位ステップ関数 \(\small \Theta(t)\) であることを示しています.したがって, \(\small e^{-as}/s\) の逆変換は単位ステップ関数を \(\small a\) だけ 平行移動した関数 \(\small \Theta(t-a)\) であることが分かり,(%i13)と一致します. このように,全てをMaximaに任せないで, Maximaが結果を返さないときや,返ってきた結果に疑問を感じるときは, それを注意深く点検して自分で考えることが必要です. もう少し複雑にして, \[\small F(s)=\frac{s+1}{s^2(s^2+1)}\] の逆ラプラス変換を求めてみましょう. |
|
■微分方程式の解法 一般に,一つのシステムでは,いろいろなものが次々に変化していきます. 多くの場合,その変化は微分方程式で表されるので,そのシステムを解析するには 次々にいろいろな微分方程式の解を求めていく必要があります. そのために必要とされるのがラプラス変換です. 具体的に,1階線形微分方程式 \(\small ax'(t)+x(t)=\Theta(t),~x(0)=0\) を考えてみましょう.右辺は単位ステップ関数です. なお,(%i23)の右側が切れていますが, 「EQ: a\(\small *\)'diff(x(t),t)+x(t)=unit_step(t)$」です. 下図は,「x(t,a):=1-exp(-t/a)$」として関数 \(\small x(t,a)\) を 定義して,\(\small a=0.5, 1, 2\) の場合のグラフです. 「plot2d([x(t,0.5), x(t,1), x(t,2)],[t,0,4],[y,-1,2],[legend,"a=0.5","a=1","a=2"])$」により描画しています. \(\small a\) の値が小さいほど反応が早いことを示しています. 具体的な解を求めたら,そのグラフも確認するよう習慣づけた方が良いでしょう. 今度は,2階線形微分方程式 \(\small x''(t)+2x'(t)+10x(t)=\delta(t)\) を \(\small x(0)=0, x'(0)=0\) という初期条件で考えてみましょう. 右側が切れていますが,(%i30)と(%o33)は次の式です. (%i30) EQ:'diff(x(t),t,2) +2\(\small *\)'diff(x(t),t) +10\(\small *\)x(t)=delta(t)$ (%o33) \(\small \begin{align*} s^2\mathcal{L}(x(t),t,s)&+2s\mathcal{L}(x(t),t,s)\\ &+10\mathcal{L}(x(t),t,s)=1 \end{align*}\) plot2d(exp(-t)\(\small *\)sin(3\(\small*\)t)/3,[t,0,4],[y,-0.2,0.4])$ なお,ここでは関数の式が簡単なので式を直接入力していますが, (%o36)の式を関数 \(\small f(x)\) として定義するには, 「f(x):=%」では定義できません. 下図の(%o38)にあるように,「%」として定義されたことになります. 出力された式を関数として認識させるには, 「define」を用いて「define(f(t), %o36)」のようにします. 下図にあるように,その定義により \(\small t=0, \frac{\pi}{2}\) での値が正しく求められています. |
|