Buscar

EDO em MATLAB

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

EDO/Euler.m
clc
clear all
a = 0;
b = 1;
m = 10;
h=(b-a)/m;
x0=a;
y0=1;
x=a:h:b;
yex=(1/4).*(3.*exp(-2.*x)+2.*x+1);% solução exata
x(1) = x0;
% Método de Euler
ye(1) = y0; % valor inicial
for i = 2:m+1
 ye(i)=ye(i-1) + h.*(x(i-1)-2.*ye(i-1)+1);
end
% Metodo de Euler Modificado - Runge-Kuta de segunda ordem
yr(1) = y0 % valor inicial
for i = 2:m+1
 fi = (x(i-1)-2.*yr(i-1)+1)
 fih = ((x(i-1)+h/2)-2.*(yr(i-1)+(h/2).*fi)+1)
 yr(i)=yr(i-1) + h.*fih;
end
% Método de Euler Melhorado
ym(1) = y0
for i = 2:m+1
 fi = (x(i-1)-2.*ym(i-1)+1)
 fih = ((x(i-1)+h)-2.*(ym(i-1)+h.*fi)+1)
 ym(i)=ym(i-1) + (h/2).*(fi+fih);
end
plot(x,yex,'b',x,ye,'r',x,yr,'k',x,ym,'g*')
EDO/EulerRunge.m
clc
clear all
a = 0;
b = 1;
m = 10;
h=(b-a)/m;
x0=a;
y0=0.5;
x=a:h:b;
yex= Yex(x); % solução exata
x(1) = x0;
% Método de Euler
ye(1) = y0; % valor inicial
for i = 2:m+1
 ye(i)=ye(i-1) + h.*f(x(i-1),ye(i-1)); 
end
% Metodo de Euler Modificado - Runge-Kuta de segunda ordem
yr(1) = y0; % valor inicial
for i = 2:m+1
 yr(i)=yr(i-1) + h.*f(x(i-1)+h/2,yr(i-1)+(h/2).*f(x(i-1),ye(i-1)));
end;
% 
% % Método de Euler Melhorado
 ym(1) = y0 % valor inicial
for i = 2:m+1
 fi = f(x(i-1),ym(i-1)); 
 ym(i)=ym(i-1) + (h/2).*(fi+f(x(i-1)+h,ym(i-1)+h.*fi));
end
plot(x,yex,'b',x,ye,'r',x,yr,'k',x,ym,'g')
EDO/f.m
function [Y] = f(x,y)
% Função f(x,y)
Y = -2.*x.*(y.^2);
%Y = x - 2.*y + 1;
EDO/Yex.m
function [Y] = Yex(x)
Y = 1./(x.^2 +2);

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando