在MATLAB中调用mldivide时的矩阵尺寸错误

时间:2011-03-29 11:01:50

标签: matlab matrix division

我在运行代码时收到此错误:

  
    

使用==>时出错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

的极限

2 个答案:

答案 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(),因为它不知道插入的数字是什么你的变量。