当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R complex 复数和基本函数


R语言 complex 位于 base 包(package)。

说明

支持复杂算术的基本函数R,除了算术运算符+,-,*,/, 和^.

用法

complex(length.out = 0, real = numeric(), imaginary = numeric(),
        modulus = 1, argument = 0)
as.complex(x, ...)
is.complex(x)

Re(z)
Im(z)
Mod(z)
Arg(z)
Conj(z)

参数

length.out

数字。输出向量的所需长度,根据需要回收输入。

real

数值向量。

imaginary

数值向量。

modulus

数值向量。

argument

数值向量。

x

一个对象,可能是 complex 模式。

z

模式 complex 的对象,或已定义方法的类之一。

...

传入或传出其他方法的进一步参数。

细节

可以使用 complex 创建复杂向量。可以通过给出向量的长度、实部和虚部或模数和参数来指定向量。 (仅给出长度就会生成一个由复数零组成的向量。)

as.complex尝试将其参数强制为复杂类型:例如as.vector它会删除包括名称在内的属性。取决于R版本 3.2.x,所有形式NANaN被胁迫到一个复杂的NA,即NA_complex_常数,其实部和虚部均为NA.自从R3.3.0,通常仅是以下对象NA部分被强制复杂化NA,但其他人与NaN零件,是不是。因此,复杂的算术仅NaN的(但没有NA的)通常会涉及不是给出复杂的NA但具有实部或虚部的复数NaN.

请注意, is.complexis.numeric 永远不会同时是 TRUE

函数 ReImModArgConj 具有通常的解释,即返回复数值的实部、虚部、模数、自变量和复共轭。模数和参数也称为极坐标。如果 与实数 ,则为 。它们都是 internal generic primitive 函数:可以单独为它们定义方法,也可以通过 Complex 组泛型定义方法。

除了算术运算符(参见 Arithmetic )、+-*/^ 之外,还为复数实现了初等三角函数、对数函数、指数函数、平方根函数和双曲函数。值。

矩阵乘法( %*%crossprodtcrossprod )也为复数矩阵( matrix )定义,solveeigensvd 也是如此。

在内部,复数存储为一对 double 精度数,其中一个或两个可以是 NaN (包括 NA ,请参阅 NA_complex_ 及以上)或正负无穷大。

S4方法

as.complex 是原始的,可以设置 S4 方法。

ReImModArgConj 构成 S4 组通用 Complex,因此可以单独或通过组通用为它们设置 S4 方法。

注意

涉及复杂的操作和函数NaN主要依赖于 C 库对‘的处理⁠双重复合体⁠’ 算术,通常返回complex(re=NaN, im=NaN)(但我们还没有看到对此的保证)。为了+-,R自己的处理工作严格“coordinate wise”。

涉及复杂 NA 的操作,即 NA_complex_ ,返回 NA_complex_

例子

require(graphics)

0i ^ (-3:3)

matrix(1i^ (-6:5), nrow = 4) #- all columns are the same
0 ^ 1i # a complex NaN

## create a complex normal vector
z <- complex(real = stats::rnorm(100), imaginary = stats::rnorm(100))
## or also (less efficiently):
z2 <- 1:2 + 1i*(8:9)

## The Arg(.) is an angle:
zz <- (rep(1:4, length.out = 9) + 1i*(9:1))/10
zz.shift <- complex(modulus = Mod(zz), argument = Arg(zz) + pi)
plot(zz, xlim = c(-1,1), ylim = c(-1,1), col = "red", asp = 1,
     main = expression(paste("Rotation by "," ", pi == 180^o)))
abline(h = 0, v = 0, col = "blue", lty = 3)
points(zz.shift, col = "orange")

## as.complex(<some NA>) --> NA_complex_
NAs <- vapply(list(NA, NA_integer_, NA_character_, NA_real_, NA_complex_),
              as.complex, 0+0i)
stopifnot(identical(NA_complex_, unique(NAs)))

showC <- function(z) noquote(sprintf("(R = %g, I = %g)", Re(z), Im(z)))

## The exact result of this *depends* on the platform, compiler, math-library:
(NpNA <- NaN + NA_complex_) ; str(NpNA) # *behaves* as 'cplx NA' ..
stopifnot(is.na(NpNA), is.na(NA_complex_), is.na(Re(NA_complex_)), is.na(Im(NA_complex_)))
showC(NpNA)# but does not always show '(R = NaN, I = NA)'
## and this is not TRUE everywhere:
identical(NpNA, NA_complex_)
showC(NA_complex_) # always == (R = NA, I = NA)

参考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

Arithmetic; polyroot 查找 次多项式的所有 复数根。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Complex Numbers and Basic Functionality。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。