• 締切済み

数式処理ソフト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)をスムーズに受け取って関数値を問題なく出力する方法を教えてください。(関数値が出ないということはやはり基本的におかしいはずなので) よろしくお願いします。   

みんなの回答

noname#227064
noname#227064
回答No.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 と同じではないということです。

skmsk1941093
質問者

お礼

回答ありがとうございます。 g(x)はf(x)を微分した式の結果ではなく、g(x)を生成する過程であるdiff()の方になるということですね。 数式処理ソフトのこのあたりのルールがノートに式を展開しているイメージとのギャップになるような気がします。鉛筆でノートに式を展開して行く過程は結果の直列つなぎとなっていてある結果を受けて、別の処理に回すということであり、式の生成過程が残り続けるというのはやりにくい感じです。

noname#227064
noname#227064
回答No.3

at(g(x), [x=0]); とする。

skmsk1941093
質問者

お礼

回答ありがとうございます。 この方法で処理できました。以下のようです。 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)
回答No.2

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

skmsk1941093
質問者

お礼

回答ありがとうございます。いろいろ試して確認したのですが、 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% (2800/7250)
回答No.1

diff(f(x),x)というのは、ふつうの微分式で書くとどうでしょうか。 d --- f(x) dx と違いますか。 これに対してx=0という値をあたえたらどうなりますか。 0で割り算をしていることになりませんか。 dxだから違う、と言われるかもしれませんが、スタート地点でゼロから始めたらコンピュータ処理的には苦情を言って当然じゃないですか。 そういうことを工夫する必要があるんじゃないでしょうか。

skmsk1941093
質問者

お礼

回答ありがとうございます。 ご指摘の点は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):=を入れず、このままだけだったら微分が出力されることは確認しました。

