MATLAB中调用mldivide时的矩阵维数错误

MATLAB中调用mldivide时的矩阵维数错误,matlab,matrix,division,Matlab,Matrix,Division,我在运行代码时遇到此错误: 使用==>mldivide矩阵维度时出错必须一致 这是我的密码: %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')

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

使用==>mldivide矩阵维度时出错必须一致

这是我的密码:

%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的极限,我没有符号数学工具箱,但你的问题似乎是你在使用一个函数,它可以处理数字数组,并将符号计算的结果提供给它。查看Matlab帮助,主题建议使用
ezplot()
。或者,您需要对特定输入值的符号表达式求值,以创建可以处理的数字数组,但不能使用double()如果你的目标是将你的公式应用于向量
R
中的每个值,那么你应该使用
*
/
^
而不是矩阵运算符
*
,来执行所有的计算,
/
^

您的错误可能发生在对函数
knum
的第一次调用中,特别是在您尝试计算
2*pi*a/R
时。由于
2*pi*a
是单个标量值,因此尝试使用行向量
R
执行
/
时会出现错误。真正奇怪的是错误消息:

??? Error using ==> mldivide
Matrix dimensions must agree.

这意味着您使用的是矩阵左除运算符
\
,而您显然不是。我在MatlabR2010B中对此进行了测试,结果发现消息中出现了相同的错误函数名。我想这可能只是错误信息中的一个输入错误,我已经给MATLAB的人写了一个便条,让他们看一下并把它弄清楚。

我没有符号数学工具箱,看起来你正在使用它,所以下面的问题可能是不清楚的:(1)是在第一个
绘图中还是在第二个绘图中你得到了错误?(2) 如果第一个是可以的,第二个不是,那么说ω=2*pi/R/dt有帮助吗而不是
omega*dt==2*pi/R
这样就没有方程求解了?你提供了很多行代码,如果知道你的代码在哪一行函数中失败,那将非常有帮助。您好,问题就出在第一个脚本的plot命令(第一个plot)中。两个plot都给了我相同的错误。(我尝试了omega=2*pi/R*dt,但仍然相同)您好,ezplot接受函数句柄(如果我没有错的话),但我有两个函数要保留。至于你说要创建数组的输入值,我不明白你的意思。如果我正确地阅读了你的代码,你是在试图用R从0到40来绘制你的函数相位。这根本不是一个语法图可以处理的问题。正如我所说,我无法在这里测试它,请尝试一下:plot(0:40,double(phase_-vel((0:40),a)/c)…这尝试将一个R值数组传递给函数,将结果转换为双(即数字)数组,并将其传递给plot函数。您好,感谢您的帮助。我尝试了它,它给了我“在MuPAD命令中使用==>mupadmex时出错:DOUBLE无法将输入表达式转换为DOUBLE数组。“@George:您是否将所有
*
/
替换为
*
/
?@George:那么您不应该仍然收到完全相同的错误消息,除非错误来自上面未包含的代码的另一部分。还有什么其他信息(即行号)您的错误消息是否包含?@gnovice:I包含了所有内容。(谢谢帮助)。以下是其他错误:错误在==>4 knum=acos((1/a)。^2.*(cos(2.*pi.*a/R)-1)+1);错误在==>5相速度时的相速度=(2.*pi.*c)/(R.*knum(R,a));错误在==>8相速度时的相图(R,相速度(R,a)/c)@gnovice:我刚刚意识到我没有使用。在每一个/!!对不起!我错过了它!现在,它是好的!谢谢你的帮助!