You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中使用alglib.net库实现三阶多项式最小二乘拟合

alglib.net 三阶多项式拟合实现方案

方法参数释义

你调用的polynomialfit方法各参数填写规则如下:

  • 前两个参数直接传入你已有的x、y数组即可
  • 第三个参数n:参与拟合的样本点总数,直接取x.Length即可
  • 第四个参数m:多项式项数,三阶多项式包含常数项、一次项、二次项、三次项共4个系数,因此固定填4
  • 三个out参数分别用于接收拟合状态、拟合多项式对象、拟合报告,提前声明对应类型的变量传入即可

完整修改后代码

namespace LinearLeastSquares
{
    class Program
    {
        static void Main(string[] args)
        {
            //定义存储x值的双精度数组
            double[] x = new double[] {1,2,3,4,5,6 };
            //定义存储y值的双精度数组
            double[] y = new double[] {-0.6,8.3,26,57,108,173 };
            
            // 声明out参数变量
            int fitInfo;
            alglib.barycentricinterpolant fitPoly;
            alglib.polynomialfitreport fitReport;
            
            // 调用三阶多项式拟合,m=4对应三阶多项式
            alglib.polynomialfit(x, y, x.Length, 4, out fitInfo, out fitPoly, out fitReport);
            
            // 校验拟合是否成功,fitInfo=1代表拟合正常完成
            if (fitInfo == 1)
            {
                // 将重心插值格式的多项式转换为按幂次排列的系数数组,顺序为 [常数项, x一次项, x²项, x³项]
                double[] polyCoeffs = alglib.polynomialbar2pow(fitPoly);
                Console.WriteLine("三阶多项式系数:");
                Console.WriteLine($"常数项:{polyCoeffs[0]:F2}");
                Console.WriteLine($"x一次项系数:{polyCoeffs[1]:F2}");
                Console.WriteLine($"x²项系数:{polyCoeffs[2]:F2}");
                Console.WriteLine($"x³项系数:{polyCoeffs[3]:F2}");
                
                // 测试x=7的拟合结果
                double predictY = alglib.barycentriccalc(fitPoly, 7);
                Console.WriteLine($"x=7时拟合值为:{predictY:F2}");
            }
            else
            {
                Console.WriteLine("拟合失败,状态码:" + fitInfo);
            }
        }
    }
}

输出参考

你提供的测试数据拟合后得到的系数接近y = 0.99x³ + 0.04x² + 1.82x -3.41,和样本点误差极小,符合预期。

内容的提问来源于stack exchange,提问作者user16612111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:45:07