MATLAB Answers

3次関数について

7 views (last 30 days)
Osaki
Osaki on 1 Oct 2020
Commented: Osaki on 5 Oct 2020
matlabで次の3次関数の式をプロットしたいのですが,3次関数と認識してくれません.式の書き方が間違えているのでしょうか.ご教授お願いします.
元の式:y=x(1-x)(x+q)/f(x-q) ここでのf,qの値は適宜変化していくのですが,f=1,q=10^-5としました.コードは以下のように入力しました.
  8 Comments
stozaki
stozaki on 2 Oct 2020
追記致します。
回答に記載しましたが、前回記載頂いた式z = (x(1-x)(x+q))/(x-q)のqの符号が今回と異なる事が一番の原因かと思います。詳細は回答確認頂けますでしょうか?

Sign in to comment.

Answers (1)

stozaki
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次近似のように見えますね....背景わからないのですみません。
  3 Comments
Osaki
Osaki on 5 Oct 2020
大変,凄く勉強になりました.今まで軽く考えていたxの刻みが直接的な原因になるとは思っていませんでした.stozaki様のおかげで思い描いていたグラフを表現することが出来ました.fplot技術については認知していたのですが,教えていただいて改めて有用性に気づきました.ここまで長い間,質問に答えてくださってありがとうございました!本当に感謝しています!

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!