• ベストアンサー

微積分を機械的に行う方法を教えてください。

現在C言語でプログラムを組んでいるのですが、動的に式を保存することはできました。 しかし問題なのは、その式をどうやって微積分操作するかです。 微分は式に線形性がありデータベースと組み合わせることによって微分が可能だと分かりましたが、積分がどうしても分かりません。 アルゴリズムの詳細を知っている方、どうかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

極論すれば ・微分はデータがあれば機械的に計算可能 ・積分は (一般的に) 無理 です. 例えば, exp(x^2) の微分は exp の微分と x^2 の微分, それに合成関数の微分規則を使って機械的に処理することができます. しかし, exp(x^2) の原始関数を初等関数を使って表すことはできません.

tseest
質問者

補足

積分は無理ではありません。以下にあるように、機械的に行うことができるそうです。今回の質問はそれを実装しようというものです。 http://integrals.wolfram.com/index.jsp

その他の回答 (5)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.6

きっちりと「初等関数を使って」って書いたんだけどなぁ. それに, 「機械的にできるそうです」って書いてるけど, erfi の素性を知ってたらそうそうこんなことは言えないと思う. 本質的に exp(x^2) の原始関数を求めろ といったら 「微分したら exp(x^2) になる関数」 と答えてるようなものなんだけど, それでうれしい?

回答No.5

微分は計算規則に従えば機械的に演繹することができ、例えば超関数でも形式的には形を求めることができます。しかし積分を展開するのは難しく、初等関数の積分でもすぐに超関数が出てきます。数値的に求めるしかない積分のほうが多く、例えばゼータ関数やエータ関数などに現れる定数など、互いに異なる形式に変換可能だが積分の値は数値積分によるしかないものが多いです。 積分の歴史は発見法的に発達してきて懐が深いために現在でも発展途上で、次々に新しい関数や形式が生まれており、まだ統一的な関連をまとめたものはありません。そのためMathematicaでも現在知られている関数と積分の膨大なデータベースを作り、それを参照しています。 たとえば、定数係数の線型微分方程式は微分作用素を代数的に処理してあらかじめ作ってある積分との関係を当てはめるだけで解けますが、係数が定数でなかったり非同次になったりするととたんに難しくなり、べき級数展開、積分核変換、変分、摂動そのほかあらゆるテクニックを使っても解けていない問題が目白押しです。それらテクニックの適用でさえ発見法的である場合がほとんどです。 微分方程式を解こうとするものでなくとも、Mathematicaでちょっと入り組んだ初等関数の積分をためすと、データベースに無いものがすぐに見つかります。つまり、積分を展開する方法が知られていないものが非常に多い(多分無限にある)ということです。 結論として現在知られている積分を活用するのに最も良い方法は、おそらく一番充実しており、専門書や論文に現れた最新の方法を取り入れ続けているMathematicaのデータベースを利用することです。個人で手法を分類整理しようとしてもごく一部の簡単なものに留まらざるを得ないでしょう。 MathematicaとCのインタフェースはおそらくあると思いますので、調べて見られたらよいかと思います。

  • eroermine
  • ベストアンサー率18% (83/444)
回答No.4

Mathematica の開発には数学者が数百人以上かかわってたそうで、 ほとんどはデータ-ベースなんじゃないかなと。 GNUは元々はそういう数式処理システムを作るのが目的だとかrms自らどこかで昔語ってました。 現在C言語で というのが想像を絶しますが、 とりあえず lisp/scheme を読めないとソースがあっても

  • my3027
  • ベストアンサー率33% (495/1499)
回答No.3

私の理解では微分方程式(常微分はルンゲクッタやオイラー法)、偏微分は差分法や有限要素法で数値的に解くのが精度、効率的にもベストと理解しています。 微分方程式(強形式)は積分方程式(弱形式)に置き換え、数値的に解くのが一般的です。解析的に解ける方程式は非常に限られていますから。それとも限られた簡単な関数を解析的に解いたデータベースを作ってるという意味でしょうか?

tseest
質問者

補足

数値的に解くのではなく、式を微積分を行って変形させることが今回の目的です。 数値的に解くのが一般的であっても、今回の目的とは合致しないので難しいです。

  • my3027
  • ベストアンサー率33% (495/1499)
回答No.1

記載の内容はよくわかりませんが、積分に関して言えば解析的にでなく数値的に解く、シンプソンや台形の方法、ガウスの方法が一般的です。

tseest
質問者

お礼

解答ありがとうございます。しかし数値的に解くという事は連続的ではなく離散的に解くことと等しく、折角式操作の準備を進めてきた意味がありません。

関連するQ&A