提问人:user22178063 提问时间:9/20/2023 最后编辑:user22178063 更新时间:9/20/2023 访问量:73
如何计算幂和元素乘法?
How to calculate powers and element-wise multiplication?
问:
我需要将以下行从 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))
答:
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 中获取虚数单位:、 或 。i
j
complex(0, 1)
要获得 R 中的虚数单位:或 。1i
complex(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
评论
srate
z <- exp(1i)^(powers*omega)
exp(1i*powers*omega)