运行 复杂矩阵上的 feval()

Running feval() on a complex matrix

我正在关注 Varodom Toochinda (a.k.a Dew) 的教程 here。但是我想对这段代码进行矢量化:

f = linspace(0.01, 1, 1000); // frequency vector (Hz)
w = 2 * %pi * f;  // convert to rad/s
Pmag = zeros(1, 1000); Pph = zeros(1, 1000);
for k=1:1000, // compute P(jw) at each frequency point
  P = 1 / (-10 * w(k)^2 + 0.1 * %i * w(k)); 
  [Pmag(k), Pph(k)] = polar(P);
end

f = linspace(0.01, 1, 1000); // frequency vector (Hz)
w = 2 * %pi * f;  // convert to rad/s
P = 1 ./ (-10 * w.^2 + 0.1 * %i * w);
[Pmag, Pph_rad] = feval(P, polar);

但我明白了

feval: Wrong number of output argument(s): 1 expected.

错误。如果我只尝试 feval(P, polar) 命令,我会得到

feval: Wrong type for input argument #1 : A real matrix expected.

错误信息。如果您能帮助我了解问题所在以及如何解决,我将不胜感激。

feval() help page 中所述(相当差,但无论如何):

  1. f 是一个[外部](函数或例程)接受一个或两个参数,这些参数应该是真实的
  2. 接受的概要是 z = feval(x,y,f)z = feval(x,f) 仅支持一个输出参数t。所以,[Pmag, Pph_rad] = feval(P, polar);不能是合法的调用。

对于您的用户案例,由于 polar 仅以非必需的矩阵方式工作,因此请避免使用它:

P = 1 ./ (-10 * w.^2 + 0.1 * %i * w);
[Pmag, Pph] = (abs(P), atan(imag(P),real(P)));

关于 polar 的演变,请随时评论报告 #13486 and #16806