2014-09-15 3 views
0

"irr"함수를 사용하지 않고 내부 수익률을 계산하려고합니다. A는 현금 흐름이며 x의 값을 찾으려고합니다. [- 1 2.315841784746324e + 79]함수 fzero, matlab, 내부 수익률, 복잡한 뿌리

I 추측 fzero 복귀 [경우 xval, fval =하면서 순 현재 가치 = 0

A = [-1000 100 900 100 -100 -400]; 
[xval, fval]=fzero(@(x) A*((1+x).^-(0:length(A)-1))' , 0) ; 

올바른 결과는, X = -2되어야 만든다 이것은 복잡한 뿌리와 관련이 있음을 말합니다. 가이드에서 검색 결과를 실제 루트로 제한하는 방법을 찾지 못했습니다 (실제로 이것이 문제라고 인정하는 것).

누가 무슨 일이 일어나고 어떻게 결과를 얻는 지 이해하고 있습니까?

+0

답장을 보내 주셔서 감사합니다. 여러 뿌리를 식별하는 전략을 제안 할 수 있습니까? 이런 종류의 문제를 피하기 위해 기호 계산을 사용하는 것이 유용할까요? – Giuseppe

답변

2

정확히 0 기호 반전에 대해보고하지 fzero, 예를 들면, 또는 -2의 반대편에 초기 추측 가까이를 선택해야합니다 : plot of your function

당신이 부호 반전 주위에 발생하는 것을 볼 -1 당신은 예를 들어 -5 0에서 X0의 값을 변경 한 경우에는 0

을 통해보고 기능을 물어

,536,

[xval, fval] = fzero (@ (x) A * ((1 + x).^- (0 : 길이 (A) -1)) ', -5);

xval = -2

1

음수의 값을 사용하면 복잡한 값을 반환 할 수 있습니다. 그렇습니까? 당신은 실수로 결과를 강제로 real와 기능을 wraping 시도 할 수 있습니다 :

A = [-1000 100 900 100 -100 -400]; 
[xval,fval] = fzero(@(x)real(A*(1+x).^-(0:length(A)-1).'), 0); 

-1.000000000000000을 반환합니다. 이 함수는 여러 개의 루트를가집니다. 당신이 -2 루트를 원하는 경우에, 당신은 당신이 기능을 플롯 경우

[xval,fval] = fzero(@(x)real(A*(1+x).^-(0:length(A)-1).'), -3);