L=1; Nx=51; PeriodicFlag=1; T=15; Nt=51;
spacedef='Pade6FirstDeriv'; casedef='LinearAdvection';
if (spacedef == 'Pade6FirstDeriv')
D1 = sparse(Pade6(Nx,dx,PeriodicFlag));
elseif (spacedef == 'Upwind3FirstDeriv')
D1 = sparse(Upwind3(Nx,dx,PeriodicFlag));
elseif (spacedef == 'Central4FirstDeriv')
D1 = sparse(Central4(Nx,dx,PeriodicFlag));
elseif (spacedef == 'Central2FirstDeriv')
D1 = sparse(Central2(Nx,dx,PeriodicFlag));
else
error(sprintf('Unknown spacedef = %s',spacedef));
end
在上面的代码中,if部分是我构建的函数的一小部分。我试图让函数根据我的输入(spacedef)知道要使用哪些方法。 Central2,Central4,Upwind3和Pade6是我写过的其他功能。奇怪的是,当spacedef = / = to' Pade6FirstDeriv'时,我会得到一个错误,指出错误使用==,Matrix维度必须同意。我已经尝试交换if循环的顺序(通过在循环的第一行放置Central4,Central2,Pade6和Upwind3),似乎只有循环的顶行才能工作(elseifs是不工作)。如果有人可以帮助我,我会非常感激。谢谢!
答案 0 :(得分:1)
正如评论中所指出的,当人们第一次开始在MATLAB中比较字符串时,这是一个常见错误,而strcmp
或strcmpi
通常是解决方案。
然而,评论中的问题链接的一个解决方案没有出现,我认为看起来更好的解决方案是switch
声明:
switch (spacedef)
case('Pade6FirstDeriv')
D1 = sparse(Pade6(Nx,dx,PeriodicFlag));
case('Upwind3FirstDeriv')
D1 = sparse(Upwind3(Nx,dx,PeriodicFlag));
case('Central4FirstDeriv')
D1 = sparse(Central4(Nx,dx,PeriodicFlag));
case('Central2FirstDeriv')
D1 = sparse(Central2(Nx,dx,PeriodicFlag));
otherwise
error(sprintf('Unknown spacedef = %s',spacedef));
end
注意:如果我希望其他人使用我的代码进行字符串比较,我通常会lower
输入,以便比较不区分大小写,尽管我在这里没有这样做。