【问题标题】:Matrix Multiplication Error: Matrix dimensions must agree矩阵乘法错误:矩阵维度必须一致
【发布时间】:2017-11-07 13:56:55
【问题描述】:

我有这个代码:

function main()
   a = 1.0e+04 * [0.005055052938847,0.010897917816899,0.022355965424711,0.043081981439108,0.077074049394439,0.127074049394439,0.193081981439108,0.272355965424711,0.360897917816899,0.455055052938847,0.552256864601221,0.650978664311931,0.750415022011379,0.850172973479352,0.950071110045004,1.050028912038499,1.150011648830086]
   B = 1.0e+04 * [1.215101736363023,0.697166188613023,0.400000000000000,0.229500515964941,0.131676217070435,0.075549399394941,0.043346565354951,0.024870147785673,0.014269279372341,0.008187017446000,0.004697311820178,0.002695088715947,0.001546310627203,0.000887197716963,0.000509030834515,0.000292057097908,0.000167568136653
   m = timeloop(a,B);
end

function m = timeloop(a,B)
   st = zeros(49,4);
   t = 0:0.001:0.05;
   for i = (1:49)
       st(i+1,1:4) = next_state(st(i,1:4),a,B,1e-4);
   end 
   m = mean(prod(state,2))
end

function next_state = next_state(state,alpha,beta,dt)
   nch = size(state,2);
   p01 = rand(1,nch);
   alphadt = repmat(alpha,1,nch)*dt;
   betadt = repmat(beta,1,nch)*dt;
   next_state1 = (p01<alphadt) .* (state==0);
   next_state0 = (p01<betadt) .* (state==1);
   next_state = state + next_state1 - next_state0;
end

但它给了我以下错误:

矩阵尺寸必须一致。

q3&gt;next_state 中的错误(第 59 行)
next_state1 = (p01&lt;alphadt) .* (state==0);

q3&gt;timeloop 中的错误(第 49 行)
st(i+1,1:4) = next_state(st(i,1:4),a,B,1e-4);

q3 中的错误(第 4 行)
m = timeloop(a,B);

run 中的错误(第 86 行) evalin('caller', [script ';']);

我尝试将乘法更改为 *,但没有任何改进。我查找的online 似乎无法帮助我。我不太了解 MATLAB,所以您的解释必须非常具体。

【问题讨论】:

  • 在发布尝试的解决方案之前,应解释实际问题。这样可以更轻松地调试您尝试的解决方案并提供替代/更好的解决方案

标签: matlab matrix matrix-multiplication


【解决方案1】:

如果您调试过您的代码,您很快就会意识到问题所在。

next_state 中的alphamain 中的a 相同,表示大小为 1x3。

然后您使用repmat(alpha,1,4) 创建alphadt,因此它的大小为1x12。

然后您尝试执行以下操作

(p01<alphadt) .* (state==0)
%   1x12      .*    1x3

正如错误明确指出的那样,您的矩阵尺寸不一致。

因为您没有为您想要实现的目标提供任何背景信息,所以解决方案应该是什么并不明显。也许您还想在state 上使用repmat,或者循环来自a 的单个值。

【讨论】:

  • 好的,抱歉,我发布了一些示例数字,以使我的问题看起来更容易,我不知道新数字是否有影响,但它们在这里,
  • 我有点困惑你所说的循环 a 中的单个值是什么意思。
  • 你想达到什么目的?如果你有一个循环环绕你的i 循环,看起来像for k = 1:numel(a) 然后将a(k) 传递给你的函数而不是a,那么你就不会出错。但是,我不知道这是否实现了您想要的,因为您还没有说出那是什么,并且在当前的形式下,您不会存储所有输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
  • 1970-01-01
  • 2021-12-07
  • 2015-01-20
  • 2013-11-03
  • 1970-01-01
相关资源
最近更新 更多