【Math.NET】使用Fit.Polynomial多项式拟合(直线、抛物线)的示例代码与示意图

介绍

Math.NET是一个开源项目:https://www.mathdotnet.com/,旨在构建和维护涵盖基础数学的工具箱,以满足 .NET开发人员的高级需求和日常需求。

关于Math.NET用法的参考博客:
https://www.cnblogs.com/dino623/p/curve_fitting_and_data_prediction_using_math_net.html

开源Math.NET基础数学类库使用总目录

示例

直线拟合

var xArr = new double[] { 1, 2, 3, 4};
var yArr = new double[] { 0, 0.1, 0.8, 0.9 };

int order = 1;
double[] parameters = Fit.Polynomial(xArr, yArr, order);
foreach (var x in xArr)
{
    double y = 0;
    for (int i = 0; i <= order; i++)
    {
        y+= parameters[i] * Math.Pow(x, i);
    }
    Trace.WriteLine(y);
}

手动在excel绘制了拟合前后的结果,用于查看效果:
在这里插入图片描述

抛物线

var xArr = new double[] { 1, 2, 3, 4 };
var yArr = new double[] { 1, 3, 7, 17 };
int order = 2;
double[] parameters = Fit.Polynomial(xArr, yArr, order);
foreach (var x in xArr)
{
    double y = 0;
    for (int i = 0; i <= order; i++)
    {
        y+= parameters[i] * Math.Pow(x, i);
    }
    Trace.WriteLine(y);
}

在这里插入图片描述
上图抛物线没有平滑地绘制,而是只连接了四个点。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您介绍一下如何使用Python进行多项式拟合。假设您有两条线的数据,可以按照以下步骤进行拟合: 1. 导入必要的库 ```python import numpy as np import matplotlib.pyplot as plt from numpy.polynomial import Polynomial ``` 2. 定义数据 假设您有两条线的数据分别是 `line1` 和 `line2`,每个数据点的 x 坐标是 `x_data`,y 坐标是 `y_data`。 ```python line1 = [1, 2, 3, 4, 5] line2 = [1, 4, 9, 16, 25] x_data = np.array(line1) y_data = np.array(line2) ``` 3. 进行多项式拟合 接下来,我们可以使用 `numpy.polyfit()` 方法进行多项式拟合。我们可以指定多项式的阶数,这里我们选择 3 阶多项式。 ```python p = np.polyfit(x_data, y_data, 3) ``` 4. 绘制拟合曲线 拟合完成后,我们可以使用 `numpy.polynomial.Polynomial()` 方法创建一个多项式对象,并使用 `linspace()` 方法生成一系列等间距的 x 坐标用于绘图。 ```python poly = Polynomial(p) x_fit = np.linspace(x_data.min(), x_data.max(), 50) y_fit = poly(x_fit) ``` 5. 绘制图形 最后,我们可以使用 `matplotlib.pyplot` 库绘制出原始数据和拟合曲线。 ```python plt.plot(x_data, y_data, 'o', label='Data') plt.plot(x_fit, y_fit, label='Fit') plt.legend() plt.show() ``` 完整代码如下: ```python import numpy as np import matplotlib.pyplot as plt from numpy.polynomial import Polynomial line1 = [1, 2, 3, 4, 5] line2 = [1, 4, 9, 16, 25] x_data = np.array(line1) y_data = np.array(line2) p = np.polyfit(x_data, y_data, 3) poly = Polynomial(p) x_fit = np.linspace(x_data.min(), x_data.max(), 50) y_fit = poly(x_fit) plt.plot(x_data, y_data, 'o', label='Data') plt.plot(x_fit, y_fit, label='Fit') plt.legend() plt.show() ``` 运行后,您应该会看到一张包含原始数据和拟合曲线的图形。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值