Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 循环这些迭代_Php_Loops_For Loop_While Loop - Fatal编程技术网

Php 循环这些迭代

Php 循环这些迭代,php,loops,for-loop,while-loop,Php,Loops,For Loop,While Loop,我正在尝试循环下面的迭代,代码如下,我也将尝试分解它 <?php function intr($LoanRequired, $TermMonths, $MonthlyPayment, $rate) { $intr= $LoanRequired * pow((1 + $rate), $TermMonths) + $MonthlyPayment * ((pow((1 + $rate), $TermMonths) - 1) / $rate); return $int

我正在尝试循环下面的迭代,代码如下,我也将尝试分解它

<?php

    function intr($LoanRequired, $TermMonths, $MonthlyPayment, $rate) {
     $intr= $LoanRequired * pow((1 + $rate), $TermMonths) + $MonthlyPayment * ((pow((1 + $rate), $TermMonths) - 1) / $rate);
     return $intr;
    }
    $x0=0.008;
    $x1=0.025;
    $LoanRequired=20000;
    $TermMonths=120;
    $MonthlyPayment=-271.09;
    $x2=$x0-(((intr($LoanRequired,$TermMonths,$MonthlyPayment,$x0))*($x0-$x1))/(intr($LoanRequired,$TermMonths,$MonthlyPayment,$x0)-intr($LoanRequired,$TermMonths,$MonthlyPayment,$x1)));
    print_r($x2);
    $intr = $LoanRequired * pow((1 + $x2), $TermMonths) + $MonthlyPayment * ((pow((1 + $x2), $TermMonths) - 1) / $x2);
    while( $intr>=-1 || $intr<=1 ) {

    return ;
    }
    ?>
来自表单的所有变量(所有这些变量都将根据用户输入的内容而变化)

在这个函数中,$rate首先变成$x0,然后变成$x1和$x2等

$intr=$LoanRequired*pow((1+$x0),$TERMMONTS)+$MONTHLYPAYT*((pow((1+$x0),$TERMMONTS)-1)/$x0)

首先,它需要进入上面的公式,(首先是$x0,然后是$x1,因为它们是两个静态的),如果结果是-1,整个过程就会停止

如果前两个静态猜测不符合标准,则需要执行此操作

$x2=$x0-((intr($LoanRequired,$TermMonths,$MonthlyPayment,$x0))*($x0-$x1))/(intr($LoanRequired,$TermMonths,$MonthlyPayment,$x0)-intr($LoanRequired,$TermMonthMonthlyPayment,$x1))在循环中。
在这种情况下,$x2将=0.0082002592938519,然后将其放入
$intr=$LoanRequired*pow((1+$x0),$TermMonths)+$MonthlyPayment*((pow((1+$x0),$TermMonths)-1)/$x0),如果它不符合条件,则继续循环,直到它符合$x3、$x4等条件

然后需要进入这个公式
$apr=((pow(($x0+1),12))-1)*100(根据哪个值为-1,$x0显然会更改为$x1、$x2、$x3等


我试图将其放入一个while循环(或任何循环),但有一些困难。

让我们从设置开始

$i0 = intr($LoanRequired,$TermMonths,$MonthlyPayment,$x0);
$i1 = intr($LoanRequired,$TermMonths,$MonthlyPayment,$x1);
然后x2变成

$x2=$x0-($i0*($x0-$x1)/($i0-$i1));

现在,如果有下一步,您不再需要当前的$x0/$i0。当前的$x1/$i1变成$x0/$i0,$x2/$i2变成$x1/$i1

$x0 = $x1; $i0=$i1;
$x1 = $x2; $i1=$i2;
您可以在($i2=1)时执行此操作。


但是,如果这很重要的话,你应该问问这个方法是否可以安全地用于IEEE浮点数(我猜不是)。

这个方法有名字吗,比如“NameA-NameB方法”(例如“Newton-Raphson除法”)?它叫割线法,很有趣,所以我随机猜测它几乎是对的:)但是,当($intr=1)
运行这个循环直到f(x2)在你的ε内时,你的条件不应该是
$x2=$x0-($i0*($x0-$x1)/($i0-$i1));
$i2 = intr($LoanRequired,$TermMonths,$MonthlyPayment,$x2);
$x0 = $x1; $i0=$i1;
$x1 = $x2; $i1=$i2;
<?php
function intr($LoanRequired, $TermMonths, $MonthlyPayment, $rate) {
  $intr= $LoanRequired * pow((1 + $rate), $TermMonths) + $MonthlyPayment * ((pow((1 + $rate), $TermMonths) - 1) / $rate);
  return $intr;
}

$LoanRequired=20000;
$TermMonths=120;
$MonthlyPayment=-271.09;
$x0=0.008;
$x1=0.025;
$i0 = intr($LoanRequired,$TermMonths,$MonthlyPayment,$x0);
$i1 = intr($LoanRequired,$TermMonths,$MonthlyPayment,$x1);

echo "f($x0)=", $i0, "\n";
echo "f($x1)=", $i1, "\n";

$dbgcnt = 0;
do {
  if ( 100 < ++$dbgcnt ) {
    die('bailout');
  }

  $x2=$x0-($i0*($x0-$x1)/($i0-$i1));
  $i2 = intr($LoanRequired,$TermMonths,$MonthlyPayment,$x2);
  echo "f($x2)=", $i2, "\n";

  $x0 = $x1; $i0=$i1;
  $x1 = $x2; $i1=$i2;
} while (abs($i2) > 1);

echo "----\nx=$x2";
f(0.008)=-2242.1586767476
f(0.025)=188094.563138
f(0.0082002592938519)=-1736.2922063647
f(0.0083539185016984)=-1336.4282682791
f(0.0088674794645362)=76.76523796426
f(0.0088395826270916)=-3.1241157534314
f(0.0088406735477872)=-0.0068921130805393
----
x=0.0088406735477872