| | | | |

5.4 Problemas Não-Lineares

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

Vamos estudar a resolução de Problemas Não-Lineares de Valores de Contorno da forma

uxx=f(x,u,ux),axb, (5.99a)
u(a)=ua, (5.99b)
u(b)=ub, (5.99c)

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+(i1)h, tamanho de malha h=(ba)/n, i=1,2,,n+1. Denotando uiu(xi) e aplicando fórmulas de diferenças finitas centrais para uxx e ux, a Eq. (5.99a) fornece

1h2ui12h2ui1h2ui+1= (5.100)
f(xi,ui,12hui+112hui1),

para i=2,3,,n. As condições de contorno Eqs. (5.99b)-(5.99c), fornecem as equações de fechamento

u1=ua, (5.101a)
un+1=ub. (5.101b)

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

u1ua=0, (5.102a)
1h2ui1+2h2ui1h2ui+1
+f(xi,ui,12hui+112hui1)=0, (5.102b)
un+1ub=0. (5.102c)

A resolução do problema discreto (5.4) pode ser feito com o Método de Newton2626endnote: 26Isaac 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.103)

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

f1(𝒖) =u1ua, (5.104a)
fi(𝒖) =1h2ui1+2h2ui1h2ui+1
+f(xi,ui,12hui+112hui1), (5.104b)
fn+1(𝒖) =un+1ub, (5.104c)

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

𝒖(0)=aprox. inicial, (5.105a)
𝒖(k+1)=𝒖(k)+𝜹(k), (5.105b)

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

JF(𝒖(k))𝜹(k)=F(𝒖(k)), (5.106)

para k=0,1,2, até que um critério de parada seja satisfeito. A matriz jacobiana2727endnote: 27Carl 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.107)
ȷi,i1=1h212hfux(xi,ui,12hui+112hui1), (5.108a)
ȷi,i=2h2+fu(xi,ui,12hui+112hui1), (5.108b)
ȷi,i+1=1h2+12hfux(xi,ui,12hui+112hui1), (5.108c)

para i=2,3,,n e

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

Vamos considerar o seguinte PVC

uuxuxx=πsen(πx)[π+cos(πx)], 0<x<1, (5.110a)
u(0)=u(1)=0. (5.110b)

Rearranjando os termos, podemos escrevê-lo na forma da Eq. (5.4), com ua=ub=0 e

f(x,u,ux)=uuxπsen(πx)[π+cos(πx)]. (5.111)

Com isso, calculamos

fu(x,u,ux)=ux, (5.112a)
fux(x,u,ux)=u. (5.112b)

Então, a aplicação do MDF-Newton com h=101 fornece o resultado da Fig. 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 Ex. 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

u2uxx=cos2(πx)+π2cos(πx), 0<x<1, (5.113a)
u(0)=1, (5.113b)
u(1)=1. (5.113c)

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

Resposta.
h εh
101 4.0e03
102 1.3e04
103 4.0e06
104 1.3e07
E. 5.4.2.

Considere o PVC

uuxuxx=2+x(1x)(12x), 0<x<1, (5.114a)
ux(0)=1, (5.114b)
u(1)=0. (5.114c)

Este problema tem solução analítica u(x)=x(1x). Use o MDF-Newton para computar uh aproximações de u para h=101, 102, 103:

  1. a)

    aplicando as diferenças finitas D0,h2u(x) para 0<x<1 e D+,hu(x) para x=0.

  2. b)

    aplicando as diferenças finitas D0,h2u(x) para 0<x<1 e D+,h2u(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.

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=101, 102 e 103.

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=101, 102 e 103.

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 Exercício 5.4.2. Implemente-o e verifique a convergência do método para h=101, 102 e 103.

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 Exercício 5.4.2. Implemente-o e verifique a convergência do método para h=101, 102 e 103.


Envie seu comentário

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. Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!