Resolver la ecuación del calor en polares esféricos con condiciones de contorno no homogéneas

Tratando de encontrar la solución en serie de r ρ + 2 ρ λ r ρ = F 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?


Plan

  1. Establezca la ecuación que gobierna la transferencia de calor
  2. Ponlo en coordenadas polares esféricas
  3. Configurar condiciones iniciales y de contorno
  4. Obtenga dos ecuaciones separadas usando la separación de variables, como aquí, en una configuración diferente
  5. Obtenga soluciones para aquellos: [AQUÍ ES DONDE VA MAL]
    • Temporal, con suerte, será una EDO de primer orden, algunas exponenciales como solución.
    • La espacial probablemente será más complicada, use: solución en serie
  6. Aplique IC y BC para fijar constantes en las soluciones generales, obtenga el resultado final

Ejecución

  1. tu ˙ = α Δ tu , R r 0 , R siendo el radio de la esfera, t 0 . Como esperamos una solución esféricamente simétrica, tu = tu ( r , t ) . tu no depende de θ & ϕ .
  2. tu ˙ = α 1 r 2 r ( r 2 tu r ) . Desde tu es sólo una función de r & t , podemos ignorar la θ & ϕ dependencia de Δ .
    • CI: tu ( r R , t = 0 ) = F ( r ) (es decir, la temperatura interna inicial del objeto esférico)
    • ANTES DE CRISTO: tu ( r = R , t > 0 ) = T F (es decir, la temperatura del entorno calentado, el calentamiento se toma como instantáneo)
  3. Dejar tu = T ( t ) ρ ( r ) . Ecuaciones separadas:
    • temporal: T = λ α T
    • espacial: r ρ + 2 ρ λ r ρ = 0 (similar a esto y esto )
  4. Soluciones:
    • Temporal: T ( t ) = A mi λ α t
    • espacial: dejar ρ ( r ) = 0 C norte r norte . (No permitir poderes negativos porque nos gustaría tener una solución real en r = 0 también.) Sustituya esto en la ecuación para ρ :
      r 2 norte ( norte 1 ) C norte r norte 2 + 2 1 norte C norte r norte 1 λ r 0 C norte r norte = 0
      que es igual a:
      2 norte ( norte 1 ) C norte r norte 1 + 2 1 norte C norte r norte 1 λ 0 C norte r norte + 1 = 0
      En la primera suma, cambia cada norte a norte + 2 & baje el límite inferior de la suma en 2. En la segunda suma, cambie cada norte a norte + 1 & baje el límite inferior de la suma en 1. Obtenga:
      0 ( norte + 2 ) ( norte + 1 ) C norte + 2 r norte + 1 + 2 ( norte + 1 ) C norte + 1 r norte λ C norte r norte + 1 = 0
      La ecuación anterior solo puede ser verdadera si es verdadera para cada potencia de r . Considera el r norte + 1 términos:
      ( norte + 2 ) ( norte + 1 ) C norte + 2 λ C norte = 2 ( norte + 2 ) C norte + 2
      Reorganizar:
      ( norte + 4 ) ( norte + 1 ) C norte + 2 = λ C norte
      Volver a escribir:
      ( norte + 2 ) ( norte 1 ) C norte = λ C norte 2
      Obtener la relación de recurrencia:
      C norte = λ C norte 2 ( norte + 2 ) ( norte 1 )
      Para no meterse en problemas con la división cero, establezcamos C 1 a 0 , renderizando todo C norte = o d d cero. Somos libres de elegir C 0 , determinando todos los coeficientes pares. ¡Tracemos esto y comprobemos que estamos en lo cierto! Usando C 0 = λ = 1 , calculó una aproximación a ρ usando C norte depende de norte = 100 . También calculó una aproximación a r ρ + 2 ρ λ r ρ , que debe ser cero. (Cuaderno disponible aquí , el código también se encuentra en la parte inferior de esta publicación). Desafortunadamente, no lo es:
                     http://i.stack.imgur.com/PHlmT.jpg

