clear all; close all;
l=45;
alpha1=-0.25;
lambda1=0.25;
n=128;
x=l/n*[-n/2:n/2-1]; y=x;
kx=(2*pi/l)*[0:n/2-1 -n/2:-1];
kx(1)=1e-6; ky=kx;
[x,y]=meshgrid(x,y);
[kx,ky]=meshgrid(kx,ky);
h=2*pi/n;
column=[00.5*(-1).^(1:n-1).*cot((1:n-1)*h/2)]';
d=(2*pi/l)*toeplitz(column,column([1n:-1:2]));
column=[-pi^2/(3*h^2)-1/6-0.5*(-1).^(1:n-1)./sin(h*(1:n-1)/2).^2];
d2=(2*pi/l)^2*toeplitz(column);
column=[0 (-1).^(1:n-1).*cot((1:n-1)*h/2).*(-pi^2/(2*h^2)+3/4*csc((1:n-1)*h/2).^2)]';
w=1+0.1*cos(0.31*x)+0.1*cos(0.31*y);%初始条件
t=[0 17 17.5 18 19 20 21 22 23 25 30 40]
[t,wsol]=ode45('advection_diffusion', t, w( : ),[],n,d,d2,alpha1,lambda1,x);
advection_diffusion.m
function dw=advection_diffusion(t,w,dummy,n,d,d2,alpha1,lambda1, x);
w=reshape(w,n,n); wt=fft2(w);
if (t<=20)
dw=reshape(i*(alpha1*d2*w+lambda1*w*d2')+t,n^2,1);
else
dw=reshape(i*(alpha1*d2*w+lambda1*w*d2')-t,n^2,1);
end
我想求解一个偏微分方程,变量t 取了12个值,在被调用的函数 advection_diffusion 中需要用到一个 if 语句,对 t进行分类,程序一直运行不出来。希望得到大家的指点,不胜感激。 |