Olá, obrigado por dar tempo para analisar minha pergunta. Esta é uma versão atualizada da minha pergunta, que eu postei anteriormente em physics.stackexchange.com
Atualmente, estou estudando um spinor de exciton 2D Bose-Einstein Condensate e estou curioso sobre o estado fundamental deste sistema. O método matemático de chegar ao estado fundamental é chamado de método do tempo imaginário .
O método é muito simples, onde o tempo na mecânica quântica é substituído pelo imaginário Essa substituição faz com que as partículas de alta energia do meu sistema decaam mais rapidamente do que as de baixa energia. Re-normalizando o número de partículas em cada etapa do cálculo, terminamos com um sistema de partículas de menor energia, também conhecido como. o estado fundamental.
A (s) equação (ões) em questão é não linear, denominada equação de Schrödinger não linear , às vezes a equação de Gross-Pitaevskii . Para resolver o problema, estou usando o Matlabs ode45, que evolui o sistema no tempo e, eventualmente, atinge o estado fundamental.
- Nota! A equação não-linear de Schrödinger inclui o laplaciano e alguns outros termos diferenciais no espaço. Tudo isso é resolvido usando a transformação rápida de Fourier. No final, temos apenas uma ODE. *
Meu problema e pergunta: os cálculos vão de a . O ode45 é colocado em um loop for para não calcular um vetor gigante ao mesmo tempo. A primeira rodada começaria com ode45 (odefun, ) e depois continuaria na próxima vez a partir de . Aqui, a etapa é o meu problema. Escolhas diferentes em etapas de tempo fornecem soluções diferentes de estado fundamental e não tenho idéia de como determinar qual etapa de tempo fornece o "estado" mais correto!
Minha tentativa: percebo que neste esquema grandes etapas de tempo causam a decomposição de um grande número de partículas antes de serem normalizadas novamente para o número original de partículas, enquanto pequenas etapas de tempo causam uma quantidade menor de partículas em decomposição antes de serem normalizadas novamente. Meu pensamento inicial é que pequenos passos no tempo devem fornecer uma solução mais precisa, mas parece ser o oposto.
Como não sou um especialista numérico, a escolha do ode45 foi simplesmente arbitrária. O ode113 me dá a mesma coisa. :(
Alguém tem alguma opinião sobre este assunto. Deixe-me saber se algum detalhe adicional é necessário.
Obrigado.
Atualização 1: Estive pesquisando o método do tempo imaginário e os ODEs. Parece que, se o tempo não for pequeno o suficiente, tudo ficará instável. Isso me faz pensar se minhas equações não lineares são rígidas, o que torna as coisas muito mais difíceis do que eu entendo. Vou mantê-lo atualizado.
Atualização 2: CORRIGIDO: O problema era realmente ter a normalização fora do ODE. Se a normalização for mantida dentro de odefun, o ODE retornará o mesmo resultado para diferentes opções de etapas de tempo "externas". Meu colega me mostrou códigos mais antigos e simplesmente adicionei uma linha no meu odefun.
function y_out = odefun(t,y_in,...variables...)
...
[ Nonlinear equations evaluated ]
...
y_out = y_out + 0.1*y_in*(N0-Ntemp) ;
end
A última linha calcula a diferença no número atual de partículas (Ntemp) e no número de partículas que o sistema deve conter (N0). Ele adiciona uma parte das partículas de volta à saída e, assim, cria uma estabilidade total do número de partículas no sistema, em vez de que todas elas se deteriorem.
Farei também uma nova pergunta sobre a dimensionalidade do problema e algumas diferenças no trabalho com picossegundos ou nanossegundos à medida que o tempo passa na ODE.
Obrigado a todos. :)
ode45()
que permita reter etapas maiores que um determinado limite; Você pode querer olhar para isso.
ode45()
de tomar medidas equivocadas. Por que, exatamente, você está evitando a geração do "vetor gigante"? Se você precisar absolutamente de pontos equidistantes,ode45()
continue como de costume e use a interpolação.