математика — Расчет процентной ставки в PHP с преобразованной функцией Excel RATE

У меня тоже есть эта проблема — один пример работает, а другой нет

Вот мой код

define('FINANCIAL_MAX_ITERATIONS', 128); define('FINANCIAL_PRECISION', 1.0e-08);

function RATE($nper, $pmt, $pv, $fv = 0.0, $type = 0, $guess = 0.1) {

$rate = $guess;
if (abs($rate) < FINANCIAL_PRECISION) {
$y = $pv * (1 + $nper * $rate) + $pmt * (1 + $rate * $type) * $nper + $fv;
} else {
$f = exp($nper * log(1 + $rate));
$y = $pv * $f + $pmt * (1 / $rate + $type) * ($f - 1) + $fv;
}
$y0 = $pv + $pmt * $nper + $fv;
$y1 = $pv * $f + $pmt * (1 / $rate + $type) * ($f - 1) + $fv;

// find root by secant method
$i  = $x0 = 0.0;
$x1 = $rate;
while ((abs($y0 - $y1) > FINANCIAL_PRECISION) && ($i < FINANCIAL_MAX_ITERATIONS)) {
$rate = ($y1 * $x0 - $y0 * $x1) / ($y1 - $y0);
$x0 = $x1;
$x1 = $rate;
if (($nper * abs($pmt)) > ($pv - $fv))
$x1 = abs($x1);

if (abs($rate) < FINANCIAL_PRECISION) {
$y = $pv * (1 + $nper * $rate) + $pmt * (1 + $rate * $type) * $nper + $fv;
} else {
$f = exp($nper * log(1 + $rate));
$y = $pv * $f + $pmt * (1 / $rate + $type) * ($f - 1) + $fv;
}

$y0 = $y1;
$y1 = $y;
++$i;
}

$rate = abs(round($rate*100,5));

return $rate;

} // function RATE()

И некоторые примеры RATE (60, -1338,88,274775,0,0,0,03200); // работает — возвращает 3.40321

СКОРОСТЬ (60, -2415.44,448925,0,0,0.04150); // не работает — возвращает 3.16288, когда должно быть 4.32

Есть идеи? Я пробовал 4-5 фрагментов кода, которые все выглядят одинаково, и этот, кажется, дает мне лучшие результаты, хотя они не согласованы. Я чувствую, что код работает, потому что как он может дать мне один правильный результат, а остальные нет?

ps: я новичок в публикации здесь, хотя я читаю этот сайт уже около 5 лет — надеюсь, я был достаточно тщательным;)

Подобный вопрос, с хорошей информацией, но все еще не решает мою проблему
Секретный метод итерации в PHP

Еще один хороший вопрос, но все еще не делает то, что мне нужно …
Расчет процентной ставки в PHP

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]