2017-11-07 4 views
0

에 일체형으로 방정식 해결 R 패키지 rootSolve에 multiroot :내가 X (코드 X <a href="https://i.stack.imgur.com/9Hjts.gif" rel="nofollow noreferrer">1</a>) 및 Y의 뿌리 (X [2] 코드) 개의 방정식</p> <p><a href="https://i.stack.imgur.com/9Hjts.gif" rel="nofollow noreferrer">Integral Equations</a></p> <p>다음 I 기능을 사용 찾으려고하고 R

m, R 및 C는 상수
m<-0.01 
r<- 0.5 
c<- 0.01006885 

eq.sol<-function(x,para) 
{ 
    m<-para[1] 
    r<-para[2] 
    c<-para[3] 
    inteq1<-function(b) 
    { 
    x[1]*exp(-x[1]*b)/(b+x[2]) 
    } 
    inteq2<-function(b) 
    { 
    x[1]*exp(-x[1]*b)/(b+x[2])^2 
    } 
    F1<-integrate(inteq1, 0, Inf)$value-m*c*(1-r)/(c+m*r) 
    F2<-integrate(inteq2, 0, Inf)$value-m^2*c*(1-r)^2/(c+m*r) 
    c(F1=F1, F2=F2) 
} 

find.para<-multiroot(eq.sol, start = c(0.05,1), para = c(m, r, c), positive = TRUE) 

. 두 변수는 양의 값을 가질 것으로 예상됩니다. 그러나, 다음과 같은 오류를 반환 :

diagonal element is zero 
[1] 2 
Warning messages: 
1: In stode(y, times, func, parms = parms, ...) : 
    error during factorisation of matrix (dgefa);   singular matrix 
2: In stode(y, times, func, parms = parms, ...) : steady-state not reached 

UPDATE Lyngbakr의 솔루션에 대한

감사합니다. 이 경우 좋은 초기 추측이 필요합니다. 그러나이 함수를 다른 함수에 삽입하고 임의의 분포에서 c를 무작위로 그리는 경우 U (0.005, 0.05)라고 말하면 c의 모든 샘플에 대해 작동하도록 만들 수는 없습니다. 제안이 있습니까?

+0

, 나는 가정 사진에서'x' WRT를 통합, 제공? – Therkel

+0

FYI :'multiroot'는'parms'가 아닌'parms'라는 인수를 취합니다. – Lyngbakr

+0

@Therkel 사실, wrt 통합 b. –

답변

1

다른 초기 추측을 시도해보십시오. 예를 들어,

find.para<-multiroot(eq.sol, start = c(1e-3, 1e-3), parms = c(phi, r, c), positive = TRUE) 

$root 
[1] 0.002437481 98.082693040 

$f.root 
      F1   F2 
-2.844821e-09 -5.135857e-12 

$iter 
[1] 21 

$estim.precis 
[1] 1.424978e-09 
+0

감사합니다. 그래서 좋은 초기 추측이 필요합니다. 이 함수를 다른 함수에 삽입하고 임의의 분포에서 c를 무작위로 추출하고자한다면 각 무작위 샘플 c에 대해 다중 루트 연산을 수행하는 것이 어렵다고 생각합니다. 제안이 있습니까? –

+0

@ChenChen 나는 좋은 초기 추측을 선험적으로 * 선택할 수있는 방법을 모른다. 각 변수마다 하나의 루트 만있을 것이라고 보장됩니까? 하나의 접근법은 좋은 결과를 얻을 때까지 오류를 포착하고 다른 (임의?) 초기 조건으로 재 시도하는 것일 수 있습니다. – Lyngbakr

+0

여러 뿌리가있을 수 있지만 그 중 하나를 선택하면됩니다. tryCatch는 확실히 좋은 생각입니다. 더 이상 동의 할 수 없습니다. 다시 한번 감사드립니다. –

관련 문제