伪谱余弦变换

计算科学 matlab 谱法
2021-12-26 21:45:10

我正在尝试 使用傅里叶余弦变换非线性项给出了我宁愿避免的卷积,这就是我想尝试伪谱方法的原因。

ut=uxx+u(1u2),ux(±1)=0,

在 MATLAB 我有以下脚本(尽可能简化)

function TestCosineSeries()

Nx = 32;
x = linspace(-1,1,Nx)';
f = tanh(1000*x);

dt = 1e-3;
Nt = 100;

for k = 1 : Nt

    t = k*dt
    [t,y] = ode45(@(t,y)RHS(t,y,L),[0 dt],f);
    f = y(end,:);

end

end

function duout = RHS(t,u,L)

N = length(u);

uhat = fft(u);
kappa = fftshift((-N/2:N/2-1)');
DDuhat = -pi^2*kappa.^2.*uhat;

DDu = ifft(DDuhat);

duout = DDu + (1-u.^2).*u;

end

我想我在使用余弦系列时做错了(也许我不能使用 FFT)。任何帮助,将不胜感激!

0个回答
没有发现任何回复~