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 |
一個對象,可能是 |
z |
模式 |
... |
傳入或傳出其他方法的進一步參數。 |
細節
可以使用 complex
創建複雜向量。可以通過給出向量的長度、實部和虛部或模數和參數來指定向量。 (僅給出長度就會生成一個由複數零組成的向量。)
as.complex
嘗試將其參數強製為複雜類型:例如as.vector
它會刪除包括名稱在內的屬性。取決於R版本 3.2.x,所有形式NA
和NaN
被脅迫到一個複雜的NA
,即NA_complex_
常數,其實部和虛部均為NA
.自從R3.3.0,通常僅是以下對象NA
部分被強製複雜化NA
,但其他人與NaN
零件,是不是。因此,複雜的算術僅NaN
的(但沒有NA
的)通常會涉及不是給出複雜的NA
但具有實部或虛部的複數NaN
.
請注意, is.complex
和 is.numeric
永遠不會同時是 TRUE
。
函數 Re
、 Im
、 Mod
、 Arg
和 Conj
具有通常的解釋,即返回複數值的實部、虛部、模數、自變量和複共軛。模數和參數也稱為極坐標。如果 與實數 和 ,則為 和 、 和 。它們都是 internal generic primitive 函數:可以單獨為它們定義方法,也可以通過 Complex
組泛型定義方法。
除了算術運算符(參見 Arithmetic )、+
、 -
、 *
、 /
和 ^
之外,還為複數實現了初等三角函數、對數函數、指數函數、平方根函數和雙曲函數。值。
矩陣乘法( %*%
、 crossprod
、 tcrossprod
)也為複數矩陣( matrix
)定義,solve
、 eigen
或 svd
也是如此。
在內部,複數存儲為一對 double 精度數,其中一個或兩個可以是 NaN
(包括 NA
,請參閱 NA_complex_
及以上)或正負無窮大。
S4方法
as.complex
是原始的,可以設置 S4 方法。
Re
、Im
、Mod
、Arg
和 Conj
構成 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 comment 查詢或設置“評論”屬性
- R commandArgs 提取命令行參數
- R col 列索引
- R conditions 狀況處理和恢複
- R connections 操作連接的函數(文件、URL...)
- R colSums 形成行和列的總和及平均值
- R conflicts 在搜索路徑上搜索被遮罩的對象
- R colnames 行和列名稱
- R chartr 字符翻譯和裝箱
- R chol2inv Cholesky(或 QR)分解的逆分解
- R cumsum 累積和、乘積和極值
- R character 字符向量
- R c 將值組合到向量或列表中
- R cut 將數字轉換為因子
- R class 對象類
- R chooseOpsMethod 選擇適當的操作方法
- R chol 喬列斯基分解
- R cbind 按行或列組合 R 對象
- R crossprod 矩陣叉積
- R curlGetHeaders 從 URL 中檢索標頭
- R cat 連接並打印
- R capabilities 此 R 版本的報告函數
- R callCC 調用當前延續
- R call 函數調用
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Complex Numbers and Basic Functionality。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。