Estou tentando encontrar alguns recursos para ajudar a explicar como escolher condições de contorno ao usar métodos de diferenças finitas para resolver PDEs.
Os livros e notas aos quais tenho acesso atualmente dizem coisas semelhantes:
As regras gerais que governam a estabilidade na presença de limites são muito complicadas para um texto introdutório; eles exigem maquinaria matemática sofisticada
(A. Iserles, um primeiro curso de análise numérica de equações diferenciais)
Por exemplo, ao tentar implementar o método de salto em duas etapas para a equação de advecção:
usando MATLAB
M = 100; N = 100;
mu = 0.5;
c = [mu 0 -mu];
f = @(x)(exp(-100*(x-0.5).^2));
u = zeros (M, N);
x = 1/(M+1) * (1:M);
u(:,1) = f(x);
u(:,2) = f(x + mu/(M+1));
for i = 3:N
hold off;
u(:,i) = conv(u(:,i-1),c,'same') + u(:,i-2);
plot(x, u(:,i));
axis( [ 0 1 0 2] )
drawnow;
end
A solução se comporta bem até atingir o limite, quando de repente começa a se comportar mal.
Onde posso aprender a lidar com condições de contorno como essa?
fonte
Resposta geral
Seu problema é que você não define (nem sequer especifica) as condições de contorno - seu problema numérico está mal definido.
Geralmente, existem duas maneiras possíveis de especificar as condições de contorno:
O caminho a seguir depende muito da física do seu problema. Para problemas do tipo equação de onda, geralmente determina-se os valores próprios do fluxo jacobiano para decidir se são necessárias condições de contorno externas ou se a solução interior deve ser usada (esse método é geralmente chamado de 'upwinding').
Você pode encontrar uma versão modificada do seu código-fonte abaixo:
fonte
N = 1000
e executar o código um pouco mais, descobrirá que ele não se comporta exatamente como o esperado.Portanto, analisei isso com mais detalhes e parece que isso (pelo menos nos casos básicos com os quais estou lidando) depende da velocidade do grupo do método.
O método leapfrog (por exemplo) é:
Agora precisamos descobrir a velocidade do grupo das condições de contorno:
Podemos calcular a velocidade do grupo de fronteira da seguinte maneira:
Então, para encontrar algumas velocidades de grupo que os limites permitem, precisamos encontrar:
Ainda tenho muito a ler sobre isso antes de entender completamente. Penso que as palavras-chave que procuro são a teoria GKS.
Fonte para tudo isso notas de A Iserles Part III
Um cálculo mais claro do que eu fiz pode ser encontrado aqui: http://people.maths.ox.ac.uk/trefethen/publication/PDF/1983_7.pdf
fonte
Pessoal, sou muito novo neste site. Talvez este não seja o lugar para perguntar, mas, por favor, me perdoe, porque sou muito novo aqui :) Estou tendo um problema extremamente semelhante, a única diferença é a função inicial que, no meu caso, é uma onda cosseno. Meu código é este: limpe tudo; clc; feche tudo;
M = 1000; N = 2100;
mu = 0,5;
c = [mu 0-mu]; f = @ (x) 1- cos (20 * pi * x-0,025). ^ 2; u = zeros (M, N); x = 0: (1 / M): 0,05; u (1: comprimento (x), 1) = f (x); u (1: comprimento (x), 2) = f (x - mu / (M)); x = espaço interno (0,1, M);
para i = 3: N adie;
plot (x, u (:, i)); desenho do eixo ([0 1,5 -0,5 2]); % final de pausa
Já existe esse código aqui, mas por algum motivo, provavelmente relacionado à onda cosseno, meu código falha: / qualquer ajuda seria apreciada :) obrigado!
fonte