Using Implicit Euler Method with Newton-Raphson method
73 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Eugene Miller
le 11 Mai 2022
Commenté : Haseeb Hashim
le 20 Nov 2022
So I'm following this algorithm to write a code on implicit euler method

and here is my attempt
function y = imp_euler(f,f_y,t0,T,y0,h,tol,N)
t = t0:h:T;
n = length(t);
y = zeros(n,1);
y(1) = y0;
for k = 1:n-1
g = @(z) z - y(k) - h*f(t(k+1),z);
gp = @(z) 1 - h*f_y(t(k+1),z) ;
y(k+1) = newton(f,f_y,y(k),tol,N);
end
end
where
function sol=newton(f,fp,x0,tol,N)
i=0;
sol = zeros(N,2);
fc=abs(f(x0));
while (fc>tol)
xc = x0 - (f(x0)/fp(x0));
fc=abs(f(xc));
x0 = xc;
i=i+1;
sol(i,:) = [i; x0];
if (i>N)
fprintf('Method failed after %d iterations. \n',N);
break
end
end
sol = sol(any(sol,2),:);
end
Unfortunately, my code does not work for some reason. Could anybody guide me on how to code this? Comments are appreciated.
7 commentaires
Réponse acceptée
Torsten
le 11 Mai 2022
Modifié(e) : Torsten
le 11 Mai 2022
f = @(t,y) -20*t*y^2;
f_y = @(t,y) -40*t*y;
t0 = 0;
T = 1;
y0 = 1;
h = 0.01;
tol = 1e-8;
N = 100;
y = imp_euler(f,f_y,t0,T,y0,h,tol,N)
plot(t0:h:T,y)
hold on
plot(t0:h:T,1./(1+10*(t0:h:T).^2))
function y = imp_euler(f,f_y,t0,T,y0,h,tol,N)
t = t0:h:T;
n = length(t);
y = zeros(n,1);
y(1) = y0;
for k = 1:n-1
g = @(z) z - y(k) - h*f(t(k+1),z);
gp = @(z) 1 - h*f_y(t(k+1),z) ;
disp('Vor Newton call.')
y(k+1) = newton(g,gp,y(k),tol,N);
disp('nach Newton Call.')
end
end
function sol=newton(f,fp,x0,tol,N)
i=0;
sol = zeros(N,2);
fc=abs(f(x0));
while fc > tol
xc = x0 - (f(x0)/fp(x0));
fc=abs(f(xc));
x0 = xc;
i=i+1;
if (i>N)
fprintf('Method failed after %d iterations. \n',N);
break
end
end
sol = x0;
end
1 commentaire
Haseeb Hashim
le 20 Nov 2022
@Torsten Man thanks. You are a legend. I was looking for this code for so long
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Ordinary Differential Equations dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!