(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).

  1. Obtenemos: tu = T ( t , A ) ρ ( C 0 , r ) . Incluso si mi ρ la función era correcta, BC apenas parece satisfactoria para el general F con estas constantes. ¿Me estoy perdiendo de algo? Recuerdo que en la escuela (/uni) resolvimos el caso homogéneo, cuando F es 0 , obtuvo una solución general, luego cambió F 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 y norte & valores propios σ norte para L y norte = σ norte y norte , con L = 2 r 2 + 2 r r

    • Arreglar T ( t = 0 ) = 1 , reescribe IC como r L ρ = r ( L ρ gramo + L ρ pag ) = r L ρ pag = F , es decir L ρ pag = F / r dónde ρ gramo & ρ pag son las soluciones generales y particulares en el tu , dónde tu = T ( t ) ρ ( r ) = T ( t ) ( ρ gramo mi norte mi r a yo ( r ) + ρ pag a r t i C tu yo a r ( r ) ) , tu resolviendo tu ˙ = α Δ tu .

    • Dejar ρ pag = 0 s norte y norte

    • Desde

      L ρ pag | y metro = L norte = 0 s norte y norte | y metro = norte = 0 s norte L y norte | y metro = norte = 0 s norte σ norte y norte | y metro = s norte σ norte norte = 0 y norte | y metro = s metro σ metro s metro = L ρ pag | y metro σ metro ,
      dónde F | gramo = a yo yo s pag a C mi F gramo d V = r = 0 θ = 0 2 π ϕ = 0 π F ( r , ϕ , θ ) gramo ( r , θ , ϕ ) r 2 pecado ( ϕ ) d r d ϕ d θ . Por lo tanto, puedo calcular todo s norte s, por lo tanto obtener ρ pag , dándome un ρ = ρ gramo + ρ pag , con el que puedo satisfacer el BC & IC: ρ gramo satisfará BC, mientras que ρ pag satisfará IC.


Pregunta

¿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()
¡Oh sí, buen punto! C norte está incluido. Cambié el índice, pero ahora no estoy seguro de lo que sucede con C 1 en la segunda suma como simplifico 2 norte ( norte 1 ) C norte r norte 1 + 2 1 norte C norte r norte 1 λ r 0 C norte r norte = 0 a 2 norte ( norte + 1 ) C norte r norte 1 λ C norte r norte + 1 = 0 .
No obtuve lo mismo, edité la pregunta para incluir lo que obtuve, estoy buscando qué salió mal con mi álgebra ...
Si te resulta fácil comprobarlo, ¿el mío da el cero?
Para norte extraño, de hecho lo hace! Para norte Incluso, depende de λ , ¿no es así?
Si C norte + 1 = λ C norte 1 / ( ( norte + 2 ) ( norte + 1 ) ) , entonces C norte = λ C norte 2 / ( ( norte + 1 ) norte ) , ¿bien? - que es la relación de recurrencia original que he trid, que no parecía funcionar numéricamente.
DE ACUERDO. lo siento, pero tengo que irme, ya que está usando Jupyter, creo que puede resolverlo usando este bit sympy docs.sympy.org/latest/modules/series/formal.html . Si no es así, probablemente podré comprobarlo de nuevo (y ser más paciente) en menos de 24 horas.
Muy bien, ¡muchas gracias por tu ayuda!

Respuestas (1)

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

r ρ + 2 ρ λ r ρ = 0
Sustituyendo en ρ = 0 C norte r norte obtenemos
r 2 norte ( norte 1 ) C norte r norte 2 + 2 1 norte C norte r norte 1 λ r 0 C norte r norte = 0
es decir
2 norte ( norte 1 ) C norte r norte 1 + 2 1 norte C norte r norte 1 λ 0 C norte r norte + 1 = 0
índices de choque por ± 1 , y definiendo C 1 := 0 ,
1 ( norte + 1 ) norte C norte + 1 r norte + 2 0 ( norte + 1 ) C norte + 1 r norte λ 0 C norte 1 r norte = 0
Finalmente, escribimos 1 ( norte + 1 ) norte C norte + 1 r norte = 0 norte ( norte + 1 ) C norte + 1 r norte y comparar coeficientes:
( norte + 1 ) norte C norte + 1 + 2 ( norte + 1 ) C norte + 1 λ C norte 1 = 0
es decir
( norte + 1 ) ( norte + 2 ) C norte + 1 λ C norte 1 = 0.
Dados los datos iniciales C 1 = 0 , C 0 arbitrariamente obtenemos C extraño = 0 y configuración norte = 2 k + 1 ,
C 2 ( k + 1 ) = λ C 2 k ( 2 k + 2 ) ( 2 k + 3 )
Mirando fijamente/ Wolfram|Alpha me informa que la solución es
C 2 k = λ k C 0 Γ ( 2 k + 2 ) = λ k C 0 ( 2 k + 1 ) ! ,
Así que si λ > 0 ,
ρ ( r ) = k = 0 λ k C 0 ( 2 k + 1 ) ! r 2 k = C 0 k = 0 ( λ r ) 2 k ( 2 k + 1 ) ! = C 0 λ r pecado ( λ r )

Y esta sí que es una solución. Si λ < 0 entonces una solución es 1 λ r pecado ( λ r ) . Si permite soluciones con C 1 0 , obtienes también por ejemplo C 0 λ r aporrear ( λ r ) .

Entonces, ¿qué salió mal en la trama? Usted pone en la fórmula para C norte 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

ingrese la descripción de la imagen aquí

Muchas gracias. Hice una descripción de toda la solución y una visualización accesible aquí: ps738.user.srcf.net/planet.html