阵列输入的幂级数

Power series with array input

我想在 Matlab 中执行以下操作:

i是虚数单位

r 是长度为 n 的向量:[r(1),...,r(n)]

phi 是 1x300 双精度,即 [phi(1),...,phi(300)]

sum(r(1:n).*(1i.^(1:n))./factorial(1:n))

如果没有 phi,这将起作用。但是我怎样才能在这里实现 phi 呢?

sum(r(1:n).*((phi*1i).^(1:n))./factorial(1:n))

结果:

Matrix dimensions must agree.

预期输出与 phi 大小相同。此代码将实现我想要的,但我希望 n 是动态的,因此循环不可行:

if n==1
    R = r(1) * ( i * phi )
elseif n==2
    R = r(1) * ( i * phi ) + r(2) * ( i * phi ).^2 / 2;
elseif n==3
    R = r(1) * ( i * phi ) + r(2) * ( i * phi ).^2 / 2 + r(3) * ( i * phi ).^3 / 6;
...

你需要转置 phi,然后在最后转置你的结果,这看起来像

s = sum(r(1:n).*((phi.'*1i).^(1:n))./factorial(1:n),2).'

注意 phi 之后的 .' 和末尾的转置。我还在求和中包含了 ,2,以便沿第二个维度求和。

这依赖于implicit expansion创建一个中间矩阵。

phi.'(列数组)和行数组(r(1:n)(1:n)factorial(1:n))之间的运算被计算 element-wise,形成一个矩阵300 x n。然后我们在第二维 (sum(__,2)) 中求和以获得 300x1 输出,最终将其转置回 1x300 输出以匹配您的原始 phi.

鉴于你的例子,你可以这样做

ind_end = min(n, length(phi))
sum(r(1:ind_end).*((phi(1:ind_end)*1i).^(1:ind_end))./factorial(1:ind_end))

这适用于任何 n,避免索引超出 phi 的长度。