最近需要用此方法解决一元五次方程求解问题,所以学习了下,在此记录一下。
此方法的产生,是由于很多方程没有通解公式,所以求解只能通过数值方法。方法有很多,参见“数值分析”,类似书有很多。
牛顿法:(这里引用书籍上所述)
设方程 f(x) =0,其中有近似根 Xk,利用泰勒公式在 Xk 点近似一阶展开,得到
求解 f(x) = 0, 即
这里设 x 为 Xk+1,得到
此时,我们便能得到一个迭代方程,可以进行多次迭代,当然这里初始 Xk需要在方程根的附近,保证结果收敛,否则可能不收敛。
然后我们需要判定一个迭代上限,这里我们需要加一个判定条件,
这里的Epislion就是一个上限,若结果与上一次迭代结果相近就停止。当然也可以用 f(x) 的绝对值大小当作判断条件。
这是我在Unity3D里用C#写的牛顿法(如果直接用C#, 把绝对值函数换一下就可以)
float NewtonMethod()
{
float x = 0; // 0设为初始值Xk,这里需要针对不同问题设置值
bool Iteration = true;
while (Iteration)
{
float y = x;
x = x - F_Drivate(x);
if (Mathf.Abs(x - y) < 0.001f)//这里是设迭代的判断
Iteration = false;
}
return x;
}
float F_Drivate(float x)
{
float F = ;//函数
float D = ;//微分
return F / D;
}