1

我想在 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))

结果是:

矩阵尺寸必须一致。

预期输出的大小与 相同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;
...
4

2 回答 2

0

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

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

注意转置的.'后面phi和结尾。我还包括,2在第二维的总和中。

这依赖于隐式扩展来创建中间矩阵。

phi.'(列数组)和行数组(r(1:n)(1:n)factorial(1:n))之间的操作是按元素计算的,生成的矩阵是300 x n。然后我们在第 2 维 ( sum(__,2)) 中求和以获得300x1输出,最终将其转回1x300输出以匹配您的原始phi

于 2022-03-02T11:00:44.387 回答
-1

鉴于你的例子,你可以做

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.

于 2022-03-02T12:12:25.653 回答