Tratando de encontrar la solución en serie de con ciertos IC y BC. Pregunta: qué está mal con la estrategia de solución (la verificación numérica no confirma el resultado).
Mi pregunta:
¿Qué función describe el cambio de temperatura interna de un cuerpo esférico con algún perfil de temperatura inicial cuando su entorno se calienta?
(Tenga en cuenta que esta publicación tiene una ecuación homogénea muy similar a la mía, pero no usa soluciones en serie, pero afirma que esta ecuación "se integra en" la solución).
Obtenemos: . Incluso si mi la función era correcta, BC apenas parece satisfactoria para el general con estas constantes. ¿Me estoy perdiendo de algo? Recuerdo que en la escuela (/uni) resolvimos el caso homogéneo, cuando es , obtuvo una solución general, luego cambió a algo distinto de cero, encontró una solución particular, luego agregó las soluciones general y particular. Mi plan para esto:
Encuentra funciones propias ortonormales & valores propios para , con
Arreglar , reescribe IC como , es decir dónde & son las soluciones generales y particulares en el , dónde , resolviendo .
Dejar
Desde
¿Qué sale mal en el quinto paso del plan? ¿Es correcto el esquema del último paso, el sexto paso, o me estoy perdiendo algo?
El código (Cuaderno aquí )
import numpy as np
import matplotlib.pyplot as plt
from tqdm import tqdm
LAMBDA = 1
c1=1
def Cn(n, LAMBDA = LAMBDA, c1=c1):
if n%2==1:
return 0
elif n==0:
return 1
else:
return LAMBDA*Cn(n-2)/ ((n+2)*(n-1))
start=-1
stop=10
step=0.0001
rs = np.arange(start, stop+step, step)
rho = [sum([Cn(n)*(r**n) for n in range(0,100+1)]) for r in tqdm(rs)]
def deriv(arr, dx=step):
return np.gradient(arr, dx)
rhoderiv = deriv(rho)
rhoderivderiv = deriv(rhoderiv)
this_is_rather_be_zero = [r*rhoderivderiv[i] + 2*rhoderiv[i] - LAMBDA * r * rho[i] for i, r in enumerate(rs)]
plt.plot(rs, rho,c='k',label='rho')
plt.plot(rs, this_is_rather_be_zero,c='g',label='shouldBeZero')
plt.axvline(c='r')
plt.axhline(c='r')
plt.xlim([-1,5])
plt.ylim([-1,5])
plt.legend()
En primer lugar, debo disculparme por ser tan descuidado en los comentarios. Nos envié a una tonta búsqueda de coeficientes cuando tenías razón la primera vez. Pero su código no lo implementó correctamente (vea la parte inferior de la respuesta).
En esta respuesta solo me ocupo de la resolución de la EDO en el paso 5 y el problema de la trama que muestra que no resuelve la ecuación. Puede ser una buena idea simplificar el paso 6 en una pregunta separada.
De
Y esta sí que es una solución. Si entonces una solución es . Si permite soluciones con , obtienes también por ejemplo .
Entonces, ¿qué salió mal en la trama? Usted pone en la fórmula para equivocado. Debería ser
LAMBDA = 1
c1=1
def Cn(n, LAMBDA = LAMBDA, c1=c1):
if n%2==1:
return 0
elif n==0:
return c1
else:
return LAMBDA*Cn(n-2)/ ((n+1)*(n))
en lugar return LAMBDA*Cn(n-2)/ ((n+2)*(n-1))
de Esto da, Cn(2)
por ejemplo, 1/6 como debería, y la trama
zabop - estamos contratando
zabop - estamos contratando
calvin khor
zabop - estamos contratando
zabop - estamos contratando
calvin khor
zabop - estamos contratando