0

当我尝试h在 MATLAB 中绘制一个函数时,使用一个omega定义为它自己的函数的变量,我得到Inner matrix dimensions must agree, error using _*_了控制台的响应。

当我在 ; 的单独功能组件之间使用 a 时,该功能+起作用 h当我尝试将 中的两个内部函数相乘时它不起作用h,根据我的猜测,这是导致矩阵暗淡错误的原因。

    function h = freqp(omega)

    k = (1:1024-1);
    hh = (1:1024-1);
    omega = zeros(length(k),1);
    omega = (k-1)*((2*pi)/1024);

    hh = 2*exp((-3j)*omega)*cos(omega); % This works for ...omega) + cos(...
                                        % but not for ...omega) * cos(, why?
    y = fft(hh);
    stem(real(y), omega);

我该如何解决这个问题?我阅读了有关 mathworks 的信息,但它只提供了一个解决方案,例如加载文件。任何帮助将不胜感激!

4

2 回答 2

0

由于 Omega 是向量,因此加法有效。但是两个向量的乘法将产生一个矩阵。你可以修改

                 hh = 2*exp((-3j)*omega)*cos(omega);

作为

                 hh = 2*exp((-3j)*omega)*(cos(omega))';

或寻找元素明智的乘法,使用

                 hh = 2*exp((-3j)*omega).*cos(omega);
于 2013-11-08T02:26:37.840 回答
0

该部分exp((-3j)*omega工作正常,因为-3j它是一个复杂的标量和omega一个向量。因此,MATLAB 将 的每个元素omega与 -3i 相乘。但是,该结果本身就是一个向量。也是cos(omega)一个向量,并且都是行向量。

在这种情况下,对于两个向量,-*运算符表示点积,但这将在列向量和行向量之间计算,而不是在两个行向量之间计算。因此,[1 2 3] * [4 5 6]将引发您报告的相同错误,但[1 2 3] * [4 5 6]'产生 32。

然而,从调用您ffthh代码看起来,好像您从未打算计算点积(标量),而是在寻找逐元素乘法。逐元素乘法的运算符是.*,这样您的表达式将改为

hh = 2*exp((-3j)*omega).*cos(omega);
于 2013-11-08T02:26:37.937 回答