¿Dónde puedo encontrar una buena implementación del método BDF (diferenciación hacia atrás)?

A continuación, encontrará una implementación sencilla de BDF2 que escribí para una asignación anterior que resuelve la ecuación de calor 2D utilizando el método BDF2.

Necesitará los datos iniciales, en el archivo heat2d_data.mat , que se pueden encontrar al final de esta página: Soluciones numéricas de ecuaciones diferenciales. También debe obtener el archivo heat2d_plot.m de esa misma página para poder trazar las soluciones.

Esos datos iniciales contienen una matriz [matemática] K [/ matemática] y la condición inicial [matemática] u_ {0} [/ matemática], donde la ecuación de calor 2D es [matemática] u ‘= Ku [/ matemática].

El siguiente programa MATLAB resuelve [matemática] u (T) [/ matemática] donde [matemática] T [/ matemática] es la última vez, pero muestra la gráfica en el camino y almacena soluciones intermedias que pueden obtenerse simplemente eliminando el último línea, u = u(:, end); De la fuente.

Recuerde que BDF2 requiere una condición inicial, así como un paso inicial. Para obtener la aproximación para el paso inicial, este programa realiza un paso de Backward Euler. Esto debería estar claro en el código.

Para comenzar, intente ejecutarlo con T = 10 , h = 1/10000 .

  función u = calor2d_bdf (T, h)
     % T es el tiempo final, h es el tamaño de pasos

     % Cargar los datos iniciales
     cargar heat2d_data;
    
     % Establezca el valor inicial en el valor de u0, a partir de los datos iniciales.
     u (:, 1) = u0;
    
     % De Euler hacia atrás para el primer paso de BDF2
     u (:, 2) = (ojo (longitud (u0), longitud (u0)) - h * K) \ u (:, 1);
    
     para i = 3: T / h + 1
         % De diferenciación hacia atrás forumla 2 pasos
         u (:, i) = (1/3) * (4 * u (:, i-1) -u (:, i-2) + 2 * h * K * u (:, i-1));

         % Trace la solución que se acaba de calcular
         heat2d_plot (xin, yin, u (:, i));
     fin
    
     % Devuelve la solución en el momento final
     u = u (:, fin);
 fin