• 締切済み

Maximaで微分演算子

知恵袋で聞いたらなぜか日本語が通じなかったので、okwaveにしました。 こっちならその都度捕捉できますし。 重複すいません。 数式処理システムMaximaで微分演算子を定義しようと思っています。 具体的には、1引数関数f(x)を受け取って、(例えば)x^2*f'(x)を返す関数d(f)を定義します。 理想的には、hoge(t):=sin(t);などとしたとき,d(hoge)(x)がx^2*cos(x)を返し、d(d(hoge))(p)がp^2*(2*p*cos(p)-p^2*sin(p))を返す、といった具合です。 素朴に思いつくのは、 d1(f,x):=x^2*diff(f(x),x); ですが、まずxも引数に取らねばならず、返り値が関数ではありません。 また、hoge(x):=sin(x);としてd1(hoge,5)などとすると、5^2*diff(sin(5),5)としてしまいます。 そこで、 d2(f,x):=subst(x,y,y^2*diff(f(y),y)); とすれば、先ほどの問題(d1(hoge,5))は解決しますが、やはり関数を返すのではなく値を返しています。 これだと、d2(d2(f,x),x)のようにできず、d2(lambda([x],d2(f,x)),x)としなければなりません。 d2(d2(d2(f)))とかだと、さらに面倒になります。 関数を返すために、lambdaを使って d3(f):=lambda([x],subst(x,y,y^2*diff(f(y),y))); としても、hoge(x):=sin(x);d3(hoge)(x)とすると、x^2*('diff(f(x),x,1))となります。 d1,d2については、うまくいかない理由は理解できるのですが、 d3についてはわかりません。 d3がうまくいかない理由と、当初の意図した関数はどうすれば実装できるのか、教えてください。 あと、n階微分ならdiff(f(x),x,n)とすれば良いですが、dをn回作用させる(つまり、d(d(...d(f)..))とする)にはどうすればよいでしょうか。やはり再帰しかないですかね。 Maximaの情報はググってもあまり出てこないので、誰か詳しい人、教えてください!

みんなの回答

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

"maxima define buildq" とかで検索してみたらどうですかね http://www.google.co.jp/search?hl=ja&q=maxima+define+buildq&lr=lang_ja

関連するQ&A