1. EDP Elípticas: Método Implícito – Desarrollo Analítico
Con el resultado desarrollado en EDP elípticas para:
\frac{\partial ^2 u}{\partial x^2} + \frac{\partial ^2 u}{ \partial y^2} = 0y con el supuesto que:
\lambda = \frac{(\Delta y)^2}{(\Delta x)^2} = 1
se puede plantear que:
u_{i+1,j}-4u_{i,j}+u_{i-1,j} + u_{i,j+1} +u_{i,j-1} = 0con lo que para el método implícito, se plantea un sistema de ecuaciones para determinar los valores en cada punto desconocido.
j=1, i =1
u_{2,1}-4u_{1,1}+u_{0,1} + u_{1,2} +u_{1,0} = 0 u_{2,1}-4u_{1,1}+Ta + u_{1,2} +Tc= 0 -4u_{1,1}+u_{2,1}+u_{1,2} = -(Tc+Ta)j=1, i =2
u_{3,1}-4u_{2,1}+u_{1,1} + u_{2,2} +u_{2,0} = 0 u_{3,1}-4u_{2,1}+u_{1,1} + u_{2,2} +Tc = 0 u_{1,1}-4u_{2,1}+u_{3,1}+ u_{2,2}= -Tcj=1, i=3
u_{4,1}-4u_{3,1}+u_{2,1} + u_{3,2} +u_{3,0} = 0 Tb-4u_{3,1}+u_{2,1} + u_{3,2} +Tc = 0 u_{2,1} -4u_{3,1} + u_{3,2} = -(Tc+Tb)j=2, i=1
u_{2,2}-4u_{1,2}+u_{0,2} + u_{1,3} +u_{1,1} = 0 u_{2,2}-4u_{1,2}+Ta + u_{1,3} +u_{1,1} = 0 -4u_{1,2}+u_{2,2}+u_{1,1}+u_{1,3} = -Taj = 2, i = 2
u_{1,2}-4u_{2,2}+u_{3,2} + u_{2,3} +u_{2,1} = 0j = 2, i = 3
u_{4,2}-4u_{3,2}+u_{2,2} + u_{3,3} +u_{3,1} = 0 Tb-4u_{3,2}+u_{2,2} + u_{3,3} +u_{3,1} = 0 u_{2,2} -4u_{3,2}+ u_{3,3} +u_{3,1} = -Tbj=3, i = 1
u_{2,3}-4u_{1,3}+u_{0,3} + u_{1,4} +u_{1,2} = 0 u_{2,3}-4u_{1,3}+Ta + Td +u_{1,2} = 0 -4u_{1,3}+u_{2,3}+u_{1,2} = -(Td+Ta)j=3, i = 2
u_{3,3}-4u_{2,3}+u_{1,3} + u_{2,4} +u_{2,2} = 0 u_{3,3}-4u_{2,3}+u_{1,3} + Td +u_{2,2} = 0 +u_{1,3} -4u_{2,3}+u_{3,3} +u_{2,2} = -Tdj=3, i=3
u_{4,3}-4u_{3,3}+u_{2,3} + u_{3,4} +u_{3,2} = 0 Tb-4u_{3,3}+u_{2,3} + Td +u_{3,2} = 0 u_{2,3}-4u_{3,3}+u_{3,2} = -(Td+Tb)con las ecuaciones se arma una matriz:
A = [[-4, 1, 0, 1, 0, 0, 0, 0, 0],
[ 1,-4, 1, 0, 1, 0, 0, 0, 0],
[ 0, 1,-4, 0, 0, 1, 0, 0, 0],
[ 1, 0, 0,-4, 1, 0, 1, 0, 0],
[ 0, 1, 0, 1,-4, 1, 0, 1, 0],
[ 0, 0, 1, 0, 1,-4, 0, 0, 1],
[ 0, 0, 0, 1, 0, 0,-4, 1, 0],
[ 0, 0, 0, 0, 1, 0, 1,-4, 1],
[ 0, 0, 0, 0, 0, 1, 0, 1,-4]]
B = [-(Tc+Ta),-Tc,-(Tc+Tb),
-Ta,0,-Tb,
-(Td+Ta),-Td,-(Td+Tb)]
que al resolver el sistema de ecuaciones se obtiene:
>>> Xu
array([ 56.43, 55.71, 56.43, 60. , 60. , 60. , 63.57, 64.29,
63.57])
ingresando los resultados a la matriz u:
EDP Elíptica - Método Implícito
xi: [0. 0.5 1. 1.5 2. ]
yj: [0. 0.38 0.75 1.12 1.5 ]
Tabla de resultados en malla EDP Elíptica
j, U[i,j]
4 [70. 70. 70. 70. 70.]
3 [60. 61.07 57.72 48.57 25. ]
2 [60. 56.56 51.25 41.56 25. ]
1 [60. 53.93 49.15 41.43 25. ]
0 [50. 50. 50. 50. 50.]
>>>
2. Algoritmo en Python. EDP Elípticas: Método Implícito
Instrucciones en Python
# EDP Elipticas d2u/dx2 + du/dt = f(x,y)
# Método implícito
import numpy as np
# INGRESO
fxy = lambda x,y: 0*x+0*y # f(x,y) = 0 , ecuacion de Poisson
# Valores de frontera
Ta = 60 # izquierda de la placa
Tb = 25 # derecha de la placa
Tc = 50 # inferior
Td = 70 # superior
# dimensiones de la placa
x0 = 0 # longitud en x
xn = 2
y0 = 0 # longitud en y
yn = 1.5
# discretiza, supone dx=dy
tramosx = 4
tramosy = 4
dx = (xn-x0)/tramosx # Tamaño de paso
dy = (yn-y0)/tramosy
iteramax = 100 # maximo de iteraciones
tolera = 0.0001
verdigitos = 2 # decimales a mostrar en tabla de resultados
vertabla = True # ver iteraciones
A = [[-4, 1, 0, 1, 0, 0, 0, 0, 0],
[ 1,-4, 1, 0, 1, 0, 0, 0, 0],
[ 0, 1,-4, 0, 0, 1, 0, 0, 0],
[ 1, 0, 0,-4, 1, 0, 1, 0, 0],
[ 0, 1, 0, 1,-4, 1, 0, 1, 0],
[ 0, 0, 1, 0, 1,-4, 0, 0, 1],
[ 0, 0, 0, 1, 0, 0,-4, 1, 0],
[ 0, 0, 0, 0, 1, 0, 1,-4, 1],
[ 0, 0, 0, 0, 0, 1, 0, 1,-4]]
B = [-(Tc+Ta),-Tc,-(Tc+Tb),
-Ta,0,-Tb,
-(Td+Ta),-Td,-(Td+Tb)]
# PROCEDIMIENTO
# Matrices como arreglo, numeros reales
A = np.array(A,dtype=float)
B = np.array(B,dtype=float)
# Resuelve sistema ecuaciones
Xu = np.linalg.solve(A,B)
[nx,mx] = np.shape(A)
# xi,yj : ancho,profundidad
xi = np.linspace(x0,xn,tramosx+1)
yj = np.linspace(y0,yn,tramosy+1)
n = len(xi)
m = len(yj)
# Matriz u[xi,yj], tabla de resultados
u = np.zeros(shape=(n,m),dtype=float)
# llena u con valores en fronteras
u[0,:] = Ta # izquierda
u[n-1,:] = Tb # derecha
u[:,0] = Tc # inferior
u[:,m-1] = Td # superior
# u[1:n-1,1] = Xu[0:0+(n-2)]
# u[1:n-1,2] = Xu[3:3+(n-2)]
# u[1:n-1,3] = Xu[6:6+(n-2)]
for j in range(1,n-1,1):
u[1:n-1,j] = Xu[(j-1)*(n-2):(j-1)*(n-2)+(n-2)]
# SALIDA
np.set_printoptions(precision=2)
print('EDP Elíptica - Método Implícito')
print('xi:', xi)
print('yj:', yj)
print('Tabla de resultados en malla EDP Elíptica')
print('j, U[i,j]')
for j in range(m-1,-1,-1):
print(j,u[:,j])
La gráfica de resultados se obtiene de forma semejante al ejercicio con método iterativo.
Se podría estandarizar un poco más el proceso para que sea realizado por el algoritmo y sea más sencillo generar la matriz con más puntos. Tarea.