Métodos de Euler e Runge-Kutta
Vamos descrever métodos numéricos para o problema de valor inicial (PVI):
A ideia é particionar o intervalo [a,b] através de pontos igualmente espaçãdos:
e construir construir aproximações para a solução $$y(t)$$ nesses pontos. Métodos que usam informação da solução no tempo anterior para construir a solução aproximada no tempo corrente são ditos métodos de passo simples ou métodos de um passo. No que segue vamos descrever o método de Euler e os métodos de Runge-Kutta de ordem 2, 3 e 4.
Contents
Método de Euler
As soluções aproximadas do método de Euler são definidas pela equação de diferençãs
No MATLAB, o método de Euler pode ser implementado como segue:
% function y = euler(fun,alpha,a,b,N,grau) % % y = euler(fun,alpha,a,b,N,grau) % % METODO DE EULER: resolve um EDO de primeira ordem % com uma condicao inicial y(a)=alpha. % % DADOS: % fun - funcao continuamente diferenciavel % alpha - condicao inicial % [a,b] - intervalo % N - numero de passos % Default h=0.01 % grau - grau do metodo Euler, grau pode ser 1, 2 ou 3. % Default grau=1 % % Ismael Rodrigo Bleyer - 2006 h = abs(b-a)/N; k = 1; y = alpha; t = a; Y(k) = y; T(k) = t; switch grau case 1 for k = 2:(N+1) phi = feval(fun,t,y,0); t = t + h; T(k) = t; y = y + h*phi; Y(k) = y; end case 2 for k = 2:(N+1) phi = feval(fun,t,y,0) + (h/2)*[feval(fun,t,y,1)]; t = t + h; T(k) = t; y = y + h*phi; Y(k) = y; end case 3 for k = 2:(N+1) phi = feval(fun,t,y,0) + h/2*[feval(fun,t,y,1)] + (h^2)/6*[feval(fun,t,y,2)]; t = t + h; T(k) = t; y = y + h*phi; Y(k) = y; end otherwise error('Entrada incorreta: grau'); end
Error using ==> evalin Undefined function or variable 'b'.
Método Runge-Kutta
%function y = runge(fun,alpha,a,b,N,grau) % y = runge(fun,alpha,a,b,N,grau) % % METODO RUNGE-KUTTA encontra uma solucao numerica para uma EDO com uma % dada condicao inicial. % % DADOS: % fun - funcao string que define y'=f(t,y(t)) % alpha - condicao inicial y(a) = alpha % [a,b] - intervalo % N - numero de passos % grau - grau do metodo Runge-Kutta, grau pode ser 2, 3 ou 4. % Default grau=4. % % Ismael Rodrigo Bleyer - 2006 h = abs(b-a)/N; k = 1; y = alpha; t = a; Y(k) = y; T(k) = t; if nargin < 6, grau = 4; end switch grau case 2 for k = 2:(N+1) K1 = feval(fun,t,y); K2 = feval(fun,t+h,y+h*K1); y = y + h/2*[K1 + K2]; Y(k) = y; t = t + h; T(k) = t; end case 3 for k = 2:(N+1) K1 = feval(fun,t,y); K2 = feval(fun,t+(1/2)*h,y+(1/2)*h*K1); K3 = feval(fun,t+h,y+2*h*K2-h*K1); y = y + h/6*[K1 + 4*K2 + K3]; Y(k) = y; t = t + h; T(k) = t; end case 4 for k = 2:(N+1) K1 = feval(fun,t,y); K2 = feval(fun,t+(1/2)*h,y+(1/2)*h*K1); K3 = feval(fun,t+(1/2)*h,y+(1/2)*h*K2); K4 = feval(fun,t+h,y+h*K3); y = y + h/6*[K1 + 2*K2 + 2*K3 + K4]; Y(k) = y; t = t + h; T(k) = t; end otherwise error('grau nao confere') end
Exemplo Numérico
Ver arquivo pdf.