Ejercicio: 2Eva_2023PAOI_T3 EDP elíptica, placa rectangular con frontera variable
Dada la EDP elíptica,
∂x2∂2u+∂y2∂2u=(x2+y2)exy
0<x<1
0<y<0.5
Se convierte a la versión discreta usando diferencias divididas centradas, según se puede mostrar con la gráfica de malla.
literal b

literal a
Δx2u[i−1,j]−2u[i,j]+u[i+1,j]+
+Δy2u[i,j−1]−2u[i,j]+u[i,j+1]=(x2+y2)exy
literal c
Se agrupan los términos Δx, Δy semejante a formar un λ al multiplicar todo por Δy2
Δx2Δy2(u[i−1,j]−2u[i,j]+u[i+1,j])+
+Δy2Δy2(u[i,j−1]−2u[i,j]+u[i,j+1])=(x2+y2)exyΔx2Δy2
los tamaños de paso en ambos ejes son de igual valor, se simplifica la ecuación
λ=Δx2Δy2=1
se simplifica el coeficiente en λ =1
u[i−1,j]−2u[i,j]+u[i+1,j]+
+u[i,j−1]−2u[i,j]+u[i,j+1]=(x2+y2)exy
Se agrupan los términosiguales
u[i−1,j]−4u[i,j]+u[i+1,j]+u[i,j−1]+u[i,j+1]
=(x2+y2)exy
Se desarrollan las iteraciones para tres rombos y se genera el sistema de ecuacioens a resolver.
para i=1,j=1
u[0,1]−4u[1,1]+u[2,1]+u[1,0]+u[1,2]
=(x[1]2+y[1]2)ex[1]y[1]
1−4u[1,1]+u[2,1]+1+81
=(0.252+0.252)e(0.25)(0.25)
−4u[1,1]+u[2,1]=(0.252+0.252)e(0.25)(0.25)−81
para i=2, j=1
u[1,1]−4u[2,1]+u[3,1]+u[2,0]+u[2,2]
=(x[2]2+y[1]2)ex[2]y[1]
u[1,1]−4u[2,1]+u[3,1]+1+0.25
=(0.52+0.252)e(0.5)(0.25)
u[1,1]−4u[2,1]+u[3,1]=(0.52+0.252)e(0.5)(0.25)−1.25
para i=3, j=1
u[2,1]−4u[3,1]+u[4,1]+u[3,0]+u[3,2]
=(x[3]2+y[1]2)ex[3]y[1]
u[2,1]−4u[3,1]+0.25+0+83
=(0.752+0.252)e(0.75)(0.25)
u[2,1]−4u[3,1]=(0.752+0.252)e(0.75)(0.25)−0.25−83
con lo que se puede crear un sistema de ecuaciones y resolver el sistema para cada punto desconocido
⎝⎜⎜⎜⎛−4101−4101−4∣∣∣∣∣∣∣∣∣0.008061807364732415−0.89589110841661680.1288939058881129⎠⎟⎟⎟⎞
se obtiene los resultados para:
u[1,1] = 0.05953113
u[2,1] = 0.24618634
u[3,1] = 0.02932311
>>> import numpy as np
>>> (0.25**2+0.25**2)*np.exp(0.25*0.25) - 1/8
0.008061807364732415
>>> (0.5**2+0.25**2)*np.exp(0.5*0.25) - 1.25
-0.8958911084166168
>>> (0.75**2+0.25**2)*np.exp(0.75*0.25) - 0.25 -3/8
0.1288939058881129
>>> A=[[-4,1,0],[1,-4,1],[0.0,1.0,-4.0]]
>>> B = [0.008061807364732415, -0.8958911084166168, 0.1288939058881129]
>>> np.linalg.solve(A,B)
array([0.05953113, 0.24618634, 0.02932311])