関連するQ&A

  • 数式処理ソフトmaximaでの数値計算

    フリーソフトの数式処理ソフトMaximaで、ある式f(x)の値を求めるのに、たとえばx=1、2、3、・・・と代入していき、f(1)、f(2)、f(3)、・・・を求めた後、リストとしてそれらを出力させるにはどうすればよいのか、詳しい方ご教示ください。 (関数のグラフは描かせる方法は知っていますが、そのグラフ上の各点の値を知りたいということです。)

  • maxima の関数について

    maxima を使ってまだそんなに知識が無い者です。 ある1変数関数において、定義域を範囲指定しておき、 その定義域において最大値をとる場合の定義域の値を返してくれる関数とはあるのでしょうか? 説明が下手なので具体例を出しますと、 例えば、f(x) = x^3 + 2*x + 1 という式があるとして、 そこで定義域を仮に、 x = [ -3 , 5 ] とした場合、 この範囲においてf(x)が最大値をとる際の x座標の値を返すような関数が maxima にはあるのでしょうか? 万が一そう言った関数がない場合でもこの関数を組み合わせればできるといったような 助言を与えてくださる方がいましたら是非お願いします。

  • 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の情報はググってもあまり出てこないので、誰か詳しい人、教えてください!

  • maximaによるべき級数展開の処理について

    x^2 + ε*x-1について、 xのべき級数展開 x=x0 + x1*ε + x2*ε^2 + x3*ε^3 + x4*ε^4 + x5*ε^5 を代入します。式はεの関数であり、その他(x0,x1..)は定数です。 試しにε=0を代入すると、x0^2-1が出力されるはずです。 実際のmaximaの操作は以下の通りです。εをeとしています。 --- f(x,e):=x^2 + e*x-1; 式の定義 g(e):=subst(x=x0 + x1*e + x2*e^2 + x3*e^3 + x4*e^4 + x5*e^5,f(x,e)); べき級数展開を代入。eだけの関数g(e)が確定する。 g(0);eの関数であるg(e)においてe=0を求める(求める結果x0^2-1) 出力結果 f(x0,0)   expand(%);  展開かなと思ったので。 出力結果 f(x0,0) 思った解(x0^2-1)が出ません。f(x0,0)は元の式を見れば、それはx0^2-1であることは分かります。 f(x)にx=aを代入したものを示せと言ってf(a)ばかり出力されたのでは意味がありません。 所望の出力のためにはどのような処理が必要でしょうか。

  • maximaで複雑な微分ができない

    皆様よろしくお願いいたします。 フリーの数式処理ソフトmaximaで複雑な関数を微分してみましたが、 添付画像のように多項式近似なのでしょうか。 よくわからない式が出力されてしまいます。 これは無料ソフトの限界なのでしょうか。 それとも使い方が間違っているからなのでしょうか。 ご存知の方、いらっしゃいましたらご教示ください。 画像のT(x,t)は偏微分方程式 ∂T/∂t=a*∂^2T/∂x^2 の解で、maximaで解の正しさを確認できるか試しているところ、 基本的な微分ができずに困ってます。 因みに、微分の答えは以下です。 -(q0/(kA))*erfc(x/√(4at))

  • 数式処理システムMaximaで関数の定義を保存したいんですが

    最近数式処理システムMaximaを使い始めました。 自分で関数をいくつか定義して、それを保存しようと思ったのですが、File→Save as で保存すると、今までのログが全て保存されてしまいます。 もし、定数や関数の定義だけを保存する方法があれば教えてください。 よろしくお願いします。

  • maximaを使った2次方程式問題の処理と図化

    数式ソフトMaximaを使って、高校1年ぐらいの数学(2次式)の表示を考えています。y=f(x,a)という形式で、xについて2次式なのですが、その式の中にパラメータaが含まれています。aについても2次式ぐらいにはなっています。例えばy=0が重解となる場合のaだとか、虚数解になる場合のaの範囲だとかを求める問題です。良く有る問題と言えます。 例えばaを-10から10の範囲で0.01刻みで1000ケースぐらい描いてみるとそれだけでも相当傾向がつかめると思います。 f(x,a):=x^2-(a-1)^2*x+a^2-2*a; これで関数を定義 plot2d([f(x,a),[a,-10,10,0.01]],[x,-2,3]); aを-10~10まで0.01刻みで(-2<x,3)の範囲でグラフを描くというものですが、この書式ではエラーになります。 plot2d([f(x,0.1),f(x,0.5),f(x,0.6),f(x,0.7)],[x,-2,3]); ↑このように関数のリストを手入力すると、動きますがこの場合は4本だけです。これが1000本欲しいわけですね。 関数のリストを自動で作成してそれを使って大量にプロットするにはどうしたらよろしいでしょうか。 よろしくお願いします。

  • 数式処理システムMaximaで,行列の要素を数式として扱いたいのです.

    数式処理システムMaximaで,行列の要素を数式として扱いたいのです.たとえば,行列Aの要素は,A[1][1]とかで参照できますが,これを数式として,ある値を等値させた連立方程式A[1][1]=b1,A[1][2]=b2,,,を解くにはどうすればよいでしょうか.

  • Maximaが積分を行ってくれません

    Maximaで関数f(x)をxで不定積分しました。 するとf(x)の前に積分記号が付いただけの結果が出ます。(定積分の場合も同じで記号の上下に数値があるだけです) 単純な関数だと計算してくれます。 しかし、今回用いる関数が非常に複雑(指数eの肩に対数log、対数の中身も指数の分数・・など)(必要な場合はお教えします)なのですがそのような結果が出力されました。 積分能力が低いため複雑な関数は出来ないのでしょうか?積分する際の留意点などあるのでしょうか? よろしくお願いします。

  • Maxima-条件設定?

    x^2の平方根は±xですね?これをMaximaで計算すると、squr関数ではsqur(x^2)との答えしかかえって来ませんでしたので、^(1/2)としてみると、|x|という答えが返ってきました。 …話を簡単にするために、複雑な式であるものをxとして書きましたが、実はこの式の値は正であることに限定されています。すなわち、 「x^2の平方根を求めよ。ただし、x>0である。」 という問題の答えxを導きたいのですが、この但し書き以下のことをあらかじめ条件設定することは可能なのでしょうか?