【问题标题】:Matrix dimension error while calling mldivide in MATLAB在 MATLAB 中调用 mldivide 时出现矩阵维数错误
【发布时间】:2017-08-08 13:54:21
【问题描述】:

运行代码时出现此错误:

错误使用 ==> 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 的限制

【问题讨论】:

  • 我没有符号数学工具箱,看起来你正在使用它,所以以下问题可能一无所知:(1)是在第一个 plot 还是第二个你得到错误了吗? (2) 如果第一个可以,第二个不行,如果你说omega=2*pi/R/dt;而不是omega*dt==2*pi/R;,这样那里没有方程求解会有帮助吗?
  • 您提供了很多行代码,如果知道您的代码在哪个函数的哪一行失败,将会非常很有帮助。
  • 您好,问题出在第一个脚本的 plot 命令(第一个情节)中。两个情节都给我同样的错误。(我试过 omega=2*pi/R*dt,但是还是一样)

标签: matlab matrix division


【解决方案1】:

如果您的目标是将公式应用于向量 R 中的每个单独的值,那么您应该使用 element-wise arithmetic operators .*./.^ 而不是矩阵运算符*/^

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

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

这意味着您正在使用矩阵 left 除法运算符\,而您显然不是。我在 MATLAB R2010b 中对此进行了测试,我的消息中出现了相同的错误函数名称。我认为这可能只是错误消息中的一个错字,我已经给 MATLAB 人员写了一张便条,让他们查看并清除它。

【讨论】:

  • @George:您是否将 every */ 替换为 .*./
  • @George:那么您不应该仍然收到完全相同的错误消息,除非错误来自您上面未包含的代码的另一部分。您的错误消息还包含哪些其他信息(即行号)?
  • @gnovice:我包括了所有内容。(感谢您的帮助)。以下是其他错误:==> knum 中的错误,在 4 knumber=acos((1/a).^2.* (cos(2.*pi.*a/R)-1)+1); ==> phase_vel 在 5 处的错误 phase_velocity=(2.*pi.*c)/(R.*knum(R,a)); ==> phase_plot 中的错误 8 plot(R,phase_vel(R,a)/c)
  • @gnovice:我才意识到我没有使用 .在每个 / !!对不起!我错过了!现在,没关系!感谢您的帮助!
【解决方案2】:

我没有符号数学工具箱,但您的问题似乎是您正在使用plot,这是一个可以处理数字数组并将符号计算结果提供给它的函数。查看 Matlab 帮助,其中主题 Creating Plots of Symbolic Functions 建议使用 ezplot()。或者,您需要评估某些输入值的符号表达式以创建 plot 可以处理的数字数组 - 但您不能使用 double() ,因为它不知道要插入哪些数字到您的变量中.

【讨论】:

  • 您好,ezplot 采用函数句柄(如果我没记错的话),但我有两个要保留的函数。至于您所说的创建数组的输入值,我不明白你什么意思。
  • 如果我正确阅读了您的代码,您正在尝试绘制您的函数 phase_vel,其中 R 从 0 到 40。这根本不是语法图可以处理的。正如我所说,我不能在这里测试它,试一试: plot(0:40,double(phase_vel((0:40),a)/c) ... 这试图传递一个 R- 数组值到您的函数,将结果转换为双精度(即数字)数组并将这些传递给绘图函数。
  • 你好,谢谢你的帮助。我试过了,它给了我“错误使用 ==> mupadmex MuPAD 命令中的错误:DOUBLE 无法将输入表达式转换为双精度数组。”
猜你喜欢
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多