首页 > 解决方案 > 如何修复'内部矩阵尺寸必须一致

问题描述

s = 1000;
t = linspace(0,1,Fs);
x = cos(2*pi*100*t)+0.5.*randn(size(t));
fc = 150;
Wn = (2/Fs).*fc;
b = fir1(20,Wn,'low',kaiser(21,3));

//Error using * //内部矩阵尺寸必须一致。

https://stackoverflow.com/questions/25778027/inner-matrix-dimensions-must-agree

标签: matlab-guide

解决方案


.*是一个元素明智的运算符,randn(n)返回一个大小为 n 的数组,0.5 是一个标量,matlab 不像 numpy 那样自动广播。

如果你想让每个元素都乘以 0.5,你可以直接这样做,如果你必须使用广播查看函数bsxfun(fun,A,B),但是bsxfun容易出现内存问题,所以要小心。但它启用了强大的隐式扩展。

要了解更多关于bsxfun访问https://www.mathworks.com/help/matlab/ref/bsxfun.html

如果这不能解决您的问题,您可能需要提供更多工作区中的代码或变量信息。

PS:广播在matlab文档中通常被称为扩展,它来自于较小的数组在较大的数组中“广播”或“扩展”,以便它们具有兼容的形状。在大多数情况下,这种扩展纯粹是象征性的,实际上并没有在范围内放置更多变量,而只是重复(重用)存在的变量。


推荐阅读