質問: 3次関数について matlabで次の3次関数の式をプロットしたいのですが,3次関数と認識してくれません.式の書き方が間違えているのでしょうか.ご教授お願いします. 元の式:y=x(1-x)(x+q)/f(x-q) ここでのf,qの値は適宜変化していくのですが,f=1,q=10^-5としました.コードは以下のように入力しました.
回答: osaki 様 原因がわかりました。 分数関数の書き方について にてご質問を頂いた式において、z1=(x(1-x)(x-q))/(x+q); と定義されておりましたが、添付頂いた図の数式を解くと z = {x*(1-x)*(x+q)} / {f*(x-q)} がプログラムで実行されたい式だと思われますが、如何でしょうか? 従って、プログラムは以下のようになります。 q = 0.06; f = 2; x = 0:0.01:1; z = (x.*(1-x).*(x+q))./(f.*(x-q)); % 式a plot(x,z,'b:x'); 先に頂いた式では、qの符号が異なっていたことが一番の原因ではないでしょうか?また、乗除算は括弧を何処で括るかで計算結果が変わってしまいます。今回の例題では、./がfだけを割るのか、分母全体を割るのか?が最初記載されていた式だけでは見方が分かれるとことかと思います。(当初はf=1だったので、余計にわかりにくくなっていたのかと思います) 因みに式aと、先に示した式(以下式b)でも結果は同じになるかと思いますが、式aのほうが計算過程やプログラムとしてわかりやすいように思います。念の為計算過程を添付いたします。(拙い手書きで申し訳ございません) z1=x.*(1-x).*((x+q)./(2*(x-q))); % 式b z = (x.*(1-x).*(x+q))./(f.*(x-q)); % 式a ※ この式ですが、次数は3ですが、2次関数とか3次関数というよりも、双曲線関数か何かの3次近似のように見えますね....背景わからないのですみません。