一、需求描述

本人最近需要对多个3维数据进行曲线的拟合,并且找到极大值点。
难点:
1.一组数据有125个点,每个点有3个坐标值(x,y,z),以及一个对应的得分值t。x,y,z范围不限,t的范围是0到1。
2.得用C++语言去实现本人的需求,因此在做拟合工作时不能直接简单调用MATLAB的Curve Fitting工具包,得自己明确具体的求解公式然后用C++实现。
本博客提供本人的求解思路以及具体代码,供参考。

二、求解思路

1.确定多项式

要想求极值点,首先要对拿到手的数据做曲线拟合,然后再求极值点。
一般使用的待拟合的函数就是多项式函数,而且本人的数据是越靠近中心,结果值越接近于1,所以就自然地使用二次多项式。
具体地表达式如下:

t=a0*x^2+a1*y^2+a2*z*2+a3*x*y+a4*x*z+a5*y*z+a6*x+a7*y+a8*z+a9

其中t代表得分值,x,y,z代表每个点的坐标值;而a0到a9就是需要利用已知的数据来求解出来的系数。

2.确定待定系数

如何确定这些系数?我们的目标很简单,让拟合出来的函数在已知的坐标点上的函数值和真实的得分值差距越小越好。
所以可以构建一个平方差的损失函数,对于每个点的损失函数公式如下:

Error = [ti-(a0*xi^2+a1*yi^2+a2*zi*2+a3*xi*yi+a4*xi*zi+a5*yi*zi+a6*xi+a7*yi+a8*zi+a9)]^2

那么所有点的损失函数就是将所有点的error累加起来即可。

那么如何找到合适的系数值让上述的损失函数最小?
根据高等数学的多元函数极值理论,在极值点对每个变量的偏导数为0。
对于上面的式子来说,每个系数最高次数是2次,经过求导之后最高只有1次,所以令所有的偏导数为0之后只有唯一的一组解。

令所有的偏导数为0,可以得到9组方程,并且转化为矩阵相乘的形式,如下图所示:

再通过逆矩阵的运算便可求解得到10个待定系数的值。

3.确定极大值点

在上一步确定待定系数之后,对于多项式求它的极值点的方法仍然令一阶偏导数为0来确定极值点的坐标,如下图所示:

最终就可以求解到极大值点的坐标了。

三、实现代码

本人将MATLAB和C++版本的代码都放到本人在Github上三元二次多项式求极值点的仓库中去了,可以按照注释去理解本人的实现。
欢迎点赞和转发,有问题的Github项目下提交你的Issue。

【C++】【MATLAB】三元二次多项式拟合求极值点原理+代码相关推荐

  1. 用Matlab求二次多项式,matlab二次多项式拟合

    用matlab做散点的二次曲线拟合_数学_自然科学_专业资料.例 对下面一组数据作二次多项式拟合 xi 0.1 0.2 0.4 0.5 0.6 0.7 0.8 0.9 1 yi 1.978 ..... ...

  2. matlab 椭圆方程拟合,matlab中如何插值拟合求椭圆方程

    [g_fitting.rar] 使用正交多项式完成数据拟合.程序对读入的gps采样点完成曲线拟合. (2007-08-01, matlab, 1KB, 26次) [曲面拟合.rar] 这是利用matl ...

  3. 「Pytorch」用二次多项式拟合三次多项式一百万次,看看最后能做到多好?

    一.背景 在廖星宇<深度学习入门>的github项目中,留了一道思考题: 小练习:上面的例子是一个三次的多项式,尝试使用二次的多项式去拟合它,看看最后能做到多好 提示:参数 w = tor ...

  4. matlab泰勒二维展开,matlab-自控原理 taylor 泰勒展开 一、二元函数

    matlab : R2018a 64bit OS : Windows 10 x64 typesetting : Markdown blog : my.oschina.net/zhichengjiu 一 ...

  5. matlab三次拟合多项式,matlab三次多项式拟合

    暂无评价|0人阅读|0次下载|举报文档 DSC曲线的三次样条拟合与Matlab实现_能源/化工_工程科技_专业资料.DSC曲线拟合与Matlab实现第... 人阅读|次下载 曲线拟合的最小二乘法mat ...

  6. 基于MATLAB的多项式数据拟合方法研究-毕业论文

    摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式 ...

  7. c++ 曲线拟合的最小二乘法 公式 二次多项式和三次多项式

    struct Hisnum//直方图结构体 进行多项式拟合 {     int gray;     int num; }; struct Hisnum//直方图结构体 进行多项式拟合 {int gra ...

  8. 【OpenCV】56 二值图像分析–直线拟合与极值点寻找

    56 二值图像分析–直线拟合与极值点寻找 代码 import cv2 as cv import numpy as npdef canny_demo(image):t = 80canny_output ...

  9. 沉降预测算法-二次多项式拟合法

    目录 1. 二次多项式模型 2. 最小二乘曲线拟合 3. 代码实现 4. 拟合结果 利用最小二乘算法拟合其他沉降预测曲线的实现方法参见:常见沉降预测算法,源代码和可执行程序参见:常用沉降预测算法实现代 ...

最新文章

  1. Windows 下的 7 种 DLL 劫持技术
  2. cocos2dx动作讲解
  3. kaldi语音识别实战pdf_语音识别相关工具和资料分享
  4. 任意文件上传mysql_BigDump 跨站脚本、SQL注入、任意文件上传漏洞
  5. OpenCV 之 直方图处理
  6. centos安装后两个启动项、_Windows安装Centos7双系统后Windows启动项消失
  7. 电脑上玩和平精英_和平精英奇幻之旅怎么玩-和平精英奇幻之旅玩法攻略
  8. BZOJ 5106 [CodePlus2017]汀博尔
  9. android 导入 苹果手机,安卓手机文件怎么传到苹果手机
  10. 计算机操作和电子技术应用,电子技术应用是学什么
  11. 快速安装vs2015社区版
  12. 网上评卷系统连接不到服务器,在网上阅卷系统过程中可能存在的问题及解决方法...
  13. Cpp环境【CQYZOJ3145】【CQOI2916】学生宿舍依法集会权遭受侵害案例
  14. 8051单片机(STC89C52)定时器实现10ms精准定时
  15. 快来学学爱用建站新功能【Light Press】微单页,超级实用
  16. 【第十八篇】商城系统-订单中心设计解决方案
  17. 资深IT经理人的辞职信 - 怀着梦想去远行!- 让自己慢下来(29)
  18. 解析几何复习(二)正交变换和仿射变换
  19. 【财富空间】65张PPT把工匠精神说清楚
  20. Adobe Flash Builder 4

热门文章

  1. 雾里看花的PDM系统实施
  2. [代码审计][PHAR]巅峰极客babyphp2学习压缩过滤器触发phar
  3. python里chars_python的string.strip(s[, chars])方法的各种小细节
  4. 微信小程序使用MQTT.JS中遇到的问题
  5. 阿里云张建锋:核心云产品全面 Serverless 化
  6. Javaee -- 酒店管理系统
  7. 数据结构与算法 迷宫夺宝 C语言
  8. 第一篇CSDN,来点有趣的东东吧~心算训练小程序
  9. python中的3d画图
  10. bugzilla 最新版本下载 3.01 增加更多新功能