2013-12-12 24 views
2

我想在R中集成一個複雜的對數函數,但我不確定如何定義它。R中的複雜集成和限制的編碼

另外,當我寫說x*i我得到我沒有定義......但它是相反的1的平方根,不是嗎?如果我寫的說5i我沒有問題,但5*i給出錯誤。

我用一些數字x和y定義。在一般情況下,下面的代碼給我一個錯誤

fun <- function(x + y*i){1/(x + y*i)} 

integrate(fun,5+0i,10+0i) 

下面的代碼工作

lower = 5 

upper = 10 

z <- complex(real = x, imaginary = y) 

fun <- function(z){1/z} 

integrate(fun,lower,upper) 

但是,如何計算積分的輪廓?這是雙重積分,真的,我不知道如何在這裏實現它。

更重要的是,我想採取一個涉及複數對數的右手極限(即lim Y - > 0+),等於(1),其中Y在X固定時減小到0。在這裏,我無法定義我的複雜函數和變量而沒有錯誤。

+1

它有點隱藏,但'NumericConstants'將解釋'45i'的語法,即跟隨一個帶有「i」的數字來使其成爲虛數。 「我」本身就是一個對象。現在:複雜的整合本質上是一個雙重積分,這就是爲什麼「整合」barf。 –

回答

2

複雜的整合是整合沿一條路徑。 您可以通過弧長參數化路徑,即使用實際時間間隔。 (結果實際上可以依賴的路徑。)

人們會期望能夠計算 沿-2-1i2-1i 之間的直線1/z積分如下(注意使用1i而非i) 。

f <- function(s) { 
    z <- s-1i 
    1/z 
} 
integrate(f, -2, 2) # Fails 

integrate只適用於實數。 您需要分別計算實部和虛部。

integrate(function(s) Re(f(s)), -2, 2)$value + 
1i * integrate(function(s) Im(f(s)), -2, 2)$value 
# [1] 0+2.214297i 
+0

$ value是做什麼的? –

+1

@GuidoJorg我懷疑你在閱讀關於'R'的介紹性教程後會更開心。然後很明顯,'myfunction()$ value'從'myfunction'創建的對象中返回list元素'$ value'。 –

1

正如@Carl Withhoft提到的那樣,複雜的整合超出了integrate所能做到的。在此期間,這是你將如何獲得給出的實部和虛部的複數:

x <- 2 
y <- 4 

z <- complex(real=x, im=y) 
# or 
z <- x + y*1i 

如果你想有一個複數的功能:

fun <- function(z) 1/z 
fun(z) # 0.1 - 0.2i 
2

有在包ellipticpracma功能直接計算沿路徑複雜的整體,即他們分裂爲您服務。例如,

f <- function(z) 1/z # the complex function 
P <- c(-2-1i, 2-1i) # straight line between two points 

require(pracma) 
cintegral(f, P)  # complex integral along path P 
## [1] 0+2.214297i 

和功能在包ellipticintegral.contour()integral.segment()類似。爲了整合功能f圍繞原點,做

P <- c(-1i, 1, 1i, -1, -1i) # rectangle around 0 
cintegral(f, P) 
## [1] 0+6.283185i 

和原點周圍的圓圈相同積分值2*pi*1i