Plot a for-loop with if-statements inside
2 次查看(过去 30 天)
显示 更早的评论
I have written three different functions for three different intervals on the variable r. I wrote the following code:
a = 1;
b = 2;
pv = 5*10^(-3);
Q = pv*((4*pi*b^3)/3) - pv*((4*pi*a^3)/3);
epsilon = 8.8541878176*10^(-12);
r = 0:0.01:10
hold on
for r = 0:0.01:10
if r<a
E = -(Q/(4*pi*epsilon*r^2));
elseif r>b
E = (Q/(4*pi*epsilon*r^2));
else a<r<b
E = (pv*r)/(3*epsilon) - (pv*a^3)/(3*r^2*epsilon);
end
plot(E,r,'r');
end
hold off
Now, this code does not yield a visable plot, it's just empy. I figured maybe I need to store E of every iteration of the loop in a matrix, but have found no way of solving it.
0 个评论
采纳的回答
Dave B
2022-2-7
You're not seeing anything because you're plotting 1001 lines, each of which has only one point. You can fix this by plotting them as markers, or by saving all the points to a vector and using one call to plot (vastly preferred approach). Additionally, the condition in your else statement doesn't do anything, and you have an assignment to the variable r which doesn't do anything, I've removed both below:
1001 line objects containing a marker (heavyweight solution):
a = 1;
b = 2;
pv = 5*10^(-3);
Q = pv*((4*pi*b^3)/3) - pv*((4*pi*a^3)/3);
epsilon = 8.8541878176*10^(-12);
hold on
for r = 0:0.01:10
if r<a
E = -(Q/(4*pi*epsilon*r^2));
elseif r>b
E = (Q/(4*pi*epsilon*r^2));
else %a<r<b
E = (pv*r)/(3*epsilon) - (pv*a^3)/(3*r^2*epsilon);
end
plot(E,r,'r.');
end
hold off
1 line object (lightweight solution):
clf
a = 1;
b = 2;
pv = 5*10^(-3);
Q = pv*((4*pi*b^3)/3) - pv*((4*pi*a^3)/3);
epsilon = 8.8541878176*10^(-12);
rr = 0:0.01:10;
E = nan(length(rr),1);
for i = 1:numel(rr)
r=rr(i);
if r<a
E(i) = -(Q/(4*pi*epsilon*r^2));
elseif r>b
E(i) = (Q/(4*pi*epsilon*r^2));
else %a<r<b
E(i) = (pv*r)/(3*epsilon) - (pv*a^3)/(3*r^2*epsilon);
end
end
plot(E,rr,'r');
0 个评论
更多回答(1 个)
Rik
2022-2-7
In this case you don't even need a loop:
a = 1;
b = 2;
pv = 5*10^(-3);
Q = pv*((4*pi*b^3)/3) - pv*((4*pi*a^3)/3);
epsilon = 8.8541878176*10^(-12);
r = 0:0.01:10;
E=NaN(size(r));
L1=r<a;
E(L1)=-(Q./(4*pi*epsilon*r(L1).^2));
L2=r>b;
E(L2)= (Q./(4*pi*epsilon*r(L2).^2));
L3=~(L1&L2);
E(L3)=(pv*r(L3))/(3*epsilon) - (pv*a^3)./(3*r(L3).^2*epsilon);
plot(E,r,'r');xlim([-20e11 2e11])
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Mathematics and Optimization 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!