Como recriar esse resultado (de um livro)?

8

O resultado em que estou interessado encontra-se na seção "Sincronização: um conceito universal em ciências não lineares" na página figura 14.3 . O fragmento peculiar também é fornecido no final deste post.33314,3

Portanto, basicamente existe esse acoplamento dissipativo aplicado a uma matriz unidimensional de condições iniciais (eixo horizontal) que evolui ao longo do tempo (eixo vertical). Sei que não vou conseguir produzir resultados idênticos, pois não conheço exatamente as condições iniciais, mas esse não é o objetivo deste post.

O problema real é que não tenho certeza de como aplicar a regra da evolução. Se eu tiver algumas condições iniciais que passam por uma única iteração, o resultado é essencialmente uma função dessas condições iniciais ... Qual é essa função (procedimento) em questão?

Eu adoraria poder calculá-lo no MatLab. Certamente tem que haver funções padrão um tanto relacionadas lá ...


Acoplamento

Pranasas
fonte
você1(x,t)você2(x,t)
@nonlinearism E as condições iniciais? Quero dizer, obviamente, algumas informações adicionais precisam ser introduzidas para tornar a solução inequívoca.
Pranasas
@WillieWong Obrigado pela sua observação. Scicomp é então! Eu não estava muito ciente disso.
Pranasas
1
Eu migrei a questão. Você pode re-marcar sua pergunta. Para iniciantes, parabolic-pde e matlab parece apropriado.
Willie Wong
você já experimentou o mathematica ... verifique isso demonstrations.wolfram.com/CoupledLorenzOscillators, você pode especificar condições iniciais e, em seguida, a função itera sobre elas.
Rorschach

Respostas:

5

xx

você1,Eut=ε(você2,Eu-você1,Eu)-você1,Eu+1-2você1,Eu+você1,Eu-1Δx2-você1,Eu+2-4você1,Eu+1+6você1,Eu-4você1,Eu-1+você1,Eu-2Δx4-você1,Euvocê1,Eu+1-você1,Eu-12Δx

Eu=1...Nvocê1,Euvocê2,Eu

vocêj,Eu

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

Agora você pode alimentar isso com qualquer um dos solucionadores de ODE incorporados do matlabs. Descobri que os ode15s tiveram um desempenho bastante bom. Eu também assumi o ICS sinusoidal, mas não 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);

Os resultados fornecem: Resultados simulados

Godric Seer
fonte