Why is there a jagged line when I plot this function?

Hi guys,
I am trying to plot an implicit function and am getting strange results. I understand the smooth part of the function, but not the jagged part. Why is the jagged part there at all? Also, what can I do to eliminate it?
Here's the code:
f1=(@(x,y) (5.*y.^(1./2) -3)./(2.5.*y.^(1./2)+2.5.*x.^(1./2)-3)-y);
fimplicit(f1,[0 4 0 4],'black')

回答 (2 件)

tmarske
tmarske 2020 年 3 月 16 日

0 投票

It's because fimplicit is using too few evaluation points, resulting in too coarse an interpolation (by default it uses 151). You can override this using the 'MeshDensity' argument:
f1=(@(x,y) (5.*y.^(1./2) -3)./(2.5.*y.^(1./2)+2.5.*x.^(1./2)-3)-y);
fimplicit(f1,[0 4 0 4],'black', 'MeshDensity', 5000)

6 件のコメント

econogist
econogist 2020 年 3 月 16 日
Thanks for your response tmarske. So how can I eliminate that part of the plot completely? I don't want it to be smooth or jagged, I want to try to get rid of it entirely.
Walter Roberson
Walter Roberson 2020 年 3 月 16 日
What would you expect the result to look like? There are two lower-branch solutions for each x, and at some point they become equal and cross; what would you discard?
econogist
econogist 2020 年 3 月 16 日
I expected it to look like it does in the attachment done here in Desmos. Why does it look different here compared to Matlab?
Walter Roberson
Walter Roberson 2020 年 3 月 17 日
Ah, what is happening is that your function has a discontinuity in it, and what fimplicit is detecting is not a zero but rather a sign change.
econogist
econogist 2020 年 3 月 17 日
Thanks for that! I see what you mean. So is there anyway I can get rid of that part of the plot completely? I tried limiting the range, but that gets rid of the part I want as well.
Walter Roberson
Walter Roberson 2020 年 3 月 17 日
編集済み: Walter Roberson 2020 年 3 月 17 日
If you have the symbolic toolbox, you can solve f1 for x in term of y to get a single x for each y. you can then linspace() for y and put those through the equation to derive x, and then plot(x,y)

サインインしてコメントする。

econogist
econogist 2020 年 3 月 17 日

0 投票

I do have the symbolic toolbox. I'm trying to do what you said but still having some trouble as I'm new to matlab. I think I'm on the right track, but it's coming up with an error message.
Here is what I have so far:
syms x y
eqn=(5.*y.^(1/2) -3)./(2.5.*x.^(1./2)+2.5.*y.^(1/2)-3)==y;
S=solve(eqn, x);
y=linspace(0,100);
plot(S,y)

2 件のコメント

Walter Roberson
Walter Roberson 2020 年 3 月 17 日
plot(subs(S), y)
econogist
econogist 2020 年 3 月 19 日
Thank you! This worked great!

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeMathematics についてさらに検索

製品

リリース

R2018b

質問済み:

2020 年 3 月 16 日

コメント済み:

2020 年 3 月 19 日

Community Treasure Hunt

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

Start Hunting!

Translated by