C# 的 多项式方程求解的基本实现

文章介绍了如何使用牛顿法对给定的数据点进行k阶多项式的最小二乘法拟合,并详细阐述了获取拟合参数、计算多项式结果、一阶求导以及通过区间二分法确定初始值的过程。虽然牛顿法效率高,但初值选择对结果影响较大,作者讨论了可能的优化和改进策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

已知:已有很多数据,根据生成曲线方程 并 求得y=0时 其多个方程解。

例如:x = [-5,- 4,- 3,- 2,- 1,0,1,2]

           y = [-4697,- 1374,- 251, - 8,  3, - 2,  1, 84]

        1、求其最小二乘法 k 阶多项式的拟合方程

        2、根据拟合方程求其与横坐标交点。

步骤:1、我们要写一个根据已知数据,求拟合方程参数的方法。

           2、已知方程后,要写一个根据方程求解的方法

                先已知的方法有很多,例如穷举法、二分法、牛顿-莱布利兹法、梯度法、碰撞体积法等等,各有优劣。博主这次根据自己的使用场景使用的是牛顿法。

                a、牛顿法比较重要的是使用前提条件,连续可导(博主的使用场景是必定满足的,故就不考虑了)(基本知识,不记得可以去百度一下)

                b、牛顿法的初值判断(这个其实看似容易,如果想准确,其实并不简单)

                c、求导算法(基本知识可以去百度一下)

                d、根据求出的解带入原方程,以此判断是否需要继续迭代。


纪要

工具使用:VS2022,百度在线图形计算器Desmos

使用相关库:MathNet                  


一、获得拟合参数方法

        /// <summary>
        /// 将点 (x,y) 拟合为 k 阶多项式 y 的最小二乘法,返回其最佳拟合参数为[p0, p1, p2,..., pk] 数组 p0、p1 分别指0次系数、1次系数
        /// </summary>
        /// <param name="xdata">x数组</param>
        /// <param name="ydata">y数组</param>
        /// <param name="order">拟合次数/多项式阶数</param>
        /// <returns>拟合参数数组</returns>
        public static double[] PolynomialPara(double[] xdata, double[] ydata, int order)
        {
            return Fit.Polynomial(xdata, ydata, order);
        }

运行

static double[] Xdata = { -5, -4, -3, -2, -1, 0, 1, 2 };
static double[] Ydata = { -4697, -1374, -251, -8, 3, -2, 1, 84 };


double[] _para = PolynomialPara(Xdata,Ydata,5);

结果

根据拟合参数,其实对应的k阶多项式方程就显而易见了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值