2010-07-07 14 views
6

का उपयोग कर एक्सेल रेट फ़ंक्शन को मनोरंजन करें मैं PHP में बंधक कैलक्यूलेटर को परिवर्तित करने पर काम कर रहा हूं, लेकिन मुझे एक PHP समाधान की आवश्यकता नहीं है। मैं Excel RATE फ़ंक्शन को दोहराने के लिए आवश्यक तर्क की तलाश में हूं। मुझे एक समाधान मिला है जो उधार का उपयोग करता है, और यदि बदतर हो जाता है, तो मैं इसका उपयोग करता हूं।न्यूटन के विधि

मुझे पता है कि इंटरवेब्स दुनिया में किसी ऐसे व्यक्ति के बारे में ज्ञान है, इसलिए मुझे स्क्रैच से समाधान बनाने के बजाय एक आसान जवाब देना अच्छा लगेगा।

संदर्भ:

धन्यवाद

उत्तर

8

एमएस एक्सेल दर() फ़ंक्शन छेदक विधि (न्यूटन की विधि के एक परिमित अंतर सन्निकटन) का उपयोग कर के कार्यान्वयन PHPExcel से लिया गया:

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 (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; 
    } 
    return $rate; 
} // function RATE() 
+2

पूरी तरह से सही:

https://brownmath.com/bsci/loan.htm#Eq8

समारोह, पीएचपी में, कुछ इस तरह हो सकता है! बस लोगों को वित्तीय नीति और वित्तीय_मैक्स_आईटीईआरएशन के लिए कुछ परिभाषित बयानों में प्लग करने के लिए याद रखें - या - क्रमशः इन स्थिर मूल्यों 0.0000001 और 20 के साथ उन्हें प्रतिस्थापित करें। मैंने इन मानों को ऊपर उल्लिखित एमएस वेबसाइट पर पाया। – Exit

+0

इस विधि में अभिसरण समस्याएं हैं, https://stackoverflow.com/questions/14031208/apache-poi-rate-formula-inconsistency-with-long-periods – sled

+0

@Exit - तो शायद आप एक बेहतर समाधान प्रदान करना चाहते हैं , आपके ज्ञान को साझा करने से हमें सभी –

0

मैंने उपरोक्त कोड का उपयोग करने की कोशिश की, लेकिन परिणाम केवल एक्सेल (या Google स्प्रेडशीट) के समान नहीं हैं।

मुझे नहीं पता कि आपको अभी तक इस फ़ंक्शन को कार्यान्वित करने की आवश्यकता है, लेकिन किसी भी मामले में, मैंने देखा कि यह एल्गोरिदम कैसे बनाया गया था और भले ही मैं एक्सेल स्रोत कोड (या Google वर्कशीट) तक पहुंच नहीं पा रहा था कि यह एक साधारण गणना नहीं है। इस गणित के बारे में है, और अधिक यहाँ पढ़ा जा सकता:

function rate($nprest, $vlrparc, $vp, $guess = 0.25) { 
    $maxit = 100; 
    $precision = 14; 
    $guess = round($guess,$precision); 
    for ($i=0 ; $i<$maxit ; $i++) { 
     $divdnd = $vlrparc - ($vlrparc * (pow(1 + $guess , -$nprest))) - ($vp * $guess); 
     $divisor = $nprest * $vlrparc * pow(1 + $guess , (-$nprest - 1)) - $vp; 
     $newguess = $guess - ($divdnd/$divisor); 
     $newguess = round($newguess, $precision); 
     if ($newguess == $guess) { 
      return $newguess; 
     } else { 
      $guess = $newguess; 
     } 
    } 
    return null; 
} 
संबंधित मुद्दे