2

そのため、どこでも検索しましたが、問題に対する適切な解決策が見つかりませんでした。PHP で (年間) 金利を計算する必要があります。

PHPExcel の関数 RATE は機能しません ( NaN を返します)。これを使用 して、元の金額、最終的な金額、一定の支払い ( 1 か月の節約額) と投資期間 (月単位)。

しかし、それでもうまくいきません。これが役立つ場合のコードです。

public function calculateRate($originalAmount, $finalAmount, $monthlySavings, $savingsPeriod) {
    define('FINANCIAL_MAX_ITERATIONS', 128);
    define('FINANCIAL_PRECISION', 1.0e-06);

    $rate = 0.05; // guess 
    $i = 0;

    do {
        $equ = $monthlySavings * (pow(1 + $rate, $savingsPeriod) - 1) / $rate + $originalAmount * pow(1 + $rate, $savingsPeriod) + $finalAmount;
        $derivative = ( $monthlySavings * ( $savingsPeriod * $rate * pow(1 + $rate, $savingsPeriod - 1 ) - pow(1 + $rate, $savingsPeriod) ) + 1 ) / ($rate * $rate) + $savingsPeriod * $originalAmount * pow(1 + $rate, $savingsPeriod - 1);
        $div = $equ / $derivative;
        $oldRate = $rate;
        $rate -= $div;
        ++$i;
        var_dump($i, $rate, $equ, $derivative, $div);
    } while (abs($div) > FINANCIAL_PRECISION && ($i < FINANCIAL_MAX_ITERATIONS));

    return $rate;
}

金利を計算できる関数が必要ですが、機能するものが見つかりません...

4

2 に答える 2

1

ThinkAndDone.comのAbrahamです。昨日から何度も訪問されていることに気付きました。

MS Excel で RATE を検索する際に使用される基になるTVM 方程式を考慮する必要があります。以下に示すように、2つのバージョンがあります

PV(1+i)^N + PMT(1+i*type)[{(1+i)^N}-1]/i + FV = 0

上記の最初のものは、n 期間の金利 i での現在価値と定期支払いを合成します

FV(1+i)^-N + PMT(1+i*type)[1-{(1+i)^-N}]/i + PV = 0

上記の 2 番目のものは、将来価値と定期的な支払いを金利 i で n 期間割引します。

これらの 2 つの方程式は、FV、PV、または PMT の 3 つの変数のうち少なくとも 1 つまたは多くても 2 つが負の場合にのみ真の意味を保持します。

出金キャッシュ フローは負の数値で反映される借方金額であり、入金キャッシュ フローは正の数値で反映される貸方金額です。

それを念頭に置いて、PHPExcel RATE関数も同様に機能するはずだと思います

ThinkAndDone.com の RATE 計算機は、ニュートン ラフソン法による 2 つの TVM 方程式のいずれかを使用して、投資に対して次の結果を生成します。

PV = -100000
PMT = -1000
FV = 126068
NPER = 6
TYPE = 0
RATE = ?

Newton Raphson Method IRR Calculation with TVM equation = 0

TVM Eq. 1: PV(1+i)^N + PMT(1+i*type)[(1+i)^N -1]/i + FV = 0

f(i) = 126068 + -1000 * (1 + i * 0) [(1+i)^6 - 1)]/i + -100000 * (1+i)^6

f'(i) = (-1000 * ( 6 * i * (1 + i)^(5+0) - (1 + i)^6) + 1) / (i * i)) + 6 * -100000 * (1+0.1)^5

i0 = 0.1
f(i1) = -58803.71
f'(i1) = -985780.5
i1 = 0.1 - -58803.71/-985780.5 = 0.0403480693724
Error Bound = 0.0403480693724 - 0.1 = 0.059652 > 0.000001

i1 = 0.0403480693724
f(i2) = -7356.984
f'(i2) = -747902.9062
i2 = 0.0403480693724 - -7356.984/-747902.9062 = 0.0305112524399
Error Bound = 0.0305112524399 - 0.0403480693724 = 0.009837 > 0.000001

i2 = 0.0305112524399
f(i3) = -169.999
f'(i3) = -713555.4448
i3 = 0.0305112524399 - -169.999/-713555.4448 = 0.0302730102033
Error Bound = 0.0302730102033 - 0.0305112524399 = 0.000238 > 0.000001

