思い付きです。
とにかく微分積分はしんどいです。(単に計算がですが)
常微分方程式とか与えられた式が複雑だとまったくやる気が起きないので、最終的にこいつを自動的にとくプログラムを作りたい。
・・・でも積分のほうはちょっと難しそうです。(そもそもいつも解けるわけではないので)
取りあえず微分ならアルゴリズムがつくれそうかな?
f(x) = (x+2x)2/3*(x+1)+(sin(log(x3))/cos(x2)-ex みたいな式が出てきたらまず
(x+2x)2/3*(x+1)
と(sin(log(x3))/cos(x2)
と-ex
に分けて
①取りあえず割り算を見つける
(sin(log(x3))/cos(x2)
こいつを
(sin(log(x3))*cos-1(x2)
こうして
②微分を始める
③まず掛け算が発生しているところを積の微分で分けてしまう
{(x+2x)2/3*(x+1)}' と
{(sin(log(x3))*cos-1(x2)}'
を
{(x+2x)2/3}'*(x+1)+(x+2x)2/3*(x+1)' と
{(sin(log(x3))}'*cos-1(x2)+(sin(log(x3))*{cos-1(x2)}'
みたいにして
④さらに分ける
結局ここまでの過程で残り微分しなければならないのは
(x+2x)2/3と(x+1)と(sin(log(x3))とcos-1(x2)と-exなわけだ。
⑤普通に微分する
ここまできたら合成関数微分をする前に普通に微分できるものを微分してしまう
この場合{-ex}'=-exと(x+1)'=1
が終了する
⑥合成関数微分を行う
sin cos log の中にx以外の式があったり、g(x)の何乗みたいなやつがいた場合合成関数微分をする
この場合
(x+2x)2/3と(sin(log(x3))とcos-1(x2)がこれにあたる
こいつらは
A2/3, sinB, C-1と置き換えて単純な微分をしさらに中身を微分する
2/3*(x+2x)-1/2*(x+2x)'
cos(log(x3)*(log(x3)'
-cos-2(x2)*{cos(x2)}'
⑦さらに残りの
(x+2x)
(log(x3)
{cos(x2)}
の部分を
①~⑦の処理を⑤の処理でとまるまで行う
⑧すべてが⑤で終わったら
まず合成関数の部分を掛け合わせ
それから+やーで分けた部分を あわせて返す
・・・という感じにすればいけそうかな?
結局この便利(?)な関数は
①項に分ける
②積の微分ができる
③単純な微分ができる
④合成関数を見つけられる
⑤自分自身を呼び出す
⑥結果組み合わせて返す
という感じの再帰関数で作ればよさそう。たぶんこれで高校レベルの微分なら解けるな。(何かマズイ気もするけれど)
・・・問題は積分だなぁ。どうやってコンピューターにパターンを選択させるかが一番難しそうな気がする・・・。
部分積分はまだ大体セオリーがあるけれど、部分分数分解とか置換積分とか結構テキトーにやるからなぁ
まあでも再帰関数作るのと文字列解析の練習になりそう
微分してくれるプログラムを考える
微分してくれるプログラムを考える
最後に編集したユーザー GRAM on 2010年11月26日(金) 13:52 [ 編集 1 回目 ]
Re: 微分してくれるプログラムを考える
よかったら、「数式処理ソフト Maxima」について http://atassyu.tripod.com/maxima/index.html をみてください。
Re: 微分してくれるプログラムを考える
> あたっしゅさん
コメントありがとうございます。
取り敢えずはこのソフトを参考にしていきたいと思います
コメントありがとうございます。
取り敢えずはこのソフトを参考にしていきたいと思います