微積分
微分 | 可能な積分と不可能な積分 |
全微分 | 定積分 |
未知の関数の導関数 | 領域上の積分 |
導関数の表し方 | 記号代数的な積分操作 |
導関数の定義 | 微分方程式 |
積分法 | 積分変換と関連する演算 |
不定積分 | 一般化された関数と関連操作 |
D[f,x] | 偏導関数 |
D[f,x,y,…] | 多重偏導関数 |
D[f,{x,n}] | n 階の偏導関数 |
D[f,x,NonConstants->{v1,v2,…}] | vi が x に従属するとした上で を求める |
D[f,{{x1,x2,…}}] | スカラー関数の勾配 |
D[f,{{x1,x2,…},2}] | f のヘッセ行列 |
D[f,{{x1,x2,…},n}] | 級数 n のテイラー級数係数 |
D[{f1,f2,…},{{x1,x2,…}}] | ベクトル関数 f のヤコビ多項式 |
Dt[f] | 全微分 df |
Dt[f,x] | 全微分 |
Dt[f,x,y,…] | 多重の全微分 … f |
Dt[f,x,Constants->{c1,c2,…}] | ci を定数とする全微分(例 : dci=0) |
y/:Dt[y,x]=0 | 集合 =0 |
SetAttributes[c,Constant] | どんな場合でも c を定数とする |
ある式 を について微分するということは, の変化に応じた の変化の速さを求めることに相当する. は に限らず他の変数,例えば や 等に従属することもある.そのときの導関数がどうなるかは, が変化するにつれて と がどう変化するかにもよる.
2つの場合が考えられる. の変化について と が固定されている場合と, とともに変化する場合である.標準的な偏微分 では, 以外の変数は固定されているとみなされる.一方,全微分 では,すべての変数は の従属変数であるときも許される.
D[f,x] は偏微分を表し,すべての変数は x から独立しているものとされる.また,Dt[f,x] とすると,他の変数は x に依存しているとし全微分が計算される.ともに依存性に関する情報を引数の形で追加できるようになっている.
f '[x] | 単一の変数からなる関数の一階導関数 |
f(n)[x] | 単一の変数からなる関数の n 階導関数 |
f(n1,n2,… )[x] | 複数の変数からなる関数の導関数(i 番目の変数について ni 階の微分を取る) |
Wolframシステムの導関数は標準的な数学に現れる導関数と同じように使える.ただし,通常の数学表記は細かい点が省略されており,Wolframシステムにおける導関数の表し方を理解するには,細かい点も含めて考察する必要がある.
数学表記で導関数を と書くとき,正式には, を「ダミー変数」とした を意味する.同様に,と書けば,を意味する. の記述が示唆するように,オブジェクト は「純粋な関数」とみなせ,その値はパラメータ の値が決まると計算することができる.ある関数 を微分するということを,通常 と呼ばれる新たな関数を与える演算ととらえてもよい.
関数が複数の引数を持つときは,ダッシュ()を使った簡単な記述ができない.無理に,例えば,と記述しても,それが を表しているのか,または,なのか分からずじまいになってしまう.また,これらのオブジェクトは として実際に使う関数により値が違ってくるだろう.繰り返すようだが, とはダミー変数であり,それを使う理由は単に「どの位置」の変数に対して を微分するかを指定することにある.
特殊な数学の分野でそうであるように,Wolframシステムでも式ではなく関数に作用するとした微分操作を想定すると便利である.必要な操作内容は,関数 を抽出し, の導関数 を返すというものである.このように変数ではなく関数を操作することを数学用語で演算子と呼ぶ.
つまり,Wolframシステムで得られるオブジェクトf'とは,微分演算子を関数fに適用した結果を示している.f'を完全形で見ると,Derivative[1][f]となっている.Derivative[1]の部分が微分演算子に相当する.
演算子Derivative[n1,n2,…]に与える引数は,引数と同じ「位置」の変数に対して何階の微分を行うか指定する.演算子を使い微分を表しているので,Wolframシステムでは特別な「ダミー変数」を導入する必要はない.
Derivativeでは,各位置に対して何階の微分をするかだけを指定するため,微分の順序は関係ない:
f'は,基本的に他のWolframシステムの関数と同様に機能する.この関数は引数が何であっても評価可能だし,Wolframシステムの置換記号/.を使い引数を変えることも可能である.(ただし,微分の過程でダミー変数が特別に導入されるとこの操作は使えなくなる.)
導関数f'は,関数fの持つ構造により完全に決定される.f[x_]のような関数の定義は,そのままではf'[x]のような式に適用できない.これは,完全形ではf'[x]がDerivative[1][f][x]と表されるためにf[x_]のパターンにマッチできないからである.それでも,多くの場合,f'を単独の関数として扱い,引数を付けないでおいた方が便利である.
Wolframシステムで関数の微分をすると,f'を表す純関数の明示的な定義を検索しようと試みる.例えば,Derivative[1][f]の式を与えると,これがD[f[#],#]&という明示的な形にまず変換され,続いて,可能であれば導関数が評価される.明示的な形ができれば,直ちにf[x_]のような関数定義が使われ導関数が構成される.この微分操作がうまくいけば,関数定義をもとにした導関数が返ってくる.一方,微分演算がうまくいかないと,もとのf'のままで返される.
Tanの導関数が純粋な関数の形で返ってくる:
f'[x_]:=rhs | f の一階導関数を定義する |
Derivative[n][f][x_]:=rhs | f の n 階導関数を定義する |
Derivative[m,n,…][g][x_,_,…]:=rhs | |
複数の引数について g の導関数を定義する |
Wolfram言語は,標準的な数学関数であればほとんどどんな積分でもできる.ただし,被積分関数は簡単な関数しか含まないときでも,その積分は複雑な関数を取る場合がよくある.標準的な数学関数では全く表現できないことも少なくない.
Erf関数を含んだ積分の例:
Integrate[f,x] | 不定積分 ∫f dx |
Integrate[f,x,y] | 多重積分 ∫dx dy f |
Integrate[f,{x,xmin,xmax}] | 定積分 f dx |
Integrate[f,{x,xmin,xmax},{y,ymin,ymax}] | |
多重積分 dxdy f |
関数Integrate[f,x]は,不定積分 を返す.不定積分は微分の逆操作ととらえてもよいだろう.Integrate[f,x]で積分した結果を微分すると,必ずもとの式 f と数学的に等しい結果が得られる.
一般に,微分を取ると f になる関数はいくつも存在する.Integrate[f,x]はその内の1つにすぎない.微分した形が同じになる関数は任意の積分定数を加えたり,離散点以外では定数である任意の関数を加えることで他にいくらでも構成できる.
任意な定数を不定積分に加えても,微分すれば同じ形が得られる.Integrateは同じ導関数を持った関数の1つでしかない:
関数Integrateの機能の仕方として,積分変数に従属していることが明示的に示されていない関数または変数は,積分変数から独立しているとみなされ定数として扱われる.このため,Integrateは偏微分関数Dの逆関数のように機能する.
Integrateでは,さらに,積分式にある未知な項はすべて「一般的」な値を持つものとして扱われる.例えば,積分 を求めると,が求まる.これは,一般的な n の値では正解でよいが,の特殊な場合には間違いになってしまう.
ある積分をしたなら,結果として得られる式はいくつもの形で書き表すことが可能である.Wolfram言語はその中でも最も使いやすい形を見付けて返すようになっている.例えば,複素数で入力をしていなければ積分における複素数の明示的な提示はしない.
ArcTanが使われ積分が構成される:
今度は,積分にArcTanhが使われる:
Integrateは,最終的により単純な形にする:
積分における主な問題は,対象とする関数の原始関数を見付けるのが難しいことにある.微分をしたなら,必ず,微分する前の関数と同程度か,または,それより簡単な関数が取得できる.積分の場合はそうはいかず,通常は,もとの関数よりずっと難解な関数が必要になってしまう.
この例の積分を求めるには,特殊関数LogIntegralが必要になる:
Wolfram言語には数学で使う各種の関数が多数組み込まれている.これらの関数を使うことで,非常に多くの積分を求めることができる.それでも,一見簡単に見えるが実は難解で標準的な数学の関数では求まらない積分がいくつもある.
通常使われる関数の場合,指数関数や対数関数もしくは三角関数等の初等関数だけを使って積分が求まる.Integrateの重要な機能のひとつに,ある関数の積分がこのような初等関数だけで表されるとき,Integrateはその関数の積分を必ず見付けることができるというものがある.
このような積分はPiecewiseを用いて系統的に行うことができる:
Integrateでは,初等関数以外にも,多数のアルゴリズムが使われ特殊関数の積分が行われる.アルゴリズムのいくつかは初等関数のときの積分法を直接一般化した手法に基づいている.しかし,多くの場合,被積分関数を特殊な関数で表しておいて,その積分を求めた上で,適当に一般的によく知られている関数に帰着させる方法が取られる.
積分の公式を集めた本にはおよそ数千の不定積分が記載されている.Wolfram言語は基本的にそのすべての積分を計算できる.さらに,Wolfram言語には汎用アルゴリズムが備えられているので,特定の問題だけでなく非常に広範囲に渡る積分問題が解けるようにもなっている.
特に,ユーザ定義の数学関数を導入したなら,新しい種類の積分法をWolfram言語に教えておくとよいだろう.これはIntegrateに定義を付け加えることでできる.
微分の計算をする場合,合成関数の微分法を使えば,Wolfram言語のDerivativeを使って標準的な形の関数が得られる.しかし,積分の場合は,そのような標準形がないので,場合によっては同じ積分から得られるいくつかの変形版を特別に定義してやらなければいけない.また,Integrateを使っても,自動的な変数の変換や他の変換操作はなかなかうまくできない.
積分における主な問題は,対象とする関数の原始関数を見付けるのが難しいことにある.微分をしたなら,必ず,微分する前の関数と同程度か,または,それより簡単な関数が取得できる.積分の場合はそうはいかず,通常は,もとの関数よりずっと難解な関数が必要になってしまう.
この例の積分を求めるには,特殊関数LogIntegralが必要になる:
Wolfram言語には数学で使う各種の関数が多数組み込まれている.これらの関数を使うことで,非常に多くの積分を求めることができる.それでも,一見簡単に見えるが実は難解で標準的な数学の関数では求まらない積分がいくつもある.
通常使われる関数の場合,指数関数や対数関数もしくは三角関数等の初等関数だけを使って積分が求まる.Integrateの重要な機能のひとつに,ある関数の積分がこのような初等関数だけで表されるとき,Integrateはその関数の積分を必ず見付けることができるというものがある.
このような積分はPiecewiseを用いて系統的に行うことができる:
Integrateでは,初等関数以外にも,多数のアルゴリズムが使われ特殊関数の積分が行われる.アルゴリズムのいくつかは初等関数のときの積分法を直接一般化した手法に基づいている.しかし,多くの場合,被積分関数を特殊な関数で表しておいて,その積分を求めた上で,適当に一般的によく知られている関数に帰着させる方法が取られる.
積分の公式を集めた本にはおよそ数千の不定積分が記載されている.Wolfram言語は基本的にそのすべての積分を計算できる.さらに,Wolfram言語には汎用アルゴリズムが備えられているので,特定の問題だけでなく非常に広範囲に渡る積分問題が解けるようにもなっている.
特に,ユーザ定義の数学関数を導入したなら,新しい種類の積分法をWolfram言語に教えておくとよいだろう.これはIntegrateに定義を付け加えることでできる.
微分の計算をする場合,合成関数の微分法を使えば,Wolfram言語のDerivativeを使って標準的な形の関数が得られる.しかし,積分の場合は,そのような標準形がないので,場合によっては同じ積分から得られるいくつかの変形版を特別に定義してやらなければいけない.また,Integrateを使っても,自動的な変数の変換や他の変換操作はなかなかうまくできない.
不定積分が見付かったとしても,単に見付かった不定積分の上限と下限における値の差を取っただけでは定積分の値は求まらないことが多い.積分の領域によっては特異点が存在することがあり,この手順ではそのような特徴を見逃すことがあるからである.
Integrate[f,{x,xmin,xmax},PrincipalValue->True] | |
定積分のコーシー主値を求める |
不定積分がパラメータを含むとき,パラメータの取り得るほとんどすべての値に対して正しい結果となる式を求めることができる.しかし,定積分となるとその限りではない.定積分で見られる最もよくある問題は,パラメータが特別な条件を満たす場合に限って定積分が収束することがある,というものである.
オプション
|
デフォルト値
| |
GenerateConditions | Automatic | 条件式を生成するかしないかを指定する |
Assumptions | $Assumptions | パラメータに関する仮定を指定する |
Integrateのオプション
定積分が収束するときでも,積分路に特異点があればパラメータが変化すると不連続な変化が生じる.場合によっては,Signのような関数を組み込むことで不連続性を考慮した答を単一式にまとめることは可能だが,Ifを使った方がまとめやすい場合もある.
積分の収束条件がIfで与えられる:
Wolfram言語の関数DSolveを使って常微分方程式および偏微分方程式の解をシンボル的に求めることが可能である.
組込み関数DSolveは,関数規則として求まる解をリスト形式で返す.ここで,解が割り当てられる関数がどのように表されているかで,その先の解の応用が左右されることがある.DSolveにy[x]について解くように指定すると,DSolveは確かにy[x]についての規則を返す.問題によっては,この割付規則で十分事が足りる.ただし,そのままでは,y'[x]の値,さらには,y[0]の値さえも生成できない.このため,DSolveでは,y[x]についてではなくy自体について解くように指定した方が都合よくなる.そうすれば,DSolveからはyを純関数として与える規則が求まる.純関数に関しては「純関数」を参照のこと.
解をもとの方程式に代入するとTrueとなる:
標準的な数学表記法では,微分方程式の解を構成するとき,よく「ダミー変数」を導入し解に現れる関数の引数を表すようにする.解を表すための数式だけが必要なら,ダミー変数を導入することは確かに便利である.しかし,解をその他の計算に適用したい場合には,ダミー変数を使わずに純関数として解を得た方が有利だろう.ただし,純関数はWolfram言語では簡単に表せるが,それに直接相当する数学の標準的な記述は存在しないことに注意されたい.
DSolve[{eqn1,eqn2,…},{y1,y2,…},x] | |
リスト形式で与えられた連立微分方程式を解く |
制約条件や境界条件なしで連立微分方程式を解くと,Wolfram言語では一般解が求められる.一般解には未定な「積分定数」がいくつか含まれる.各方程式の持つ導関数の階数に応じて1つずつ新たな定数が導入される.
定数にはデフォルトでC[n]というように名前が付けられる.添数 n は開始値が1で,DSolveが使われるたびにリセットされる.これは,オプションGeneratedParametersを特別に設定することでオーバーライドすることができる.関数をオプションに割り当てると,DSolveが使われるたびにそれが n の取る各添数値に適用され各定数の添数が決定される.
しかし,微分方程式が2つ以上になるか,二次以上の導関数を持つと,その限りではなくなる.それでも,単純な二次の線形微分方程式によっては,「特殊関数」に示した各種特殊関数を使い解くことが可能である.事実,特殊関数の多くはそもそもこの種の方程式を解くために導入された,という歴史的な経緯を持っている.
二次より高次の線形微分方程式になると,ごく単純な形を持ったものでも解法に必要な関数は非常に難解になる.三次の場合,方程式によってはマイヤー(Meijer)のG関数MeijerGが使えるときがある.四次以上の高次方程式には,標準的な数学関数はごくまれなケースを除き全く使えない.
非線形な微分方程式だと,限られた特殊ケースにおいてだけ標準的な数学関数を使って解くことが可能である.ただし,DSolveには汎用的な手続きが使われているので,標準公式集に解が載っているような非線形微分方程式であればほとんど解けるようになっている.
実際に区分関数を使う微分方程式を用意すると便利である.そのような式に対してはDSolveを使い,記号的な解を得ることができる.
DSolveは一変数の常微分方程式だけでなく,2個以上の変数が現れる偏微分方程式も扱えるようになっている.
偏微分方程式の数学理論は常微分のそれと比べてかなり複雑である.そのひとつの理由は,常微分方程式の一般解は単に定数しか含まないのに対し,偏微分方程式の一般解は,見付かったとしても任意関数を含んだ形となることである.実際 変数の偏微分方程式の一般解には 変数の任意関数が含まれる.DSolveはデフォルトでこのような関数をC[n]で表す.
常微分方程式には解の存在が保証されており,初期条件あるいは境界条件を与えることは,一般解に含まれる積分定数の値を決定することに過ぎない.しかし偏微分方程式に関してはそうではない.実際,線形偏微分方程式かその他のまれな特別の型の偏微分方程式しかそのような一般解を持たない.
ラプラス変換
LaplaceTransform[expr,t,s] | 式 expr のラプラス変換 |
InverseLaplaceTransform[expr,s,t] | 式 expr の逆ラプラス変換 |
InverseLaplaceTransformはもとの関数を返す:
LaplaceTransform[expr,{t1,t2,…},{s1,s2,…}] | |
式 expr の多次元ラプラス変換 | |
InverseLaplaceTransform[expr,{s1,s2,…},{t1,t2,…}] | |
式 expr の多次元逆ラプラス変換 |
フーリエ変換
FourierTransform[expr,t,ω] | 式 expr のフーリエ変換 |
InverseFourierTransform[expr,ω,t] | 式 expr の逆フーリエ変換 |
科学技術分野では,分野によりフーリエ変換の定義に異なったさまざまな規約が用いられる.Wolfram言語のFourierParametersオプションで任意の規約を選択することができる.
共通規約
|
設定
|
フーリエ変換
|
逆フーリエ変換
|
Wolfram言語デフォルト |
{0,1}
| ||
純粋数学 |
{1,-1}
| ||
古典物理学 |
{-1,1}
| ||
現代物理学 |
{0,1}
| ||
システム工学 |
{1,-1}
| ||
信号処理 |
{0,-2Pi}
| ||
一般の場合 |
{a,b}
|
さまざまな規約のFourierParametersの典型的な設定
FourierSinTransform[expr,t,ω] | フーリエ正弦変換 |
FourierCosTransform[expr,t,ω] | フーリエ余弦変換 |
InverseFourierSinTransform[expr,ω,t] | |
逆フーリエ正弦変換 | |
InverseFourierCosTransform[expr,ω,t] | |
逆フーリエ余弦変換 |
FourierTransform[expr,{t1,t2,…},{ω1,ω2,…}] | |
式 expr の多次元フーリエ変換 | |
InverseFourierTransform[expr,{ω1,ω2,…},{t1,t2,…}] | |
式 expr の多次元逆フーリエ変換 | |
FourierSinTransform[expr,{t1,t2,…},{ω1,ω2,…}]
,
FourierCosTransform[expr,{t1,t2,…},{ω1,ω2,…}] | |
式 expr の多次元正弦,余弦フーリエ変換 | |
InverseFourierSinTransform[expr,{ω1,ω2,…},{t1,t2,…}]
,
InverseFourierCosTransform[expr,{ω1,ω2,…},{t1,t2,…}] | |
式 expr の多次元正弦および余弦逆フーリエ変換 |
Z変換
ZTransform[expr,n,z] | 式 expr のZ変換 |
InverseZTransform[expr,z,n] | 式 expr の逆Z変換 |
関数 のZ変換は, で与えられる.の逆Z変換は,線積分 で与えられる.Z変換は離散化されたラプラス変換に相当する.特にデジタル信号処理や制御理論等で差分方程式の解法に幅広く用いられている.これらは組合せ理論および数論でよく使用される生成関数を作成するものと考えられる.
実際問題では多くの場合,ある一定量のものが微小領域に集中しているような極限を考慮すると便利なことがある.微積分学で扱われる通常の数学的な関数では,このような極限を直ちに表すことができない.しかし,超関数を導入することによって,これらの極限を積分や他の計算形式で表すことができる.
DiracDelta[x] | ディラック(Dirac)のデルタ関数 |
HeavisideTheta[x] | の場合は0,の場合は1のヘビサイド(Heaviside)のシータ関数 |
DiracDeltaは 以外のすべての実数の点で0に評価する:
ヘビサイド関数HeavisideTheta[x]はデルタ関数の不定積分である.これは,,,および等で表される.一般化された関数として,ヘビサイド関数は積分内でのみ定義される.この点で,区分関数である単位階段関数UnitStep[x]と区別される.
ディラックのデルタ関数はDSolveで使用され,線形および他の微分方程式で表された系のインパルス応答やグリーン(Green)関数を見付けるのに使われる.
DiracDelta[x1,x2,…] | 多次元ディラックのデルタ関数 |
HeavisideTheta[x1,x2,…] | 多次元ヘビサイドのシータ関数 |
多次元ディラックのデルタ関数に関連するものとして離散デルタとクロネッカーのデルタの2つの整数関数がある.離散デルタ はすべての ならば1であり,その他の場合はゼロである.クロネッカーのデルタ は, がすべて等しければ1であり,その他の場合はゼロである.
DiscreteDelta[n1,n2,…] | 離散デルタ |
KroneckerDelta[n1,n2,…] | クロネッカーのデルタ |