如何计算幂和元素乘法?

How to calculate powers and element-wise multiplication?

提问人:user22178063 提问时间:9/20/2023 最后编辑:user22178063 更新时间:9/20/2023 访问量:73

问:

我需要将以下行从 Matlab 转换为 R

  z=(exp(j)).^(pw.*om)

在matlab代码中,有幂(.^)和乘法(.*)

我不知道两者在 r 中是如何应用的

数据:

  rt=10000
  f=200
  om = 2*pi*f/rt
  t = seq(0,1,length.out=rt)
  pw = c(1:length(t))

这里有一些尝试,但他们没有提供正确的数据

  zt=c(exp(sqrt(as.complex(-1))),(pw**om))

  zt=c(exp(sqrt(as.complex(-1))),`^`(pw,om))

这不起作用

  zt=c(exp(sqrt(as.complex(-1))),`^`(pw*om))
    
R MATLAB 数学 信号处理

评论

0赞 Stéphane Laurent 9/20/2023
为什么要加逗号?这是一种乘法。
0赞 jblood94 9/20/2023
@user22178063 未定义。srate
0赞 user22178063 9/20/2023
@StéphaneLaurent代码不适用于乘法
1赞 jblood94 9/20/2023
尝试。等效地,.z <- exp(1i)^(powers*omega)exp(1i*powers*omega)
0赞 user22178063 9/20/2023
@jblood94它起作用了。非常感谢

答:

0赞 Amir Mohammad Taghizadegan 9/20/2023 #1

数组乘法运算符简单在 R 中,矩阵乘法运算符是 。由于矩阵实际上并不存在除法,因此您可以进行 devision 和整数 devision 或获得 qoutient。而权力只是^对于任何事情。 例如:*%*%/%/%

a <- 1:5
b <- 1:5
c <- a * b
d <- a / b
e <- a ^ b
f <- a ^ 2
2赞 jblood94 9/20/2023 #2

将 MATLAB 代码转换为 R:

虚数

要在 MATLAB 中获取虚数单位:、 或 。ijcomplex(0, 1)

要获得 R 中的虚数单位:或 。1icomplex(1, 0, 1)

元素操作

对于 MATLAB 中的元素运算,请在运算符前面加上 (例如,或 )。..^.*

R 中的算术运算符始终是元素级的。

最终翻译

因此,在MATLAB中变成了R。z=(exp(j)).^(pw.*om)z <- exp(1i)^(pw*om)


旁注

请注意,因此我们可以简化表达式,提高性能,并使用 获得更好的精度。exp(x)^y == exp(x*y)z <- exp(1i*pw*om)

使用 MATLAB 比较精度:

format long
disp(prod(exp(i).^(1:1e5)))
disp(prod(exp((1:1e5)*i)))
disp(double(prod(exp(vpa(i)).^vpa(1:1e5))))
disp(double(prod(exp(vpa(i).*vpa(1:1e5)))))

返回

0.269134310362641 + 0.963102827984568i
0.269134003140172 + 0.963102740289812i
0.269134003140168 + 0.963102740289813i
0.269134003140168 + 0.963102740289813i

在 R 中使用比较性能:microbenchmark

microbenchmark::microbenchmark(
  z1 = exp(1i)^(pw*om),
  z2 = exp(1i*pw*om)
)
#> Unit: microseconds
#>  expr   min     lq    mean median     uq    max neval
#>    z1 796.4 813.75 831.254 823.00 838.35 1095.4   100
#>    z2 467.8 520.65 536.049 527.25 535.85  735.0   100