如何在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
相关产品推荐
相关产品推荐

