¿Cómo recrear este resultado (de un libro)?


8

El resultado que me interesa se encuentra en "Sincronización: un concepto universal en ciencias no lineales", página figura . El fragmento peculiar también se proporciona al final de esta publicación.33314,3

Entonces, básicamente, existe este acoplamiento disipativo aplicado a una matriz unidimensional de condiciones iniciales (eje horizontal) que evoluciona con el tiempo (eje vertical). Me doy cuenta de que no podré producir resultados idénticos ya que no sé las condiciones iniciales exactas, pero ese no es el punto de esta publicación.

El problema real es que no estoy seguro de cómo aplicar la regla de la evolución. Si tengo algunas condiciones iniciales que se someten a una sola iteración, el resultado es esencialmente una función de esas condiciones iniciales ... ¿Cuál es esta función (procedimiento) en cuestión?

Me encantaría poder calcularlo en MatLab. Seguramente tiene que haber funciones estándar algo relacionadas allí ...


Acoplamiento


Tienes que resolver el sistema dado de PDEs, para y . tu1(X,t)tu2(X,t)

@nonlinearism ¿Pero qué pasa con las condiciones iniciales? Quiero decir que obviamente se debe introducir información adicional para que la solución no sea ambigua.
Pranasas

@WillieWong Gracias por tu comentario. scicomp es entonces! No era muy consciente de ello.
Pranasas

1
He migrado la pregunta de nuevo. Es posible que desee volver a etiquetar su pregunta. Para empezar, parabolic-pde y matlab parecerían apropiados.
Willie Wong

¿Alguna vez ha probado Mathica? ... consulte este demostrations.wolfram.com/CoupledLorenzOscillators , puede especificar las condiciones iniciales y luego la función itera sobre ellas.
Rorschach

Respuestas:


5

Las PDE parabólicas como las del libro generalmente se pueden resolver utilizando el Método de líneas . Primero creas algo de malla para la dirección . Asumiré que utilizó un espaciado uniforme ya que las gráficas no muestran ninguna característica que muestre la necesidad de no uniformidad. A continuación, reformule sus ecuaciones con solo la derivada del tiempo en el lado izquierdo y cambie las derivadas en a aproximaciones de diferencias finitas. Aquí está la primera ecuación para un punto interior general:XX

tu1,yot=ε(tu2,yo-tu1,yo)-tu1,yo+1-2tu1,yo+tu1,yo-1ΔX2-tu1,yo+2-4 4tu1,yo+1+6 6tu1,yo-4 4tu1,yo-1+tu1,yo-2ΔX4 4-tu1,yotu1,yo+1-tu1,yo-12ΔX

Voy a dejarles la segunda ecuación, las ecuaciones de límite y los puntos cerca del límite. Ahora usted tiene un conjunto acoplado de ODE es para . Desde sus condiciones iniciales, puede asignar y en el primer paso. Ahora, en cada paso de tiempo, satisface las ecuaciones discretizadas anteriores en diferentes momentos según el algoritmo de integración de tiempo que esté utilizando. Si es Euler explícito, lo satisface al comienzo de cada paso de tiempo. Si está implícito Euler, el final. yo=1...nortetu1,yotu2,yo

Sin embargo, en matlab, hay una manera fácil de manejar todos estos métodos (y muchos más complicados). Lo que desea es una función que devuelva un vector de valores igual al lado derecho de la ecuación anterior dado un vector de . Si asume condiciones límite periódicas, obtendrá:tuj,yo

function [ u_prime ] = derivative( t, u, delta_x )

u_prime = zeros(length(u),1);
u = [u(end-3:end); u; u(1:4)];

if t < 200
    epsilon = 0;
else
    epsilon = 0.1;
end


for i = 5:2:length(u) - 4;
    u_prime(i-4) = epsilon*(u(i+1) - u(i)) - ...
        (u(i+2) - 2*u(i) + u(i-2))/delta_x^2 - ...
        (u(i+4) - 4*u(i+2) + 6*u(i) - 4*u(i-2) + u(i-4))/delta_x^4 - ...
        u(i)*(u(i+2) - u(i-2))/(2*delta_x);
    j = i+1;
    u_prime(j-4) = epsilon*(u(j-1) - u(j)) - ...
        (u(j+2) - 2*u(j) + u(j-2))/delta_x^2 - ...
        (u(j+4) - 4*u(j+2) + 6*u(j) - 4*u(j-2) + u(j-4))/delta_x^4 - ...
        u(j)*(u(j+2) - u(j-2))/(2*delta_x); 
    end
end

Ahora puede alimentar esto a cualquiera de los solucionadores de ODE incorporados de matlabs. Encontré que ode15s funcionó bastante bien. También asumí ICS sinusoidal, pero no parece importar.

N = 1000;   % Number of space discretizations

x = linspace(0, 150, N);
u_0 = zeros(2*N,1);
u_0(1:2:end-1) = sin(2*x/10);   % u_1
u_0(2:2:end) = -sin(4*x/10);    % u_2
delta_x = x(2) - x(1);

[t,u] = ode15s(@(t,u) derivative(t,u,delta_x), [0 400], u_0);

Los resultados dan: Resultados de la simulación

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.