2010-07-29 8 views
0

이 방법이 R으로 나뉩니다. 나는 그것을 사용하여 다음 함수의 근원을 찾는다 : f (x) = 2.5 * exp (-0.5 * (2 * 0.045 - x)) + 2.5 * exp (-0.045) + 2.5 * exp (-1.5 * x) - 100newton.method issues

(x = -38.4762403의 경우 f (x) = 2.903809e + 25) -38.4762403의 답을 제공합니다. 대답은 약 0.01-0.1이어야합니다. 이 함수는 수렴해야합니다.

f (x) = exp (-x) * x와 같은 단순한 함수조차도 f (x) = 0.001222392 인 8.89210984에 답을 제공하고 공차를 10^12 ..

또한 newton 방식의 비 그래픽 버전이 있습니까? 나는 nleqslv를 보았지만 그것을 어떻게 사용하는지 모른다. ..

당신의 도움에 감사드립니다.

답변

1

R에는 unirootpolyroot과 같은 루트 찾기가 있습니다. 복잡한 문제의 경우 optim, optimize 또는 nlminb과 같은 최적화 함수를 사용할 수 있습니다. 다음은 uniroot으로이 문제를 해결하는 예입니다.

## define the function 
f <- function(x){                                    
    2.5*exp(-0.5*(2*0.045 - x)) + 2.5*exp(-0.045) + 2.5*exp(-1.5*x) - 100                      
}                                        

## plot the function 
y <- seq(-20,20,0.1) 
plot(y,f(y),ylim = c(-100,100),xlim=c(-20,20)) 

## find the roots 
uniroot(f,c(-5,0)) 
uniroot(f,c(0,10)) 
+0

너무 멋지다. 이것은 확실히 고등학교에서 편리한 다시 올 것이다! –

+0

감사합니다. 이분법과 비슷한 것을 사용하는 것 같습니다. 이 기능을 사용하려면 호출을 uniroot (f, c (-5,5))해야합니다. 나는 여전히 newton의 메소드의 작업 버전을 찾고있다 : ( – user236215