C#(Unity3D)数值分析-牛顿(迭代)法

版权声明:欢迎交流,本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_42513339/article/details/86679109

最近需要用此方法解决一元五次方程求解问题,所以学习了下,在此记录一下。

此方法的产生,是由于很多方程没有通解公式,所以求解只能通过数值方法。方法有很多,参见“数值分析”,类似书有很多。

牛顿法:(这里引用书籍上所述)

设方程 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;
    }

猜你喜欢

转载自blog.csdn.net/weixin_42513339/article/details/86679109