s3Eva_IT2018_T3 EDP Parabólica, temperatura en varilla

Se generan las ecuaciones usando diferencias finitas divididas centradas y hacia adelante

\frac{d^2u}{dx^2} + \frac{Kr}{\rho C} = K\frac{du}{dt}
\frac{u[i-1,j]-2u[i,j]+u[i+1,j]}{\Delta x^2}+ + \frac{Kr}{\rho C} = K \frac{u[i,j+1]-u[i,j]}{\Delta t}


\frac{\Delta t}{K\Delta x^2} \Big[u[i-1,j]-2u[i,j]+u[i+1,j] \Big] + + \frac{Kr}{\rho C} \frac{\Delta t}{K} = u[i,j+1]-u[i,j]

Se sustituye :

\lambda = \frac{\Delta t}{K\Delta x^2} \gamma = \frac{Kr}{\rho C} \frac{\Delta t}{K} = \frac{r\Delta t}{\rho C}

simplificando a:


\lambda \Big[u[i-1,j]-2u[i,j]+u[i+1,j] \Big] + +\gamma = u[i,j+1]-u[i,j]

despejando para u[i,j+1]:

\lambda u[i-1,j]-2\lambda u[i,j]+\lambda u[i+1,j] + +\gamma = u[i,j+1]-u[i,j]
u[i,j+1] =\lambda u[i-1,j]+(1-2\lambda) u[i,j]+ +\lambda u[i+1,j] +\gamma

con lo que se tiene una forma explicita de encontrar los valores de la ecuacion.

La gráfica se realizó para 20 valores de t con tamaño de paso dt


El resultado pedido en el enunciado de distribucion de temperatura para t=3k

u[:,t] para t = 0.07500000000000001
[ 0.    0.81  1.23  1.35  1.23  0.81  0.  ]

algunos valores de u[i,j]

Tabla de resultados
[[ 0.    0.    0.    0.    0.    0.    ...]
 [ 0.5   0.66  0.74  0.81  0.87  0.92  ...]
 [ 0.87  0.99  1.12  1.23  1.33  1.41  ...]
 [ 1.    1.11  1.23  1.35  1.47  1.57  ...]
 [ 0.87  0.99  1.12  1.23  1.33  1.41  ...]
 [ 0.5   0.66  0.74  0.81  0.87  0.92  ...]
 [ 0.    0.    0.    0.    0.    0.    ...]]

Desarrollo en Python

# 3ra Evaluación I Término 2018 
# Tema 3. EDP Parabólica, Temperatura en varilla
# método explícito, usando diferencias finitas
import numpy as np
import matplotlib.pyplot as plt

# INGRESO
# Constantes
L = 1.5
K = 1.04
ro = 10.6
C = 0.056
r = 5.0
# Tamaño de paso
dx = 0.25
dt = 0.025
# longitud en x
a = 0
b = L
# iteraciones en tiempo
n = 20
# Valores de frontera
Ta = 0
Tb = 0
ux0 = lambda x: np.sin(np.pi*x/L)

# PROCEDIMIENTO
# iteraciones en longitud
xi = np.arange(a,b+dx,dx)
m = len(xi)
ultimox = m-1

# Resultados en tabla u[x,t]
u = np.zeros(shape=(m,n), dtype=float)

# valores iniciales de u[:,j]
j=0
ultimot = n-1
u[0,j]= Ta
u[1:ultimox,j] = ux0(xi[1:ultimox])
u[ultimox,j] = Tb

# factores P,Q,R
lamb = dt/(K*(dx**2))
gama = r*dt/(ro*C)
P = lamb
Q = 1 - 2*lamb
R = lamb

# Calcula U para cada tiempo + dt
j = 0
while not(j>=ultimot):
    u[0,j+1] = Ta
    for i in range(1,ultimox,1):
        u[i,j+1] = P*u[i-1,j] + Q*u[i,j] + R*u[i+1,j] + gama
    u[m-1,j+1] = Tb
    j=j+1

# SALIDA
print('Tabla de resultados')
np.set_printoptions(precision=2)
print(u)
print('u[:,t] para t =', 3*dt)
print(u[:,3])

# Gráfica
salto = 1 # int(n/10)
if (salto == 0):
    salto = 1
for j in range(0,n,salto):
    vector = u[:,j]
    plt.plot(xi,vector)
    plt.plot(xi,vector, '.r')
plt.xlabel('x[i]')
plt.ylabel('U[x,tj]')
plt.title('Solución EDP parabólica')
plt.show()

algunos valores de u[i,j]

Tabla de resultados
[[ 0.    0.    0.    0.    0.    0.    ...]
 [ 0.5   0.66  0.74  0.81  0.87  0.92  ...]
 [ 0.87  0.99  1.12  1.23  1.33  1.41  ...]
 [ 1.    1.11  1.23  1.35  1.47  1.57  ...]
 [ 0.87  0.99  1.12  1.23  1.33  1.41  ...]
 [ 0.5   0.66  0.74  0.81  0.87  0.92  ...]
 [ 0.    0.    0.    0.    0.    0.    ...]]