Can't get plot to work

1 次查看(过去 30 天)
Hello Mathworks team!
I created this Euler's method code below but can't get the graph to show anything at all. Even if I make a separate code with just xn=1 yn=1, plot(xn,yn), the graph shows up but nothing on it. Any help would be much appreciated.
%Euler's Method
h=.25;%step size
xinitialcondition=0;%initial condition for x
yinitialcondition=1;%initial condition for y
n=0;%start at 0
xn=xinitialcondition;
yn=yinitialcondition;
f=@(xn,yn) (2*(cos(xn))*yn);%the function to be evaluated
while xn < 10%what value do you want it estimated to
xn = (xinitialcondition) + ((n) .* (h));
[n xn yn]
yn = (yn) + ((h) .* f(xn,yn));
if xn >= 10
break
end
plot(xn,yn,"r-")
hold on
n=n+1;
end
hold off

采纳的回答

Walter Roberson
Walter Roberson 2021-3-25
%Euler's Method
h=.25;%step size
xinitialcondition=0;%initial condition for x
yinitialcondition=1;%initial condition for y
n=0;%start at 0
xn=xinitialcondition;
yn=yinitialcondition;
f=@(xn,yn) (2*(cos(xn))*yn);%the function to be evaluated
while xn < 10%what value do you want it estimated to
xn = (xinitialcondition) + ((n) .* (h));
[n xn yn]
yn = (yn) + ((h) .* f(xn,yn));
if xn >= 10
break
end
plot(xn,yn,"r-*") %CHANGED
hold on
n=n+1;
end
ans = 1×3
0 0 1
ans = 1×3
1.0000 0.2500 1.5000
ans = 1×3
2.0000 0.5000 2.2267
ans = 1×3
3.0000 0.7500 3.2037
ans = 1×3
4.0000 1.0000 4.3758
ans = 1×3
5.0000 1.2500 5.5579
ans = 1×3
6.0000 1.5000 6.4342
ans = 1×3
7.0000 1.7500 6.6618
ans = 1×3
8.0000 2.0000 6.0681
ans = 1×3
9.0000 2.2500 4.8055
ans = 1×3
10.0000 2.5000 3.2961
ans = 1×3
11.0000 2.7500 1.9758
ans = 1×3
12.0000 3.0000 1.0627
ans = 1×3
13.0000 3.2500 0.5367
ans = 1×3
14.0000 3.5000 0.2699
ans = 1×3
15.0000 3.7500 0.1435
ans = 1×3
16.0000 4.0000 0.0846
ans = 1×3
17.0000 4.2500 0.0570
ans = 1×3
18.0000 4.5000 0.0443
ans = 1×3
19.0000 4.7500 0.0396
ans = 1×3
20.0000 5.0000 0.0403
ans = 1×3
21.0000 5.2500 0.0461
ans = 1×3
22.0000 5.5000 0.0579
ans = 1×3
23.0000 5.7500 0.0784
ans = 1×3
24.0000 6.0000 0.1121
ans = 1×3
25.0000 6.2500 0.1659
ans = 1×3
26.0000 6.5000 0.2489
ans = 1×3
27.0000 6.7500 0.3704
ans = 1×3
28.0000 7.0000 0.5358
ans = 1×3
29.0000 7.2500 0.7377
ans = 1×3
30.0000 7.5000 0.9472
ans = 1×3
31.0000 7.7500 1.1114
ans = 1×3
32.0000 8.0000 1.1691
ans = 1×3
33.0000 8.2500 1.0840
ans = 1×3
34.0000 8.5000 0.8749
ans = 1×3
35.0000 8.7500 0.6116
ans = 1×3
36.0000 9.0000 0.3728
ans = 1×3
37.0000 9.2500 0.2030
ans = 1×3
38.0000 9.5000 0.1030
ans = 1×3
39.0000 9.7500 0.0517
ans = 1×3
40.0000 10.0000 0.0272
hold off
  2 个评论
Walter Roberson
Walter Roberson 2021-3-25
plot() only draws a line if there are two adjacent finite values in the same call. You are only plotting one point at a time, so it cannot draw lines.

请先登录,再进行评论。

更多回答(1 个)

KSSV
KSSV 2021-3-25
Save into a Matrix and plot all at once:
%Euler's Method
h=.25;%step size
xinitialcondition=0;%initial condition for x
yinitialcondition=1;%initial condition for y
n=0;%start at 0
xn=xinitialcondition;
yn=yinitialcondition;
f=@(xn,yn) (2*(cos(xn))*yn);%the function to be evaluated
A = zeros([],2) ;
while xn < 10%what value do you want it estimated to
xn = (xinitialcondition) + ((n) .* (h));
yn = (yn) + ((h) .* f(xn,yn));
if xn >= 10
break
end
n=n+1;
A(n,:) = [xn yn] ;
end
plot(A(:,1),A(:,2))
  6 个评论
Matt Baron
Matt Baron 2021-3-27
Do I have the questions correct in bold below;
A = zeros([],2) ; %so this is like creating an empty matrix that will be x by 2 for future use?
while xn < 10%what value do you want it estimated to
xn = (xinitialcondition) + ((n) .* (h));
yn = (yn) + ((h) .* f(xn,yn));
if xn >= 10
break
end
n=n+1;
A(n,:) = [xn yn] ; %this is inputting xn yn into the nth row of matrix A?
end
plot(A(:,1),A(:,2)) %this plots matrix A all rows of column 2 vs matrix A all rows of column 1?
Matt Baron
Matt Baron 2021-3-27
It wasn't working with n=1 so I re-wrote the code using matrices according to your code above and it worked!!
This looks so much better.
h=.05;%step size
init=[1 1];%initial conditions for x and y
n=1;%start at 1
x=init(1,1);
y=init(1,2);
A=zeros([],2);%create an empty 0 by 2 matrix for later
f=@(x,y) (.2 * x * y);%the function to be evaluated
while x <= 1.5%what value do you want it estimated to
A(n,:)=[x y];%input x and y into row n
y = (y + ((h) * f(x,y)));
x = (init(1,1) + ((n) * (h)));
if x > 1.5
break
end
n=n+1;
end
plot (A(:,1),A(:,2))%plot y vs x

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by