C#,数值计算,用割线法(Secant Method)求方程根的算法与源代码

1 割线法

割线法用于求方程 f(x) = 0 的根。它是从根的两个不同估计 x1 和 x2 开始的。这是一个迭代过程,包括对根的线性插值。如果两个中间值之间的差值小于收敛因子,则迭代停止。

亦称弦截法,又称线性插值法.一种迭代法.指用割线近似曲线求方程根的2步迭代法.此法用通过点(xk,f(xk))及(xk-1,f(xk-1))的割线

近似曲线y=f(x),用割线的根作为方程根的新近似xk+1,从而得到方程求根的割线法迭代程序

( k=1,2,…,n),

其中x0,x1为初始近似.若f(x)在根x*的邻域内有二阶连续导数,且f′(x*)≠0,则当x0,x1在x*邻域内时,割线法收敛于x*,其收敛阶为

2 源程序

using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public delegate double delegateFunctionX(double x);

    public static partial class Algorithm_Gallery
    {
        public static delegateFunctionX funx = null;

        public static bool Secant(double x1, double x2, out double x0, double Epsilon)
        {
            int n = 0;
            double xm;
            
            x0 = x1;
            if (funx(x1) * funx(x2) < 0)
            {
                do
                {
                    x0 = (x1 * funx(x2) - x2 * funx(x1))  / (funx(x2) - funx(x1));

                    double c = funx(x1) * funx(x0);

                    x1 = x2;
                    x2 = x0;

                    n++;

                    if (Math.Abs(c) < float.Epsilon)
                    {
                        break;
                    }
                    xm = (x1 * funx(x2) - x2 * funx(x1))  / (funx(x2) - funx(x1));

                } while (Math.Abs(xm - x0) >= Epsilon);
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}

3 源代码

using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public delegate double delegateFunctionX(double x);

    public static partial class Algorithm_Gallery
    {
        public static delegateFunctionX funx = null;

        public static bool Secant(double x1, double x2, out double x0, double Epsilon)
        {
            int n = 0;
            double xm;
            
            x0 = x1;
            if (funx(x1) * funx(x2) < 0)
            {
                do
                {
                    x0 = (x1 * funx(x2) - x2 * funx(x1))  / (funx(x2) - funx(x1));

                    double c = funx(x1) * funx(x0);

                    x1 = x2;
                    x2 = x0;

                    n++;

                    if (Math.Abs(c) < float.Epsilon)
                    {
                        break;
                    }
                    xm = (x1 * funx(x2) - x2 * funx(x1))  / (funx(x2) - funx(x1));

                } while (Math.Abs(xm - x0) >= Epsilon);
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}

最近更新

  1. TCP协议是安全的吗?

    2024-03-11 12:44:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-11 12:44:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-11 12:44:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-11 12:44:01       20 阅读

热门阅读

  1. 学AI,3种人,3种学法

    2024-03-11 12:44:01       20 阅读
  2. 突破编程_C++_设计模式(观察者模式)

    2024-03-11 12:44:01       23 阅读
  3. 高频设计模式

    2024-03-11 12:44:01       20 阅读
  4. 基于RBF神经网络的多输入单输出回归分析

    2024-03-11 12:44:01       22 阅读
  5. 前端工程部署步骤小记

    2024-03-11 12:44:01       19 阅读
  6. 如何下载网页中嵌套的PDF

    2024-03-11 12:44:01       22 阅读
  7. Unity3D 常用得内置函数(Cg与GLSL)详解

    2024-03-11 12:44:01       18 阅读
  8. WebGL之创建 3D 对象

    2024-03-11 12:44:01       18 阅读
  9. Haproxy

    Haproxy

    2024-03-11 12:44:01      25 阅读
  10. Django——视图

    2024-03-11 12:44:01       21 阅读
  11. 利用 cloudflare 实现域名HTTP转变成 HTTPS

    2024-03-11 12:44:01       29 阅读