C#使用MathNet库来对进行曲线拟合
下面是用来求取一条直线和一条拟合曲线交点的代码
/// <summary>
/// 拟合曲线所筛选的点的个数
/// </summary>
const int CurveNums = 10; /// <summary>
/// 拟合曲线的阶数
/// </summary>
public int m =2; /// <summary>
/// 取直线上的点的个数
/// </summary>
const int XNums = 50;
/// <summary>
/// 最小二乘法拟合曲线
/// </summary>
/// <param name="X">X轴数组</param>
/// <param name="Y">Y轴数组</param>
/// <param name="m">阶数</param>
/// <returns>返回曲线方程的各阶系数(由高阶到低阶,一般m=2)</returns>
public double[] FittingCurveByLeastSquare(double[] X, double[] Y, int m = 2)
{
/// https://blog.csdn.net/qq_23062949/article/details/119700640?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.no_search_link
double[] res = new double[m + 1];
if (X.Length > m && Y.Length > m)
{
res = Fit.Polynomial(X, Y, m);
}
return res;
} /// <summary>
/// 计算直线方程
/// </summary>
/// <param name="StartPoint">直线起点</param>
/// <param name="angle">直线的角度</param>
/// <returns>返回k,b的数组</returns>
public double[] CalculateLine(Point StartPoint, double angle)
{
double k = Math.Tan(angle / 180 * Math.PI);
double b = StartPoint.Y - k * StartPoint.X;
return new double[] { k, b };
} /// <summary>
/// 计算交点
/// </summary>
/// <param name="LineResult">直线的k,b</param>
/// <param name="CurveResult">拟合曲线的系数数组</param>
/// <param name="LineX">直线上的点的X坐标</param>
/// <param name="m">阶数</param>
/// <returns></returns>
public EPoint CalculateInterPoint(double[] LineResult, double[] CurveResult, double[] LineX, int m)
{
EPoint InterPoint = new EPoint();
if (LineResult.Length == 2 && CurveResult.Length == (m + 1))
{
double k = LineResult[0];
double b = LineResult[1];
for (int i = 0; i < LineX.Count(); i++)
{
double x = LineX[i];
double y_Line = k * x + b;
double y_Curve = 0;
for (int n = 0; n <= m; n++)
{
y_Curve += CurveResult[n] * Math.Pow(x, n);
}
bool IsSuccessFind = false;
for (int t = 1; t <= 50; t++)
{
if (Math.Abs(y_Line - y_Curve) < 5)
{
InterPoint = new EPoint((int)x, (int)y_Line);
IsSuccessFind = true;
break;//跳出内循环
}
}
if (IsSuccessFind)
{
break;//跳出外循环
}
}
}
return InterPoint;
} /// <summary>
/// 计算R^2,R^2这个值越接近1,说明拟合出来的曲线跟原曲线就越接近
/// </summary>
/// <param name="Y">实际的Y</param>
/// <param name="Ytest">代入拟合曲线方程得到的Y</param>
/// <returns>返回R^2</returns>
public double CalculateRSquared(double[] Y, double[] Ytest)
{
double RSquared = GoodnessOfFit.RSquared(Y, Ytest);
return RSquared;
}
C#使用MathNet库来对进行曲线拟合的更多相关文章
- C#环境下的数值计算库:MathNet
下面用一个简单的例子来说明MathNet的使用方法: 1. 进入MathNet官网找到数值计算库Math.NET Iridium(Numerics)并下载: 2. 将下载的文件解压缩,在目录下的Bin ...
- Scipy教程 - 优化和拟合库scipy.optimize
http://blog.csdn.net/pipisorry/article/details/51106570 最优化函数库Optimization 优化是找到最小值或等式的数值解的问题.scipy. ...
- Ceres-Solver库入门
示例1:求极值 首先我们以Ceres库官网中的Hello World例子来进行说明.这里例子的目的是为了计算方程取得最小值时x的值.从这个方程很容易看出来当x=10时,f(x)取得最小值0.这个方程虽 ...
- 关于java实现自定义曲线拟合的研究
项目需要拟合曲线,使用java实现.采用了apache-commons-math3实现自定义的曲线. 作为apache开源的搞数学计算的超强的库,一直不受市场重视.为啥呢?经过研究,使用java这个强 ...
- HslCommunication组件库使用说明
一个由个人开发的组件库,携带了一些众多的功能,包含了数据网络通信,文件上传下载,日志组件,PLC访问类,还有一些其他的基础类库. nuget地址:https://www.nuget.org/packa ...
- Ceres Solver: 高效的非线性优化库(二)实战篇
Ceres Solver: 高效的非线性优化库(二)实战篇 接上篇: Ceres Solver: 高效的非线性优化库(一) 如何求导 Ceres Solver提供了一种自动求导的方案,上一篇我们已经看 ...
- Ceres Solver: 高效的非线性优化库(一)
Ceres Solver: 高效的非线性优化库(一) 注:本文基于Ceres官方文档,大部分由英文翻译而来.可作为非官方参考文档. 简介 Ceres,原意是谷神星,是发现不久的一颗轨道在木星和火星之间 ...
- Python机器学习之数据探索可视化库yellowbrick
# 背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维.陆续使用过plot ...
- python应用 曲线拟合04
python应用 曲线拟合04 → 多项式拟合 主要是使用 numpy 库中的 polyfit() 函数,见第 66 行, z = np.polyfit(x_proton, y, 3) ,其中待拟合曲 ...
随机推荐
- MySQL递归查询语法
业务上有一个递归查询数据表进行累加计算的需求,实现方式上有函数.SQL语句等多种方式,最后选择了SQL方式,如下: <select id="selectChildren" p ...
- 【突然想多了解一点】可以用 Task.Run() 将同步方法包装为异步方法吗?
[突然想多了解一点]可以用 Task.Run() 将同步方法包装为异步方法吗? 本文翻译自<Should I expose asynchronous wrappers for synchrono ...
- 大促活动如何抵御大流量 DDoS 攻击?
每一次活动大促带来的迅猛流量,对技术人而言都是一次严峻考验.如果在活动期间遭受黑产恶意DDoS攻击,无疑是雪上加霜.电商的特性是业务常态下通常不会遭受大流量DDoS攻击,且对延迟敏感,因此只需要在活动 ...
- Docker安装Openresty总结
1. 启动Docker systemctl start docker 2. 查询有没有openresty镜像 docker search openresty -s 30 -s 30 stars数大于3 ...
- 将生成的Debug文件中的exe文件添加图标
制作.ico图片地址:https://www.bitbug.net/
- 海康摄像机使用GB28181接入SRS服务器的搭建步骤---源码安装的方式
下载代码 地址:https://github.com/ossrs/srs-gb28181 https://github.com/ossrs/srs-gb28181.git 注意:使用的是含有gb281 ...
- ssh访问控制,阻断异常IP,防止暴力破解
文章转载自:https://mp.weixin.qq.com/s/oktVy09zJAAH_MMKdXjtIA 由于业务需要将Linux服务器映射到公网访问,SSH 端口已经修改,但还是发现有很多IP ...
- 天翼云主机某一IP多次登录失败导致IP被锁无法登录,天翼云主机莫名其妙无法远程登陆
情况说明: 直接使用该IP通过ssh远程连接失败,但是先通过ssh远程连接其他主机上,然后在这个主机上再ssh刚才连接失败的主机,就能登陆上. 说明,root用户不是被锁了, 而是远程登陆IP被锁了 ...
- 05_Java基础知识
Java基础知识 一. Java的语言特点 面向对象(贴近人类思维模式,模拟现实世界,解决现实问题) 简单性(自动内存管理机制,不易造成内存溢出:简化流程处理.语义清晰) 跨平台(操作系统.服务器.数 ...
- influxDB2.2
下载安装 下载地址 下载后在解压目录中,输入cmd执行exe文件 浏览器访问localhost:8086 选择快速开始,填写用户信息,组织信息 相关概念 InfluxDB是一个由InfluxData开 ...