阵列输入的幂级数
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
的长度。
我想在 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
的长度。