You are on page 1of 5

Usurio ativo: alambert (sair)Contato

Monitoria
Tutoria
Ensino
Sala de Estudos
Sair do sistema
Sistema de Gesto Acadmica da ECT/BCT
Laboratrio CN - Resoluo EDO
Laboratrio CN - Resoluo EDO
Clique no tema do laboratrio para visualizar o guia do laboratrio, suas respostas
caso voc tenha comparecido ao laboratrio, bem como a nota obtida por voc, caso o pr
ofessor tenha liberado a correo do mesmo.
Data Tema do Laboratrio Nota
11/08/2016 Sries de Taylor 8.2
25/08/2016 Raizes de Eq. Algbricas 5.6
08/09/2016 Sistemas de Eq. Lineares - Mtodos Exatos 7.4
15/09/2016 Sistemas de Eq. Lineares - Mtodos Iterativos 5.2
06/10/2016 Mnimos quadrados 5.2
20/10/2016 Interpolao No divulgada
27/10/2016 Integracao 6
10/11/2016 Resoluo EDO 7
16/11/2016 Sistemas EDO No divulgada
Comentrios da correo feitos pelo professor:
No RK-4, o k4 est calculado errado:
k4 = g(x(i)+h, y(i)+h)
quando deveria ser
k4 = g(x(i)+h, y(i)+h*k3)
Pr-Laboratrio
Pr-laboratrio no enviado.
1. Introduo
Nesta aula usaremos os mtodos de Runge-Kutta de 1, 2 e 4 ordens para resolver numeri
camente Equaes Diferenciais Ordinrias de primeira ordem. Considere o seguinte Probl
ema de Valor Inicial:

\begin{cases}
\frac{dy}{dx} = \frac{10-y}{1-x^2} \\
y(2.7) =2.8 \end{cases}.

2. Implementao dos mtodos numricos


2.1 Escreva uma funo do Scilab, denominada euler(a,b,h,y0), que implemente o mtodo
de Euler, em que [a,b] o intervalo de resoluo da equao, h o passo e y0 o valor de f
x0) = f(a). A funo deve retornar vetores com os valores calculados de x e y.
2.2 Escreva uma funo do Scilab, denominada heun(a,b,h,y0), que implemente o mtodo d
e Euler Modificado (Heun). A funo deve retornar vetores com os valores calculados
de x e y.
2.3 Escreva uma funo do Scilab, denominada rk4(a,b,h,y0), que implemente o mtodo de
Runge-Kutta de ordem 4. A funo deve retornar vetores com os valores calculados de
x e y.
Coloque todos os cdigos no campo abaixo:
Cdigo Scilab:
2.1
function [x, y] = euler(a, b, h, y0)
x = a:h:b
n = length(x)
y(1) = y0
for i=1:n-1
y(i+1) = y(i) +g(x(i),y(i))*h
end
endfunction

2.2
function [x, y] = heun(a, b, h, y0)
x = a:h:b
n = length(x)
y(1) = y0
for i=1:n-1
k1 = g(x(i),y(i))
k2 = g(x(i)+h, y(i)+k1*h)
k =(k1+k2)/2
y(i+1) = y(i) +k*h
end
endfunction

2.3
function [x, y] = rk4(a, b, h, y0)
x = a:h:b
n = length(x)
y(1) = y0
for i=1:n-1
k1 = g(x(i),y(i))
k2 = g(x(i)+h/2, y(i)+k1*h/2)
k3 = g(x(i)+h/2, y(i)+k2*h/2)
k4 = g(x(i)+h, y(i)+h)
k = (k1+2*k2+2*k3+k4)/6
y(i+1) = y(i)+k*h
end
endfunction

3. Resoluo do PVI
3.1 Resolva o PVI usando os trs mtodos no intervalo [2.7, 5.5] com h = 0.4
.
3.2 Plote, no mesmo grfico, as trs solues.
Cdigo Scilab:
3.1/3.2
function z=g(x,y)
z=(10-y) / (1-x^2)
endfunction
function [x, y] = euler(a, b, h, y0)
x = a:h:b
n = length(x)
y(1) = y0
for i=1:n-1
y(i+1) = y(i) +g(x(i),y(i))*h
end
endfunction
function [x, y] = heun(a, b, h, y0)
x = a:h:b
n = length(x)
y(1) = y0
for i=1:n-1
k1 = g(x(i),y(i))
k2 = g(x(i)+h, y(i)+k1*h)
k =(k1+k2)/2
y(i+1) = y(i) +k*h
end
endfunction

