【发布时间】:2013-09-06 15:05:41
【问题描述】:
我正在尝试制作一个通过牛顿法计算三次根的函数,但由于某种原因我似乎在这里出现了无限循环?
#include <iostream>
#include <math.h>
using namespace std;
double CubicRoot(double x, double e);
int main()
{
cout << CubicRoot(5,0.00001);
}
double CubicRoot(double x, double e)
{
double y = x;
double Ynew;
do
{
Ynew = y-((y*y)-(x/y))/((2*y)+(x/(y*y)));
cout << Ynew;
} while (abs(Ynew-y)/y>=e);
return Ynew;
}
【问题讨论】:
-
距离有多近?
-
你得到什么输出?它似乎正在收敛,还是到处都是数字?你得到 NaN 输出了吗?
-
因为 Ynew,y 和 e 不会改变(你不会在循环中改变 y 和 x,所以 Ynew 在每次迭代时仍然保持不变)。所以你不要改变任何变量,如果你在第一次迭代后不离开循环,你将永远不会离开它(也许在某个地方你必须使用 Ynew 或者你的公式不正确)。
标签: c++ newtons-method