|
Calculus`Integration`
このパッケージはIntegrateとNIntegrateを拡張して,区分的な代数不等式の論理結合によって暗示的に定義される領域上での重積分を計算するものである.また,Integrateを拡張して区分的関数も積分する.
領域の定義
このパッケージでは追加関数のBooleを定義する.この関数は,不等式の論理結合により定義される領域上の重積分を表すのに特に便利である.

特性関数Boole (Iverson's convention)
パッケージをロードする.
In[1]:= <<Calculus`Integration`
Boole関数をプロットする.
In[2]:= 

単位円の面積を求める.
In[3]:= 
Out[3]= 
ブール関数は1962年にK.E. Iversonが導入したので,Iverson's convention とも呼ばれる.Iversonは,ここで Boole[ineqs]と表しているものに対して[ineqs]という表記を使った.この関数は集合記述で積分と和分の記号に負担をかける必要なく,インラインの多重和・重積分を表すことができるということが最大の利点である.この関数は,論理条件によって表される任意の集合の特性関数に相当する.この表記法については[D.E. Knuth, American Mathematical Monthly 99 (1992), 403-422],[D.E. Knuth, The Art of Computer Programming—Fundamental Algorithms, Volume 1, Third Edition, 1997, Addison-Wesley],[R.L. Graham, D.E. Knuth, O. Patashnik, Concrete Mathematics—A Foundation for Computer Science, Second Edition, 1994, Addison-Wesley]を参照のこと.
領域のビジュアル化
積分を行う領域をビジュアル化すると便利なことがよくある.これは別の標準アドオンパッケージであるInqualityGraphics`を使うと簡単に実行できる.このパッケージと例題についてはGraphics`InequalityGraphics`をご覧いただきたい.
領域上の積分
ブール関数を使うと,ほとんどの積分問題が非常に簡単に表せるようになる.

不等式によって定義された領域上の多重積分
以下は の領域上で を積分する.
In[4]:= 
Out[4]= 
ブール関数を用いて上と同じ積分を表したものである.
In[5]:= 
Out[5]= 
積分問題の複雑性は,被積分関数の複雑性および積分を行う領域の複雑性に依存する.以下に挙げるのは,一般的なものであるがやや難しい積分問題である.
集合 上で を積分する.
In[6]:= 
Out[6]= 
集合 上で を積分する.
In[7]:= 
Out[7]= 
集合 上で を積分する.
In[8]:= 
Out[8]= 
集合 上で を積分する.
In[9]:= 
Out[9]= 
通常通り,記号積分ができなくても数値積分法は可能な場合がある.
以下では,積分が最終段階で失敗している.
In[10]:= 
Out[10]= 
通常通り,Nを適用して数値解を求めることができる.
In[11]:= N[ % ]
Out[11]= 
しかし,通常最初から数値法を使った方が速い.
In[12]:= 
Out[12]= 
記号積分がある段階で失敗する別の例である.ここでも数値法は使用できる.
In[13]:= 
Out[13]= 
積分の領域はBoole関数によって定義された領域と積分限界によって定義された領域との共通部分となる.以下に同じ積分問題を表す同等の方法を挙げる.
第一象限にある単位円の面積を計算する.
In[14]:= 
Out[14]= 
単位円には境界があり, を満足するので,以下も上と同じことを表していることになる.
In[15]:= 
Out[15]= 
区分的関数の積分
Calculus`Integration`を使うと,多種多様な区分的関数を積分することもできる.特に,この関数では領域上の積分をいくつかの同等な方法で表すことが可能である.

領域上での区分的関数の積分方法の種類
積分の限界が指定されていない場合は, から までと解釈される.
これは単位円上で を積分する.
In[16]:= 
Out[16]= 
上と同じ積分を別の方法で表したものである.
In[17]:= 
Out[17]= 
さらに別の方法である.
In[18]:= 
Out[18]= 
Boole,If,Whichを含む関数以外では,UnitStep,Abs,Sign, Min,Maxを含む関数も積分することができる.これらは代数関数あるいは多項式が現れるところならどこにでも現れる可能性がある.

積分問題で使うことのできる標準的な区分的関数
領域上でSign関数を積分する.
In[19]:= 
Out[19]= 
領域上でMax関数を積分する.
In[20]:= 
Out[20]= 
区分的関数はかなり不規則な形をしていることがよくある.例えば,以下はMaxをプロットしたものある.
In[21]:= 

区分的関数はネストされることもある.
In[22]:= 
Out[22]= 
規則的な区分的関数以外では,Floor,Ceiling,Round,IntegerPart,FractionalPart,Mod,Quotientを含む式も積分することができる.これらの関数は無限に多くの場合が考えられる事実上の区分的関数である.積分は引数の範囲が有限である領域上の場合に成功する.

他の区分的関数
Ceiling関数を積分する.
In[23]:= 
Out[23]= 
領域上でFloor関数を積分する.
In[24]:= 
Out[24]= 
ネストされた区分的関数である.
In[25]:= 
Out[25]= 
これらの区分的関数の中には,かなり複雑な挙動を見せるものもある.
In[26]:= 

上記の関数の積分である.
In[27]:= 
Out[27]= 
前述の通り,区分的関数はどこにでも出現し得る.特に領域の定義に使用することもできる.
区分的関数によって定義された領域上のネストした区分的関数の積分である.
In[28]:= 
Out[28]= 
この場合は,滑らかな関数でネストされた区分的関数をラップしている.
In[29]:= 
Out[29]= 
以下は領域 上での区分的多重積分である.
In[30]:= 
Out[30]= 
上記のような区分的関数および領域関数の性質が結合されると,積分問題は結果的にかなり複雑なものになる.
区分的関数の積分の性質の多くを組み合せる.
In[31]:= 
Out[31]= 
区分的関数の奇妙なネストである.
In[32]:= 
Out[32]= 
|