Как исправить ‘Внутренние размеры матрицы должны соответствовать - PullRequest
0 голосов
/ 24 января 2019
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));

// Ошибка при использовании * // Размеры внутренней матрицы должны совпадать.

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

1 Ответ

0 голосов
/ 25 января 2019

.* - элементный оператор, randn(n) возвращает массив размера n, 0,5 - скаляр, Matlab не транслируется автоматически как numpy.

Если вы хотите, чтобы каждый элемент умножалсяна 0,5 вы можете сделать это напрямую, и если вам нужно использовать широковещание, посмотрите на fuction bsxfun(fun,A,B), однако bsxfun склонен к проблемам с памятью, поэтому будьте осторожны.Но он имеет мощное неявное расширение.

Чтобы узнать больше о bsxfun посещении https://www.mathworks.com/help/matlab/ref/bsxfun.html

Если это не решит вашу проблему, вам может потребоваться предоставить немного больше вашихкод или переменная информация, присутствующая в рабочей области.

PS: широковещание обычно называется расширением в документах Matlab, и это происходит из-за того, что меньший массив «транслируется» или «расширяется» по большому массиву, так чтоони имеют совместимые формы.В большинстве случаев это расширение является чисто символическим и фактически не помещает больше переменных в область видимости, а просто повторяет (повторно использует) имеющиеся переменные.

...