How i implement Adams Predictor-Corrector Method from general code ?
18 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hazel Can
le 25 Mai 2022
Modifié(e) : Lateef Adewale Kareem
le 30 Mai 2022
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1010770/image.png)
Below is the Adams predictor-corrector formula and general code. How can I adapt this code to the above question? Can you please help?
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1010775/image.png)
%------------------------------------------------------
% 2-step Predictor-Corrector
% [T,Y]=dd2(f,definition,y,h); definition=[t1,tfinal]
%------------------------------------------------------
function [T,Y]=dd2(f,definition,Y1,h)
t1=definition(1);tfinal=definition(2);T=t1;Y=Y1;
t2=t1+h;
definition=[t1,t2];
[T,Y]=rk2(f,definition,Y1,h) ;
Y2=Y(2);
while t2 <tfinal
t3=t2+h;
P=Y2+h*(3/2*f(t2,Y2)-1/2*f(t1,Y1));
Y3=Y2+h/12*(5* f(t3,P)+8*f(t2,Y2)-f(t1,Y1));
Y1=Y2; Y2=Y3;t1=t2;t2=t3;
T=[T;t3];Y=[Y;Y3];
end
%
%----------------------------------------------
2 commentaires
Torsten
le 27 Mai 2022
You know the correct result of your differential equation.
If you plot Y against T in the calling program and compare the plot with the analytical solution, both should be approximately the same.
If yes, your code is (most probably) correct, if not, it's not.
Réponse acceptée
Lateef Adewale Kareem
le 29 Mai 2022
Modifié(e) : Lateef Adewale Kareem
le 30 Mai 2022
clc; clear all;
h = 0.01;
mu = 20;
f_m = @(t,y) mu*(y-cos(t))-sin(t);
exact = @(t) exp(mu*t)+cos(t);
[t,y_m] = dd2(f_m,[0, 1],exact(0), exact(h), h);
plot(t, exact(t)); hold
plot(t,y_m);
%plot(t,y,'-o');
legend('Exact Solution','Adams predictor-corrector formula')
xlabel('t')
ylabel('y')
title('When h = 0.01 and µ=20')
%------------------------------------------------------
% 2-step Predictor-Corrector
% [T,Y]=dd2(f,definition,y,h); definition=[t1,tfinal]
%------------------------------------------------------
function [T,Y] = dd2(f, definition, Y1, Y2, h)
t1 = definition(1); tfinal = definition(2); t = t1:h:tfinal;
T = t(1:2)'; Y = [Y1;Y2];
for i = 2:numel(t)-1
P = Y(i) + h/2*(3*f(t(i),Y(i))-f(t(i-1),Y(i-1)));
Y(i+1) = Y(i) + h/12*(5*f(t(i+1), P) + 8*f(t(i),Y(i)) - f(t(i-1),Y(i-1)));
T=[T;t(i+1)];
end
end
%
4 commentaires
Torsten
le 30 Mai 2022
As far as I read in your assignment, you should use the exact solution for y1. So neither rk2 nor rk4 is needed.
Lateef Adewale Kareem
le 30 Mai 2022
Modifié(e) : Lateef Adewale Kareem
le 30 Mai 2022
yeah. he should have sent it in. I have modified the solution to use the exact solution at h
Plus de réponses (0)
Voir également
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!