Differential equation Eulers method plotting vs. Exact solution
古いコメントを表示
I am trying to find the solutions to the differential equation 2*x*y*(1-y) using Euler's method and then comparing with the exact solution. I'm want to plot different sub-intervals (n value) so I can see the comparison. I'm having a hard time figuring out the Euler's solutions though. I feel like I'm very close but I've confused the hell out of myself with so many different variables and trying to think logically.
My eulers function looks like this right now:
function sequence = eulers(f,a,b,y0,n)
h=(b-a)/n; % interval length
x(1)=a;
y(1)=y0;
for K=1:n
x(n+1)=x(n)+h;
y(n+1)=y(n)+h*f(x(n),y(n));
end
sequence = [x(n),y(n)]
end
And I'm calling the eulers/exact solutions as well as plotting it like this:
clear;
S = [5, 10, 30, 200]; % n-values
numx = length(S);
Y = zeros(1,numx);
for T = 1:numx
Y(T) = eulers(@(x,y) 2*x*y*(1-y),0,2,2, S(T));
end
% calculate the exact solution
fdash = @(x,y) 2*x*y*(1-y);
tspan = [0,2];
yzero = 2;
[xexact,yexact] = ode45(fdash,tspan,yzero);
plot(x,y,'g',xexact,yexact, 'k')
title(['Eulers Method vs Exact Solution'])
legend('Approximate','Exact');
Another set of eyes would be greatly appreciated
10 件のコメント
Jan
2015 年 5 月 26 日
You cannot call the solution determined by ODE45 "exact". It is an approximation also.
Torsten
2015 年 5 月 26 日
1. Your loop index in eulers is K, not n.
2. eulers returns a vector of two elements (namely b and the solution of your ODE at x=b). So you can't store them in Y(T).
3. For plotting, x and y are undefined.
Best wishes
Torsten.
Eric
2015 年 5 月 26 日
Jan
2015 年 5 月 26 日
Please post the complete error message. It is not efficient if we guess which line causes the error.
Eric
2015 年 5 月 26 日
Torsten
2015 年 5 月 26 日
Yes, you are right. You will have to call plot with at least two (x,y) data points. Now you call it with "eulerapprox" which is an (1,2) vector.
What's the sense of the array "S" when you only use the last result from the loop
for T = 1:numS
eulerapprox = eulers(@(x,y) 2*x*y*(1-y),0,2,2, S(T));
end
?
Best wishes
Torsten.
Torsten
2015 年 5 月 26 日
To plot your solution, you will need (x(K),y(K)) for K=1:n. So you could try
a=0;
b=2;
y0=2;
n=50;
f=@(x,y) 2*x*y*(1-y);
h=(b-a)/n; % interval length
x(1)=a;
y(1)=y0;
for K=1:n
x(K+1)=x(K)+h;
y(K+1)=y(K)+h*f(x(K),y(K));
end
plot (x,y);
Best wishes
Torsten.
Eric
2015 年 5 月 26 日
Torsten
2015 年 5 月 27 日
Then use a nested for-loop.
The outer loop changes n, the inner loop computes the solution for that particular n.
Best wishes
Torsten.
回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!