我正在尝试使用Kutta-Merson来获得与Solitons、Nonlinear Evolution Equations and Inverse Scattering - MJ Ablowitz - pg 140一书中相同的结果
作者建议在以下方案中使用 Kutta-Merson:
给定的周期性条件和以下初始条件
在哪里是区间的长度和
我对 PDE 的这种方法不是很熟悉,但这是我尝试做的,使用 scilab:
我使用 scilab 函数定义了拉普拉斯算子和非线性,并将该方案以库塔方法的形式
我使用周期性条件来定义 F。这是拉普拉斯算子:
function l =L(u)
A = zeros(M+1,M+1)
// Condição periódica imposta ao laplaciano
A(1,1) = -2; A(1,2) = 1; A(1,M+1) = 1
for j=2:M
A(j,j-1) = 1; A(j,j) = -2; A(j,j+1) = 1
end
A(M+1,1) = 1; A(M+1,M) = 1; A(M+1,M+1) = -2
A = h^(-2)*A
l = A*u
endfunction
这是非线性热
function n = N(u)
n(1) = abs(u(1))^2 * (u(M+1) + u(2))
for j=2:M
n(j) = abs(u(j))^2 *(u(j-1) + u(j+1))
end
n(M+1) = abs(u(M+1))^2 * (u(M) + u(1))
endfunction
则 F 变为:
function f = F(u)
f = %i*(L(u) + N(u))
endfunction
最后我用它来计算解决方案
for n=1:Nt
k1 = k*F(U(:,n))
k2 = k*F(U(:,n) + 1/3*k1)
k3 = k*F(U(:,n) + 1/6*k1 + 1/6*k2)
k4 = k*F(U(:,n) + 1/8*k1 + 3/8*k3)
k5 = k*F(U(:,n) + 1/2*k1 - 3/2*k3 + 2*k4)
U(:,n+1) = U(:,n) + 1/6*k1 + 2/3*k4 + 1/6*k5
end
我在时间网格使用 5000 个点,在 x-grid 使用 20 个点。我真的一无所知,所以如果我在做一些奇怪的事情,请告诉我并推荐一些关于它的材料
