- 締切済み
数式処理ソフトmaximaの簡易処理について
maximaによる初等的な数式処理なのですが、以下の点で動作が理解できないのです。 f(x):=1+x+x^2+x^3+x^4; 式の定義 g(x):=diff(f(x),x); その微分した式を定義 f(0); 具体的な値の確認 g(0); 具体的な値の確認 ここでエラー g(x); 関数がちゃんと定義できるか再確認 4*x^3+3*x^2+2*x+1 式としてg(x)は問題なく出力されています。なのに関数値 g(0)が出力できません。 式の微分を新たな式として受け取って処理するという自然な処理なのですが。 確かにg(x)の定義(第2式)には微分が含まれているのでそれを評価しようとしたらおかしなことになるのかなと思いますが。 なお、さらに複雑な処理であるg(x)=0の方程式を解くsolve(g(x)=0,x)は正しい動作をするようです。微分によって定義された関数g(x)をスムーズに受け取って関数値を問題なく出力する方法を教えてください。(関数値が出ないということはやはり基本的におかしいはずなので) よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
回答No.3です。 > g(0); 具体的な値の確認 ここでエラー エラーメッセージを見ると > diff: second argument must be a variable; found 0 > #0: g(x=0) というメッセージがでているはずです。 これは、g(0)が diff(f(x),0); と解釈されているので、二番目の引数が変数でないといけないと言われているのです。 g(x):=4*x^3+3*x^2+2*x+1 と同じではないということです。
at(g(x), [x=0]); とする。
お礼
回答ありがとうございます。 この方法で処理できました。以下のようです。 f(x):=1+x+x^2+x^3+x^4; 式の定義 g(x):=diff(f(x),x); その微分した式を定義 f(0); 値1の確認 g(0); 具体的な値の確認 ここでエラー at(g(x), [x=0]); 値1の確認 at(f(x),[x=0]); でも確認できました。fとgの違いの原因は何でしょうか。 ノートで手書きする場合、fとgの違いはないはずですが。 ここが理解できないといずれまた思い通りにならない問題に直面しそうですが。
- info222_
- ベストアンサー率61% (1053/1707)
WxMaximaを使っています。 僕なら以下のようにやります。 (%i01) f:1+x+x^2+x^3+x^4; g:diff(f,x); ev(f,x=0); ev(g,x=0); (%o1) x^4+x^3+x^2+x+1 (%o2) 4*x^3+3*x^2+2*x+1 (%o3) 1 (%o4) 1
お礼
回答ありがとうございます。いろいろ試して確認したのですが、 f:1+x+x^2+x^3+x^4;とf(x):=1+x+x^2+x^3+x^4;は別物ということなのでしょうか。どちらかというと後者の方がノートの取り方に近いと思います。 また、 f:=1+x+x^2+x^3+x^4; はエラーになります。 さらにgの方(gの定義とか)まで絡んでくると複雑になってきます。 ソフトの利用方法のルールということですが、どのように理解するとわかりやすいでしょうか。わかりやすいとは、ルールをすべて覚えるのではなく、原理を理解して応用していくということですが。
- hue2011
- ベストアンサー率38% (2801/7250)
diff(f(x),x)というのは、ふつうの微分式で書くとどうでしょうか。 d --- f(x) dx と違いますか。 これに対してx=0という値をあたえたらどうなりますか。 0で割り算をしていることになりませんか。 dxだから違う、と言われるかもしれませんが、スタート地点でゼロから始めたらコンピュータ処理的には苦情を言って当然じゃないですか。 そういうことを工夫する必要があるんじゃないでしょうか。
お礼
回答ありがとうございます。 ご指摘の点はx=0だからおかしいのであり、x=0.1だったら問題ないのではないか?ということでしょうか。 f(x):=1+x+x^2+x^3+x^4; g(x):=diff(f(x),x); f(0.1); g(0.1); ←やはりここではエラーになりますが。 また、 d --- f(x) dx をg(x)で受けるという処理がうまくいかないようです。g(x):=を---f(x)の左に入れることができないのかなと思いますが。なお、g(x):=を入れず、このままだけだったら微分が出力されることは確認しました。
お礼
回答ありがとうございます。 g(x)はf(x)を微分した式の結果ではなく、g(x)を生成する過程であるdiff()の方になるということですね。 数式処理ソフトのこのあたりのルールがノートに式を展開しているイメージとのギャップになるような気がします。鉛筆でノートに式を展開して行く過程は結果の直列つなぎとなっていてある結果を受けて、別の処理に回すということであり、式の生成過程が残り続けるというのはやりにくい感じです。