| | | |

Matemática numérica II

Ajude a manter o site livre, gratuito e sem propagandas. Colabore!

5.4 Problemas não-lineares

Vamos estudar a resolução de problemas não-lineares de valores de contorno da forma

ux⁢x=f⁢(x,u,ux),a≤x≤b, (5.139)
u⁢(a)=ua, (5.140)
u⁢(b)=ub, (5.141)

onde f=f⁢(x,u,ux) é uma função não linear para u ou ux.

Empregando o método de diferenças finitas (MDF), começamos assumindo uma malha uniforme de n-subintervalos com nodos xi=a+(i−1)⁢h, tamanho de malha h=(b−a)/n, i=1,2,…,n+1. Denotando ui≈u⁢(xi) e aplicando fórmulas de diferenças finitas centrais para ux⁢x e ux, a Eq. (5.139) fornece

1h2⁢ui−1−2h2⁢ui⁢1h2⁢ui+1=
f⁢(xi,ui,12⁢h⁢ui+1−12⁢h⁢ui−1), (5.142)

para i=2,3,…,n. As condições de contorno Eqs. (5.140)-(5.141), fornecem as equações de fechamento

u1=ua, (5.143)
un+1=ub. (5.144)

Com isso, temos que o problema discreto associado consiste em: encontrar 𝒖=(ui)i=1n+1 solução do seguinte sistema de equações não-lineares

u1−ua=0, (5.145)
−1h2⁢ui−1+2h2⁢ui−1h2⁢ui+1
+f⁢(xi,ui,12⁢h⁢ui+1−12⁢h⁢ui−1)=0, (5.146)
un+1−ub=0. (5.147)

A resolução do problema discreto (LABEL:cap_pvc_sec_pnlin:eq:pd) pode ser feito com o Método de Newton555Isaac Newton, 1642 - 1727, matemático, físico, astrônomo, teólogo e autor inglês. Fonte: Wikipédia: Isaac Newton.. Para tando, observamos que o sistema tem a forma vetorial

F⁢(𝒖)=𝟎, (5.148)

onde F⁢(𝒖)=(fi⁢(𝒖))i=1(n+1) é a função vetorial de componentes

f1⁢(𝒖)=u1−ua, (5.149)
fi⁢(𝒖)=−1h2⁢ui−1+2h2⁢ui−1h2⁢ui+1
+f⁢(xi,ui,12⁢h⁢ui+1−12⁢h⁢ui−1), (5.150)
fn+1⁢(𝒖)=un+1−ub, (5.151)

com i=2,3,…,n. A iteração do Método de Newton consiste em

𝒖(0)=aprox. inicial, (5.152)
𝒖(k+1)=𝒖(k)+𝜹(k), (5.153)

onde 𝜹(k) é a atualização de Newton computada por

JF⁢(𝒖(k))⁢𝜹(k)=−F⁢(𝒖(k)), (5.154)

para k=0,1,2,… até que um critério de parada seja satisfeito. A matriz jacobiana666Carl Gustav Jakob Jacobi, 1804 - 1851, matemático alemão. Fonte: Wikipédia: Carl Gustav Jakob Jacobi. é denotada por JF⁢(𝒖(k))=[ȷi,j]i,j=1n+1,n+1 e tem elementos não nulos

ȷ1,1=1, (5.155)
ȷi,i−1=−1h2−12⁢h⁢fux⁢(xi,ui,12⁢h⁢ui+1−12⁢h⁢ui−1), (5.156)
ȷi,i=2h2+fu⁢(xi,ui,12⁢h⁢ui+1−12⁢h⁢ui−1), (5.157)
ȷi,i+1=−1h2+12⁢h⁢fux⁢(xi,ui,12⁢h⁢ui+1−12⁢h⁢ui−1), (5.158)

para i=2,3,…,n e

ȷn+1,n+1=1. (5.159)
Exemplo 5.4.1.

Vamos considerar o seguinte PVC

u⁢ux−ux⁢x=π⁢sen⁡(π⁢x)⁢[π+cos⁡(π⁢x)]⁢, 0<x<1, (5.160)
u⁢(0)=u⁢(1)=0. (5.161)

Rearranjando os termos, podemos escrevê-lo na forma da Eq. (LABEL:cap_pvc_sec_pnlin:eq:pvc), com ua=ub=0 e

f⁢(x,u,ux)=u⁢ux−π⁢sen⁡(π⁢x)⁢[π+cos⁡(π⁢x)]. (5.162)

Com isso, calculamos

fu⁢(x,u,ux)=ux, (5.163)
fux⁢(x,u,ux)=u. (5.164)

Então, a aplicação do MDF-Newton com h=10−1 fornece o resultado da Figura 5.4. A solução exata é u⁢(x)=sin⁡(π⁢x).