function [x, y] = rk4(a, b, h, y0)


x = a:h:b
n = length(x)
y(1) = y0
for i=1:n-1
k1 = g(x(i),y(i))
k2 = g(x(i)+h/2, y(i)+k1*h/2)
k3 = g(x(i)+h/2, y(i)+k2*h/2)
k4 = g(x(i)+h, y(i)+h)
k = (k1+2*k2+2*k3+k4)/6
y(i+1) = y(i)+k*h
end
endfunction

[x, ye] = euler(2.7, 5.5, 0.4, 2.8)


[x, yh] = heun(2.7, 5.5, 0.4, 2.8)
[x, yrk] = rk4(2.7, 5.5, 0.4, 2.8)
plot
plot (x',ye,'o')
plot (x',yh,'x')
plot (x',yrk,'*')
4. Mtodo de Euler com passo adaptativo
4.1 Modifique o mtodo de Euler para torn-lo adaptativo, de forma que o erro tolerve
l seja da ordem de 1E-3. Resolva o PVI em [2.7, 5.5] usando o algoritmo de Euler
com passo adaptativo
4.2 Plote, no mesmo grfico: (a) os valores obtidos no item anterior (b) os valore
s obtidos com o mtodo de Euler original e (c) os valores obtidos com RK-4 origina
l.
4.3 Quais so as suas concluses?
Insira dos cdigos Scilab:
function z=g(x,y)
z=(10-y). / (1-x.^2);
endfunction
function [x,y] = intereuler (x,y,h,n)
for i=1:n
y= y+ g(x,y)*h;
x=x+h;
end
endfunction
function [x, y] = rk4(a, b, h, y0)
x = a:h:b
n = length(x)
y(1) = y0
for i=1:n-1
k1 = g(x(i),y(i))
k2 = g(x(i)+h/2, y(i)+k1*h/2)
k3 = g(x(i)+h/2, y(i)+k2*h/2)
k4 = g(x(i)+h, y(i)+h)
k = (k1+2*k2+2*k3+k4)/6
y(i+1) = y(i)+k*h
end
endfunction
function [x, y] = euler(a, b, h, y0)
x = a:h:b
n = length(x)
y(1) = y0
for i=1:n-1
y(i+1) = y(i) +g(x(i),y(i))*h
end
endfunction
function [h]= passoeuler (x,y,h,Er)
[x,yatual]=intereuler (x,y,h,1)
[x,ynovo] =intereuler (x,y,h/2,2)
erro=abs(yatual-ynovo);
if (erro>Er)
h=h*abs(Er/erro)^0.25
else
h=h*abs(Er/erro)^0.2
end
endfunction
4.1/4.2
function [x,y]= euleradap (a,b,h,yo,Er)
i=1;
x(1)=a;
y(1)=yo;
while (%T)
h=passoeuler (x(i),y(i),h,Er)
[x(i+1),y(i+1)]=intereuler(x(i),y(i),h,1)
if (x(i+1)>b)
break
end
i=i+1;
end
endfunction
[x1, ye] = euler(2.7, 5.5, 0.4, 2.8)
[x2, yrk] = rk4(2.7, 5.5, 0.4, 2.8)
[x3, yadap] = euleradap (2.7,5.5,0.4,2.8,1E-3)
plot (x1',ye,'o')
plot (x2',yrk,'*')
plot (x3',yadap,'x')

4.3
pode-se concluir que o euler adaptado ele possui uma precisao
melhor do que o metodo de Runge-Kutta que por sua vez mais
preciso do que o metodo de euler e isso fica nitido pois o
euleradaptado possui um numero maior de pontos pois o h varia de
acordo com o erro desejado.

Site da ECT
Site atual
Pr-Lab CN
Copyright 2012 Escola de Cincias e Tecnologia. Todos os direitos reservados.
Este site melhor visualizado utilizando o Mozilla Firefox, para baix-lo e
instal-lo, clique aqui.

You might also like