TP_RNE
December 20, 2023
Construisons la solution du problème de Neuman non homogène
−u00 ( x ) + u( x ) = f ( x ), ∀ x ∈ 0, 1[,
u0 (0) = α, u0 (1) = β.
On introduit la discrétisation uniforme du segment ]0, 1[ par
xi = ih, i = 0 · · · N − 1,
avec h = N1−1 . Pour i = 0 à N − 1, on va approcher l’équation −u ” (xi ) + u (xi ) = f (xi )
de la même manière que pour le problème de Dirichlet. On note ui ∼ u (xi ) et fi = f (xi ).
Pour i = 0 et i = N − 1, on introduit alors u−1 qu’il convient d’éliminer par la condition lim-
ite
de Neuman non homogène.
On remarque que la différence centrée qui approche la dérivée
u( x +h)−u( x −h)
u0 ( x ) = 2h permet d’écrire
u−1 = u1 − 2hα.
u N +2 = u N + 2hβ.
On a alors le système linéaire
u−1 = u1 − 2hα
−u−1 +2u0 −u1
h2
+ u0 = f0
− u + 2u − u
0
h2
1 2
+ u1 = f1
−u1 +2u2 −u3
+ u2 = f2
h2
−ui−1 +2ui −ui+1
h2
+ ui = fi
−uN−2 +2uN−1 −uN
+ uN−1 = fN−1
h2
−uN−1 +2uN −uN+1
+ uN = fN
h2
−uN +2uN+1 −uN+2
h2
+ uN+1 = fN+1
u
N+2 = u N + 2hβ
En remplacant u−1 par sa valeur dans l’equation 2, il vient que
u0 − u1 u0 f0 α
2
+ = −
h 2 2 h
C’est pareil pour u N +2 :
1
− u N + u N +1 u N +1 f β
2
+ = N+
h 2 2 h
Il vient le système de N + 2 inconnues U = (u0 , u1 , · · · , uN , uN+1 )t suivant:
t
f0 α f β
( A + B) U = F, F= − , f 1 , f 2 , · · · , f N −1 , f N , N +1 + ,
2 h 2 h
avec
1 −1
···
h2 h2
0 0
−1
0 1/2 0 0 ... 0
h2
0 1 0 0 · · · 0
..
0 Ah .
A=
, B=
.. .. ..
.. . . .
.
0 ··· 0 0 1 0
−1
0 ··· 0 0 0 1/2
h2
−1 1
0 ··· ··· h2 h2
Exemple 1
−u00 ( x ) + u( x ) = f ( x ),
∀ x ∈ 0, 1[,
u0 (0) = α, u0 (1) = β.
avec
u( x ) = cos(2πx ), ∀ x ∈] 0, 1[,
2
f ( x ) = [(2π ) + 1)]cos(2πx ), ∀ x ∈ 0, 1[,
u0 (0) = 0, u0 (1) = 0.
[275]: #importation des bibliothèques utiles
import numpy as np
import [Link] as plt
from [Link] import diags
alpha=0 # u'(0)=0
beta=0 # u'(1)=0
# le pas h
N=40
h=1/(N+1)
# construction du vecteur de discrétisation
x=[Link](0,1,N+2)
def sol_exa(t):
return [Link](2*[Link]*t)
#construction de la fonction f de votre choix
def f(t):
return ((2*[Link])**2+1)*[Link](2*[Link]*t)
[276]: #construction du second membre du systeme
F=f(x)
2
F[0] =0.5*F[0]-alpha/h
F[N+1]=0.5*F[N+1]+beta/h
[277]: B=[Link](N+2)
B[0][0]=0.5
B[N+1][N+1]=0.5
[278]: #construction de la matrice en systeme creux Ah
Ah=1/h**2*diags([-1,2,-1], [-1,0,1], shape=(N, N)).toarray()
#construction de la matrice globale A
A=[Link]((N+2,N+2))
[279]: A[1:N+1,1:N+1]=Ah
[280]: A[0][0]= 1/h**2
A[0][1]= -1/h**2
A[1][0]= -1/h**2
[281]: A[N+1][N+1]= 1/h**2
A[N][N+1] = -1/h**2
A[N+1][N] = -1/h**2
[282]: u=[Link](A+B,F)
[283]: uex=sol_exa(x)
[Link](x,u,'*',x,uex)
[Link](["sol app","Solution exacte"])
[Link]()
3
4