我在运行代码时收到此错误:
使用==>时出错mldivide Matrix维度必须一致。
这是我的代码:
%make the plots of phase and group velocity vs discreteness of the grid
c=1;
a=input('Please enter the ratio cdt/dx : ')
figure(1)
R=2:40;
plot(R,phase_vel(R,a)/c)
xlabel('R=l/dx')
ylabel('u_phase/c')
%figure(2)
%plot(group_vel(R,a),R,0,40)
%xlabel('R=l/dx')
%ylabel('u_group/c')
这是我的职能:
function phase_velocity = phase_vel(R,a)
%numerical phase velocity of the discrete wave
c=1;
phase_velocity=(2*pi*c)/(R*knum(R,a));
end
function group_velocity =group_vel(R,a )
%numerical group velocity of the discrete wave
c=1;
group_velocity=(a*sin(knum(R,a)))/(sin(2*pi*a/R))
end
function knumber = knum(R,a)
%This is the k wave number
knumber=acos((1/a)^2*(cos(2*pi*a/R)-1)+1);
end
如何解决此错误?
编辑:我用过。每个等式中的算子,我改变了R = 4:40
的极限答案 0 :(得分:2)
如果您的目标是将公式应用于向量R
中的每个单独值,那么您应该使用element-wise arithmetic operators .*
,./
执行所有计算和.^
代替矩阵运算符*
,/
和^
。
您的错误可能是在您对函数knum
的第一次调用中发生的,特别是在您尝试计算2*pi*a/R
时。由于2*pi*a
是单个标量值,因此在尝试使用行向量/
执行matrix right division R
时会出错。 真的奇怪的是错误信息:
??? Error using ==> mldivide
Matrix dimensions must agree.
这意味着你正在使用矩阵左除法运算符\
,你显然不是。我在MATLAB R2010b中对此进行了测试,并且在我的消息中出现了相同的错误函数名称。我认为这可能只是错误消息中的拼写错误,我已经给MATLAB人员留下了一个注释,以便查看并清除它。
答案 1 :(得分:0)
我没有符号数学工具箱,但你的问题似乎是你正在使用plot
,这个函数可以处理数字数组,并为它提供符号计算的结果。请查看Matlab帮助,主题Creating Plots of Symbolic Functions建议使用ezplot()
。或者,您需要评估某些输入值的符号表达式,以创建plot
可以处理的数字数组 - 但是您不能使用double(),因为它不知道插入的数字是什么你的变量。