MATLAB矩阵乘法维度不兼容报错:xx与h'长度均为50仍异常
错误原因解析
矩阵乘法维度不匹配的根源
你看到length(xx)和length(h')都是50,但MATLAB的矩阵乘法*只认向量的行/列形状,不看长度:
- 若输入
x是列向量(N×1),xx=x(k+rP)提取出的是P×1的列向量; - 若
h0是行向量(1×P),h'就会变成P×1的列向量; - 此时
xx*(h')是列向量乘列向量,矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数,这里1≠P,直接触发维度错误。
替换.*或h后报错的原因
- 用
.*替换*时,MATLAB会对不同形状的向量做广播运算:比如P×1列向量和1×P行向量会生成P×P的矩阵,而y(k)是单个标量位置,无法容纳矩阵,因此报错“左右元素数不同”。 - 直接用
h代替h'时,若xx和h都是列向量,xx.*h会得到P×1的向量,同样无法赋值给单个标量y(k),导致相同错误。
核心问题
你要实现的是向量内积(得到标量),必须保证xx和h一个是行向量、一个是列向量:
- 如果
xx是行向量(1×P),就用xx * h(h需为列向量P×1); - 如果
xx是列向量(P×1),就用xx' * h(h需为行向量1×P)。
检查输入参数h0和x的形状,确保循环中xx与h的方向匹配,满足内积的维度要求。
内容的提问来源于stack exchange,提问作者A.wilson
相关产品推荐
相关产品推荐

