當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。