Правильный ли мой код для этого пространственно-центрированного приближения? - PullRequest
0 голосов
/ 07 мая 2019

Я должен найти количество временных шагов, то есть количество предпринятых шагов, но мой ответ неверен, любые входные данные в моем коде окажут большую помощь, спасибо. Также правильно ли используется уравнение адвекции с методом с центральным интервалом? Программа Matlab

N=200;
x=linspace(-10,10,N);
dx=x(2)-x(1);
c=-0.9;
t=0;
dt=0.2;
timestep=0;
f=@(x)exp(-5*x.^2);
y=f(x)';
figure(1),plot(x,y)
title(['Current time=',num2str(t)])
drawnow

используя центрированное пространство (это где я думаю, что неправильно)

A=eye(N)-(c*(dx/dt))*((diag(ones(N-1,1),1)-diag(ones(N-1,1),-1))/(2*dx));

%time ends when y goes to 0.01

while abs(y(end))<0.001 && abs(y(1))<0.001
y=A*y;
t=t+dt;
timestep=timestep+1;
figure(1),cla
plot(x,y)
hold on
plot(x,f(x-c*t),'r')
title(['Current time=',num2str(t)])
drawnow
end

1 Ответ

0 голосов
/ 07 мая 2019

Это результат числовой нестабильности, поэтому любая небольшая ошибка каждого вашего шага будет экспоненциально расти до бесконечности.

Имитируемое PDE - 1D Уравнение конвекции .Схема конечных разностей, которую вы используете, - это FTCS для прямого времени-центрированного пространства (т.е. вы используете следующее время и текущее время для оценки разницы во времени и используете левое и правое пространство для оценки разницы в пространстве). FTCS всегда нестабильна при решении уравнений конвекции.

Если вы хотите получить стабильные решения, для условий c<0 вы можете попробовать FTFS (использовать текущее пространствои правое пространство, а не левое и правое).Таким образом, ваша матрица А должна выглядеть следующим образом:

A=eye(N)-(c*(dt/dx))*((diag(ones(N-1,1),1)-diag(ones(N,1),0)));

(Если вы не используете это уравнение, просто измените то, что вы хотите использовать)

Кроме того, чтобы сделать FTFS стабильной, вы должны убедиться: abs(c*dt/dx)<1 верно.Измените dt и dx, если это не так.

По-видимому, если c> 0, вы должны использовать FTBS для Forward-time-Backward-Space.

Для получения дополнительной информации вы можете получить доступ клюбые книги о численном решении PDE.

Надежды на помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...