7.2.2 EDP Elípticas método implícito con Python


EDP Elípticas

ejercicio

Método implícito:

Analítico

Algoritmo


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} = 0

y con el supuesto que:

\lambda = \frac{(\Delta y)^2}{(\Delta x)^2} = 1
EDP Elípticas Iterativo gráfica 3D

se puede plantear que:

u_{i+1,j}-4u_{i,j}+u_{i-1,j} + u_{i,j+1} +u_{i,j-1} = 0

con 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}= -Tc

j=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} = -Ta

j = 2, i = 2

u_{1,2}-4u_{2,2}+u_{3,2} + u_{2,3} +u_{2,1} = 0

j = 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} = -Tb

j=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} = -Td

j=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.]
>>>

EDP Elípticas

ejercicio

Método implícito:

Analítico

Algoritmo


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.


EDP Elípticas

ejercicio

Método implícito:

Analítico

Algoritmo



Unidades MN