Refer to caption
Figura 5.4: Resultado da aplicação do MDF-Newton para o PVC do Exemplo 5.4.1.
Código 19: mdf-newton.py
1import numpy as np
2import numpy.linalg as npla
3from numpy import pi, sin, cos
4
5# parâmetros
6n = 10
7h = 1./n
8xx = np.linspace(0., 1., n+1)
9
10# c.c. Dirichlet
11ua = 0.
12ub = 0.
13
14def f(x, u, ux):
15 return u*ux - pi*sin(pi*x)*(pi + cos(pi*x))
16
17def fu(x, u, ux):
18 return ux
19
20def fux(x, u, ux):
21 return u
22
23# rhs
24def F(u):
25 y = np.empty(n+1)
26 # f_1
27 y[0] = u[0] - ua
28 # f_i
29 for i in range(1,n):
30 ux = u[i+1]/(2*h) - u[i-1]/(2*h)
31 y[i] = -1./h**2*u[i-1] + 2./h**2*u[i] - 1./h**2*u[i+1] \
32 + f(xx[i], u[i], ux)
33 # f_{n+1}
34 y[n] = u[n] - ub
35
36 return y
37
38# jacobiana
39def J(u):
40 J = np.zeros((n+1,n+1))
41 J[0,0] = 1.
42 for i in range(1,n):
43 ux = 1./(2*h)*u[i+1] - 1./(2*h)*u[i-1]
44 J[i,i-1] = -1./h**2 - 1/(2*h)\
45 * fux(xx[i], u[i], ux)
46 J[i,i] = 2/h**2 + fu(xx[i], u[i], ux)
47 J[i,i+1] = -1./h**2 + 1/(2*h)\
48 * fux(xx[i], u[i], ux)
49 J[n,n] = 1.
50
51 return J
52
53# aprox inicial
54u = np.zeros(n+1)
55
56# iterações de Newton
57maxiter = 10
58for k in range(maxiter):
59
60 # passo de Newton
61 dlta = npla.solve(J(u), -F(u))
62
63 # atualização
64 u += dlta
65
66 ndlta = npla.norm(dlta)
67 print(f'{k+1}: norm = {ndlta:.2e}')
68 if (ndlta < 1e-10):
69 print('convergiu.')
70 break

5.4.1 Exercícios

E. 5.4.1.

Considere o PVC

u2−ux⁢x=cos2⁡(π⁢x)+π2⁢cos⁡(π⁢x)⁢, 0<x<1, (5.165)
u⁢(0)=1, (5.166)
u⁢(1)=−1. (5.167)

Este problema tem solução analítica u⁢(x)=cos⁡(π⁢x). Use o MDF-Newton para computar uh aproximações de u para h=10−1, 10−2, 10−3, 10−4. Então, verifique a convergência com base no erro εh:=‖𝒖~−𝒖‖2. A convergência tem a taxa esperada? Justifique sua resposta.


h εh
10−1 4.0⁢e−03
10−2 1.3⁢e−04
10−3 4.0⁢e−06
10−4 1.3⁢e−07
E. 5.4.2.

Considere o PVC

u⁢ux−ux⁢x=2+x⁢(1−x)⁢(1−2⁢x)⁢, 0<x<1, (5.168)
ux⁢(0)=1, (5.169)
u⁢(1)=0. (5.170)

Este problema tem solução analítica u⁢(x)=x⁢(1−x). Use o MDF-Newton para computar uh aproximações de u para h=10−1, 10−2, 10−3:

  1. a)

    aplicando as diferenças finitas D0,h2⁢u⁢(x) para 0<x<1 e D+,h⁢u⁢(x) para x=0.

  2. b)

    aplicando as diferenças finitas D0,h2⁢u⁢(x) para 0<x<1 e D+,h2⁢u⁢(x) para x=0.

Qual dessas formulações tem a melhor taxa de convergência do erro em relação ao passo de malha h? Justifique e verifique sua resposta.


b) tem melhor taxa de convergência.

E. 5.4.3.

Desenvolva uma versão do método MEF-Newton (Método de Elementos Finitos com o Método de Newton) para computar a solução aproximada do PVC dado no Exemplo 5.4.1. Implemente-o e verifique a convergência do método para h=10−1, 10−2 e 10−3.

E. 5.4.4.

Desenvolva uma versão do método MVF-Newton (Método de Volumes Finitos com o Método de Newton) para computar a solução aproximada do PVC dado no Exemplo 5.4.1. Implemente-o e verifique a convergência do método para h=10−1, 10−2 e 10−3.

E. 5.4.5.

Desenvolva uma versão do método MEF-Newton (Método de Elementos Finitos com o Método de Newton) para computar a solução aproximada do PVC dado no E.5.4.2. Implemente-o e verifique a convergência do método para h=10−1, 10−2 e 10−3.

E. 5.4.6.

Desenvolva uma versão do método MVF-Newton (Método de Volumes Finitos com o Método de Newton) para computar a solução aproximada do PVC dado no E.5.4.2. Implemente-o e verifique a convergência do método para h=10−1, 10−2 e 10−3.


Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Pedro H A Konzen
| | | |