How to make graph that plot between Analytical Solution (Exact Solution) and Numerical Method Solution?
Mostra commenti meno recenti
Greetings!
Can someone help to guide me how to make graph that plot between Analytical Solution (Exact Solution) and Adams-Moulton Solution? Here I attached my script.
%% 2nd-order Adams-Moulton Solution
fun = @(t,y) ((1+4*t)*((y)^1/2));
y0 = 1;
tspan = [0,1];
N = 4;
%% Initial Values
h = (tspan(2) - tspan(1))/N;
exactY = @(t) (((3*t)/2)+3*t.^2).^(2/3);
t1 = tspan(1) + h; y1 = exactY(t1);
t2 = tspan(1) + 2*h; y2 = exactY(t2);
[t2,Y2] = AM2(fun,tspan,y0,y1,N);
%% Display Solution
Y = exactY(t2);
disp('-----------------------------');
disp('t_i y(t_i) AM2 Error')
disp('-----------------------------');
formatSpec = '%.2f %.5f %.5f %.5f\n';
fprintf(formatSpec,[t2';Y';Y2';abs(Y'-Y2')])
I really appreciate any help you can provide. Thank you.
4 Commenti
The Adams-Moulton method is an implicit method.
You can see this by the fact that in your code, Fiplus1 depends on the unknown y(i+1).
As a consequence, you will have to iterate or use a nonlinear equations solver like "fsolve" or "fzero" to solve the equation
y(i+1) = y(i) + (h/12)*(5*fun(t(i+1),y(i+1)) + 8*Fi - Fi1)
for y(i+1).
In your code, you use y(i+1) = 0 on the right-hand side of the equation
y(i+1) = y(i) + (h/12)*(5*fun(t(i+1),y(i+1)) + 8*Fi - Fi1)
because you initialized the y-vector to zero. This is wrong.
Yusuf Arya Yudanto
il 5 Mar 2022
Torsten
il 5 Mar 2022
fun = @(t,y) (1+4*t)*sqrt(y);
y0 = 1;
tspan = [0,1];
N = 4;
%% Initial Values
h = (tspan(2) - tspan(1))/N;
exactY = @(t)(t/2 + t.^2 + 1).^2;
t1 = tspan(1) + h; y1 = exactY(t1);
[T,Ynum] = AM2(fun,tspan,y0,y1,N);
%% Display Solution
Yexact = exactY(T);
plot(T,[Ynum,Yexact])
function [t,y] = AM2(fun,tspan,y0,y1,N)
a = tspan(1);
b = tspan(2);
h = (b-a)/N;
t = zeros(N+1,1);
y = zeros(N+1,1);
t(1) = a; y(1) = y0;
t(2) = a+h; y(2) = y1;
for i = 2:N
t(i+1) = t(i) + h;
Fi = fun(t(i),y(i));
Fi1 = fun(t(i-1),y(i-1));
funh = @(yh) yh - y(i) - h/12*(5*fun(t(i+1),yh) + 8*Fi - Fi1);
y(i+1) = fsolve(funh,y(i));
end
end
Yusuf Arya Yudanto
il 5 Mar 2022
Risposta accettata
Più risposte (0)
Categorie
Scopri di più su Creating, Deleting, and Querying Graphics Objects in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
