Buscar

Questao 4

Prévia do material em texto

dy
dx
= f (x, y);
y(x0) = y0 = c
y(xn) = yn = ?
em que
x0 = a
xn = b
Método Euler (Simples)
 Input 
 f(x_,y_); h; c; a; b;
 Corpo
 n=IntegerPart[(b-a)/h];
 x=ConstantArray[0,n];
 x[[0]]=a;
 y=ConstantArray[0,n];
 y[[0]]=c;
 For[i=0,i<=n,i++,
 { y[[i+1]]=y[[i]]+h*f(x[[i]],y[[i]]);
 x[[i+1]]=x[[i]]+h; }]
 Output
 y[[n]]
Método Euler Modificado
 Input 
 f(x_,y_); f(x_,z_); h; c; a; b;
 Corpo
 n=IntegerPart[(b-a)/h];
 x=ConstantArray[0,n];
 x[[0]]=a;
 y=ConstantArray[0,n];
 y[[0]]=c;
 z=ConstantArray[0,n];
 z[[0]]=c;
 For[i=0,i<=n,i++,
 For[i=0,i<=n,i++,
 { x[[i+1]]=x[[i]]+h; 
 z[[i+1]]=z[[i]]+h*f(x[[i]],z[[i]]);
 y[[i+1]]=y[[i]]+(h/2) f(x[[i+1]],z[[i+1]]) }]
 Output
 y[[n]]
Comparar cada algoritmo em relação a solução analítica
Usando 
Método Euler Simples 
In[22]:= f[x_, y_] := -y + x + 2;
h = 0.1;
c = 2;
a = 0;
b = 0.5;
n =
parte inteira
IntegerPart[(b - a)/h];
x =
arranjo constante
ConstantArray[0, n];
x〚0〛 = a;
y =
arranjo constante
ConstantArray[0, n];
y〚0〛 = c;
para cada
For[i= 0, i< n, i++,
{ y〚i+ 1〛 = y〚i〛 + h*f[x〚i〛, y〚i〛]; x〚i+ 1〛 = x〚i〛 + h }]
y (*Solução Euler*)
Out[33]=
2[2., 2.01, 2.029, 2.0561, 2.09049]
w = x;
fa[w_] := 1 + w +
exponencial
Exp[-w]; (*Solução Analítica*)
2 Exercício Nivelamento.nb
In[45]:=
tabela
Table[{w〚i〛, fa[w〚i〛]}, {i, 0, n}]
Out[45]=
{{0, 2}, {0.1, 2.00484}, {0.2, 2.01873}, {0.3, 2.04082}, {0.4, 2.07032}, {0.5, 2.10653}}
In[46]:=
gráfico de linha d⋯
ListLinePlot[{
tabela
Table[{x〚i〛, y〚i〛}, {i, 0, n}],
tabela
Table[{w〚i〛, fa[w〚i〛]}, {i, 0, n}]}]
0.1 0.2 0.3 0.4 0.5
2.02
2.04
2.06
2.08
2.10
Sendo a linha laranja a solução analitica e a azul a soluçao pelo método.
In[334]:=
apaga tudo
ClearAll[x, y, a, b, c, h, n, w];
Método Euler Modificado
In [ ] := f1[x_, z_] := -z + x + 2;
h = 0.1;
c = 2;
a = 0;
b = 0.5;
n =
parte inteira
IntegerPart[(b - a)/h];
x =
arranjo constante
ConstantArray[0, n];
x〚0〛 = a;
y =
arranjo constante
ConstantArray[0, n];
y〚0〛 = c;
z =
arranjo constante
ConstantArray[0, n];
z〚0〛 = c;
para cada
For[i= 0, i< n, i++,
{ x〚i+ 1〛 = x〚i〛 + h ;
z〚i+ 1〛 = z〚i〛 + h*f1[x〚i〛, z〚i〛];
y〚i+ 1〛 = y〚i〛 + (h/2)*(f1[x〚i〛, z〚i〛] + f1[x〚i+ 1〛, z〚i+ 1〛])}]
In [ ] := f2[x_, y_] := -y + x + 2;
Exercício Nivelamento.nb 3
y (*Solução Método Euler Modificado*)
Out[ ]=
2[2.005, 2.0195, 2.04255, 2.0733, 2.11097]
z (*Solução Método Euler Simples*)
Out[ ]=
2[2., 2.01, 2.029, 2.0561, 2.09049]
In [ ] :=
gráfico de linha d⋯
ListLinePlot[{
tabela
Table[{x〚i〛, y〚i〛}, {i, 0, n}],
tabela
Table[{w〚i〛, fa[w〚i〛]}, {i, 0, n}]}]
0.1 0.2 0.3 0.4 0.5
2.02
2.04
2.06
2.08
2.10
Sendo a linha laranja a solução analítica e a azul pelo método modificado. Possivel
observar que esse método é mais preciso do que o método de euler simples.
In [ ] :=
apaga tudo
ClearAll[x, y, a, b, c, h, n, z];
Comparar em relação a variação de passo
Usando 
Método Euler Simples
Passo1 0.01 
Passo2 0.05
Passo3 0.1
Passo4 0.15
Passo5 0.2
Erro global
step (*Lista de soluçoes para euler simples variando o passo para x=0.5*)
Out[392]=
{2.10501, 2.09874, 2.09049, 2.06412, 2.04}
4 Exercício Nivelamento.nb
fb = 1 + 0.5 +
exponencial
Exp[0.5]; (*Solução analitica em x=0.5)*)
w =
arranjo constante
ConstantArray[fb, 5];
error =
valor absoluto
Abs[(fb - step)]/fb; (*Erro euler simples*)
In[384]:=
h = {0.01, 0.05, 0.1, 0.15, 0.2};
gráfico de linha⋯
ListLinePlot[
tabela
Table[{h〚i〛, error〚i〛}, {i, 0, 5}]]
0.05 0.10 0.15 0.20
0.335
0.340
0.345
0.350
Portanto o erro aumenta com o aumento de passos.
apaga tudo
ClearAll[w, h];
Método Euler Modificado
Passo1 0.01
Passo2 0.05
Passo3 0.1
Passo4 0.15
Passo5 0.2
Erro Global
stepm(*Lista de soluçoes para euler modificado variando o passo para x=0.5*)
Out[509]=
{2.10698, 2.10877, 2.11097, 2.09307, 2.076}
w =
arranjo constante
ConstantArray[fb, 5];
errorm=
valor absoluto
Abs[(fb - stepm)]/fb; (*Erro Euler modificado*)
h = {0.01, 0.05, 0.1, 0.15, 0.2};
gráfico de linha⋯
ListLinePlot[
tabela
Table[{h〚i〛, errorm〚i〛}, {i, 0, 5}]]
Exercício Nivelamento.nb 5
0.05 0.10 0.15 0.20
0.330
0.332
0.334
0.336
0.338
0.340
Tambem aumenta com o aumento do passo,
porém menos do que o euler simples para o mesmo intervalo.
In[514]:=
apaga tudo
ClearAll[w, h];
Método Euler
In[604]:=
f[x_, y_] := -x^2*y^2 + y;
h = 0.5;
c = 1;
a = 0;
b = 4;
n =
parte inteira
IntegerPart[(b - a)/h];
x =
arranjo constante
ConstantArray[0, n];
x〚0〛 = a;
y =
arranjo constante
ConstantArray[0, n];
y〚0〛 = c;
para cada
For[i= 0, i< n, i++,
{ y〚i+ 1〛 = y〚i〛 + h*f[x〚i〛, y〚i〛]; x〚i+ 1〛 = x〚i〛 + h }];
y〚n〛
Out[615]=
0.0918055
In[603]:=
apaga tudo
ClearAll[x, y, a, b, c, h, n, w, f];
6 Exercício Nivelamento.nb
Método Euler Modificado
In[616]:=
f1[x_, z_] := -x^2*z^2 + z;
h = 0.5;
c = 1;
a = 0;
b = 4;
n =
parte inteira
IntegerPart[(b - a)/h];
x =
arranjo constante
ConstantArray[0, n];
x〚0〛 = a;
y =
arranjo constante
ConstantArray[0, n];
y〚0〛 = c;
z =
arranjo constante
ConstantArray[0, n];
z〚0〛 = c;
para cada
For[i= 0, i< n, i++,
{ x〚i+ 1〛 = x〚i〛 + h ;
z〚i+ 1〛 = z〚i〛 + h*f1[x〚i〛, z〚i〛];
y〚i+ 1〛 = y〚i〛 + (h/2)*(f1[x〚i〛, z〚i〛] + f1[x〚i+ 1〛, z〚i+ 1〛])}];
y〚n〛
Out[629]=
-0.168956
In[630]:=
apaga tudo
ClearAll[x, y, a, b, c, h, n, z, f1];
Exercício Nivelamento.nb 7
Método Euler Simples
In[631]:=
f[x_, y_] := -x*y^3 - y;
h = 0.5;
c = 1;
a = 0;
b = 2;
n =
parte inteira
IntegerPart[(b - a)/h];
x =
arranjo constante
ConstantArray[0, n];
x〚0〛 = a;
y =
arranjo constante
ConstantArray[0, n];
y〚0〛 = c;
para cada
For[i= 0, i< n, i++,
{ y〚i+ 1〛 = y〚i〛 + h*f[x〚i〛, y〚i〛]; x〚i+ 1〛 = x〚i〛 + h }];
y〚n〛
Out[642]=
0.0512235
In[643]:=
apaga tudo
ClearAll[x, y, a, b, c, h, n, w, f];
8 Exercício Nivelamento.nb
Método Euler Modificado
In[644]:=
f1[x_, z_] := -x*z^3 - z;
h = 0.5;
c = 1;
a = 0;
b = 2;
n =
parte inteira
IntegerPart[(b - a)/h];
x =
arranjo constante
ConstantArray[0, n];
x〚0〛 = a;
y =
arranjo constante
ConstantArray[0, n];
y〚0〛 = c;
z =
arranjo constante
ConstantArray[0, n];
z〚0〛 = c;
para cada
For[i= 0, i< n, i++,
{ x〚i+ 1〛 = x〚i〛 + h ;
z〚i+ 1〛 = z〚i〛 + h*f1[x〚i〛, z〚i〛];
y〚i+ 1〛 = y〚i〛 + (h/2)*(f1[x〚i〛, z〚i〛] + f1[x〚i+ 1〛, z〚i+ 1〛])}];
y〚n〛
Out[657]=
0.28835
In[658]:=
apaga tudo
ClearAll[x, y, a, b, c, h, n, z, f1];
Exercício Nivelamento.nb 9

Continue navegando