3次関数について
7 views (last 30 days)
Show older comments
matlabで次の3次関数の式をプロットしたいのですが,3次関数と認識してくれません.式の書き方が間違えているのでしょうか.ご教授お願いします.
元の式:y=x(1-x)(x+q)/f(x-q) ここでのf,qの値は適宜変化していくのですが,f=1,q=10^-5としました.コードは以下のように入力しました.

8 Comments
stozaki
on 2 Oct 2020
追記致します。
回答に記載しましたが、前回記載頂いた式z = (x(1-x)(x+q))/(x-q)のqの符号が今回と異なる事が一番の原因かと思います。詳細は回答確認頂けますでしょうか?
Answers (1)
stozaki
on 2 Oct 2020
Edited: stozaki
on 2 Oct 2020
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次近似のように見えますね....背景わからないのですみません。
See Also
Categories
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!