why is my plot not showing anything

48 ビュー (過去 30 日間)
lowcalorie
lowcalorie 2012 年 5 月 15 日
コメント済み: Walter Roberson 2022 年 8 月 20 日
clc
k = 8.9870e+009;
q1 = .000000024820;
q2 = .000005200901;
for r = [.10,.15,.20,.25,.30,.40];
f = (k*q1*q2)/r.^2
end
plot(r,f)
hold on
axis([0 .5 0 .2])
i want to plot f vs r
  2 件のコメント
Tanmay Varshney
Tanmay Varshney 2022 年 8 月 20 日
編集済み: Walter Roberson 2022 年 8 月 20 日
//Please tell why my graph is not plotting//
v0 = 6.2;
g = 9.81;
theta = 45*(pi/180);
y0 = 1.5;
Vx = v0* cos(theta);
t = linspace(0,2);
x = Vx * t ;
y = y0 + v0 * t * sin(theta) - 0.5 * g * t.^2;
for i=1:size(x,2)
if (i>1 && y(i)<=0)
break;
end
plot(x(i),y(i))
xlabel ('Horizontal Distance(m)')
ylabel ('Vertical Distance(m)')
hold on;
pause(0.05);
end
Walter Roberson
Walter Roberson 2022 年 8 月 20 日
plot() does not add lines to points that have already been drawn in previous calls. plot() only draws lines when during a single call there are two or more finite coordinates in a row.
Your plot() call is only drawing one point at a time, not two or more, so it is not going to draw lines.
  • you can record all of the output and plot after the calculation loop. This is recommended
  • you can leave the plot call but add a marker such as '+' so that it will draw each point
  • instead of plot() you could switch to animatedline() and addpoints()

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

採用された回答

Oleg Komarov
Oleg Komarov 2012 年 5 月 15 日
You are overwriting f at every iteration and in the end you just have one point.
plot(r,f)
will plot thus one point. If you look carefully you'll find it.
Try this, the vectorized code:
k = 8.9870e+009;
q1 = .000000024820;
q2 = .000005200901;
r = [.10,.15,.20,.25,.30,.40];
f = (k*q1*q2)./r.^2
plot(r,f)
hold on
axis([0 .5 0 .2])

その他の回答 (2 件)

Thomas
Thomas 2012 年 5 月 15 日
try
k = 8.9870e+009;
q1 = .000000024820;
q2 = .000005200901;
r = [.10,.15,.20,.25,.30,.40];
for count=1:numel(r)
f(count) = (k*q1*q2)/r(count).^2 % save f as array
end
plot(r,f)
hold on
axis([0 .5 0 .2])
You were not saving f as array and hence were only plotting one f and one r pair..
You can avoid the loop totally as well using:
f = (k*q1*q2)/r.^2;
plot(r,f)
  1 件のコメント
lowcalorie
lowcalorie 2012 年 5 月 15 日
ok thanks

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


rajdeep singh
rajdeep singh 2020 年 2 月 9 日
What is r is a function of random numbers? Like data points
  1 件のコメント
Walter Roberson
Walter Roberson 2020 年 2 月 9 日
Oleg's and Thomas's solutions do not care how you create r and do not care whether r is sorted.
The one thing to watch out for if r is not sorted is that because by default plot() connects points that are adjacent in data order, you would get a lot of lines back and forth across the screen. sorting on r prevents that problem.
for idx=1:10
r(idx) = rand() ;
f(idx) = (k*q1*q2)/r(idx).^2;
end
[sr, sidx] = sort(r) ;
sf = f(sidx);
plot(sr, sf)

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

カテゴリ

Help Center および File ExchangeLine Plots についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by