当前位置: 首页 > 计算模拟 >matlab程序, 被调用函数中使用 if 语句出错

matlab程序, 被调用函数中使用 if 语句出错

作者 hylb3020
来源: 小木虫 150 3 举报帖子
+关注

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进行分类,程序一直运行不出来。希望得到大家的指点,不胜感激。 返回小木虫查看更多

今日热帖
  • 精华评论
  • 独孤神宇

    if 后面t<20的括号去掉

  • hylb3020

    引用回帖:
    2楼: Originally posted by 独孤神宇 at 2021-06-29 19:41:51
    if 后面t<20的括号去掉

    呀,确实是这个原因。感谢啊  很久没有上小木虫了,也不知道怎样把金币给你

  • hylb3020

    引用回帖:
    2楼: Originally posted by 独孤神宇 at 2021-06-29 19:41:51
    if 后面t<20的括号去掉

猜你喜欢
下载小木虫APP
与700万科研达人随时交流
  • 二维码
  • IOS
  • 安卓