i3 = 0.0302730102033
f(i4) = -0.0972
f'(i4) = -712739.5905
i4 = 0.0302730102033 - -0.0972/-712739.5905 = 0.0302728738276
Error Bound = 0.0302728738276 - 0.0302730102033 = 0 < 0.000001
IRR = 3.03%


Newton Raphson Method IRR Calculation with TVM equation = 0

TVM Eq. 2: PV + PMT(1+i*type)[1-{(1+i)^-N}]/i + FV(1+i)^-N = 0

f(i) = -100000 + -1000 * (1 + i * 0) [1 - (1+i)^-6)]/i + 126068 * (1+i)^-6

f'(i) = (--1000 * (1+i)^-6 * ((1+i)^6 - 6 * i - 1) /(i*i)) + (126068 * -6 * (1+i)^(-6-1))

i0 = 0.1
f(i1) = -33193.1613
f'(i1) = -378472.7347
i1 = 0.1 - -33193.1613/-378472.7347 = 0.0122970871033
Error Bound = 0.0122970871033 - 0.1 = 0.087703 > 0.000001

i1 = 0.0122970871033
f(i2) = 11403.9504
f'(i2) = -680214.7503
i2 = 0.0122970871033 - 11403.9504/-680214.7503 = 0.0290623077396
Error Bound = 0.0290623077396 - 0.0122970871033 = 0.016765 > 0.000001

i2 = 0.0290623077396
f(i3) = 724.4473
f'(i3) = -605831.2626
i3 = 0.0290623077396 - 724.4473/-605831.2626 = 0.0302580982453
Error Bound = 0.0302580982453 - 0.0290623077396 = 0.001196 > 0.000001

i3 = 0.0302580982453
f(i4) = 8.8061
f'(i4) = -600890.1339
i4 = 0.0302580982453 - 8.8061/-600890.1339 = 0.0302727533356
Error Bound = 0.0302727533356 - 0.0302580982453 = 1.5E-5 > 0.000001

i4 = 0.0302727533356
f(i5) = 0.0718
f'(i5) = -600829.8628
i5 = 0.0302727533356 - 0.0718/-600829.8628 = 0.0302728728509
Error Bound = 0.0302728728509 - 0.0302727533356 = 0 < 0.000001
IRR = 3.03%

先に挙げた 2 つの TVM 方程式は、ほとんどの銀行口座が貯蓄に利息を支払うか、利息が継続的に複利される場合にローンに利息を請求する期間ごとの複利 (年、四半期、月、週、日) のように、利息が個別に複利される場合に適用できます (個別の複利とは対照的に、関心のある無限の複利)

連続複利の TVM 方程式は、離散複利バージョンのものとは異なる金利係数を使用します

金利が継続的に複利される場合の 2 つの TVM 式は次のとおりです。

PV e ni + PMT e i*type [e ni -1]/[e i -1] + FV = 0

または同等のもの

FV e -ni + PMT e i*type [1-e -ni ]/[e i -1] + PV = 0

ここで、e は 2.7182818284590452353602874713527 の値を持つ数学定数です。

利息が連続的に複利される場合と、離散的に複利される場合の RATE は異なります。

于 2012-05-15T09:32:22.313 に答える
0

これはあなたに最終的な答えを与えることはありませんが、うまくいけば正しい方向にあなたを向けるでしょう。そのための数学の背景をレイアウトしてみます。

初期投資がAであり、N期間があり、その間にxの期間ごとのレートで固定金額Bを投資し、最終金額Cで取得するとします。期間ごとのレートについて話していることに注意してください。毎月投資し、年間収益率Xを探している場合、x = X/12です。次に、これを次のような方程式に入れることができます。

         N            N-1            N-2
A * (1+x)  + B * (1+x)    + B * (1+x)    + ... + B * (1+x) + B = C

等比数列の式を使用すると、これを次のように簡略化できます。

                           N-1
         N        1 - (1+x)
A * (1+x)  + B * ------------- = C
                   1 - (1+x)

基本的な代数を続けると、これを次のように変えることができます

         N                N-1
A * (1+x)  * x + B * (1+x)   - C * x - B = 0

この時点で、この方程式を解くために数値法を使用する必要があります。たとえば、http://en.wikibooks.org/wiki/Numerical_Methods/Equation_Solvingを参照してください。

于 2012-05-15T08:37:36.883 に答える