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

2023-11-09

一、需求描述

本人最近需要对多个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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 教你Ubuntu安装python3.7,并更新python默认指向

    Ubuntu默认的python版本一般为python 2 x 因此需要手动安装自己需要的版本 并且将python的指向更新为自己的版本 先查看当前python的指向 ls l usr bin grep python 因为我这里已经安装好了p
  • 大型公司网络构建拓扑图(华为)

    今天简单了解一下 大型公司的网络搭建 对于很多大型公司来讲 网络的稳定性 会直接影响到公司的收益 比如 双十一的阿里巴巴 京东 等等 如果这个时候网络出现问题 对于公司的损失将会是不可估量的 可见公司网络稳定 对公司的重要性了 那接下来就给
  • 小鱼深度产品测评之:阿里云新款通用算力型ECS云服务器Universal实例,实力与能力并存的一款产品。

    ECS U实例评测 1 引言 2 购买流程 3 向导展示 4 实例 4 1 创建实例 4 2 迁移上云 4 3 查询功能 4 3 1 下拉框选项 4 3 2 查询结果保存 4 4 默认定位 4 5 分组 4 6 监控 4 6 1 查看监控大
  • Qt防止重复调用

    QT中要用到 类似按键防抖static void func to debounce int a qDebug lt lt a 1 lt lt debounce test 需要实现的函数 static void debounce test f
  • Dice系数(Dice coefficient)与mIoU与Dice Loss

    Dice系数和mIoU是语义分割的评价指标 在这里进行了简单知识介绍 讲到了Dice顺便在最后提一下Dice Loss 以后有时间区分一下在语义分割中两个常用的损失函数 交叉熵和Dice Loss 一 Dice系数 1 概念理解 Dice系
  • 在java中插入gif_在java程序中显示gif图片的代码

    import java awt import java awt image public class ImageCanvas extends Canvas Image image public ImageCanvas String name
  • rsync 未授权访问漏洞

    雨笋教育小编来分享干货了 感兴趣的可以一同探讨 0x00前言 rsync是Linux下一款数据备份工具 支持通过rsync协议 ssh协议进行远程文件传输 0x01漏洞原理 rsync协议默认监听873端口 如果目标开启了rsync服务 并
  • BUCK BOOST以及Charge Pump电路原理

    下文为个人总结三种常见的开关电源 如有疑问欢迎评论区讨论 BUCK 当开关管Q1驱动为高电平时 开关管导通 储能电感L1被充磁 流经电感的电流线性增加 同时给电容C1充电 给负载R1提供能量 当开关管Q1驱动为低电平时 开关管关断 储能电感
  • hivesql解析json格式的key与value

    目录 解析json格式中的key 解析json格式中的value json格式示例 city code 340100 county code 340111 orientation 东 road id 35204271 speed 35 72
  • NNDL 实验六 卷积神经网络(3)LeNet实现MNIST

    目录 5 3 基于LeNet实现手写体数字识别实验 5 3 2 模型构建 5 3 3 模型训练 5 3 4 模型评价 5 3 5 模型预测 使用前馈神经网络实现MNIST识别 与LeNet效果对比 选做 可视化LeNet中的部分特征图和卷积
  • docker安装redis Docker安装redis docker安装Redis 详细教程

    docker安装redis Docker安装redis docker安装Redis 详细教程 Docker 上安装 Redis 的步骤 选择要安装的Redis版本 1 拉取 Redis 镜像 2 创建并运行容器 创建 redis conf
  • 02-linux安装nodejs

    1 前期准备 1 Node js简介 简单的说 Node js 就是运行在服务端的 JavaScript Node js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 Node js 使用了一个事件驱动 非阻塞式
  • 组态王、力控、MCGS、瑞尔、杰控等国内组态软件一点看法

    2005年08月28日 23 26 00 从结构上说 组态王和MCGS一样 前台动画和后台集成在一起 在运行模式下一起运行 而力控 瑞尔却分为后台驱动 实时数据库 前台三部分组成 更为有意思的是 瑞尔的每一个驱动就是一个EXE 其驱动DLL
  • Spring 中的事件监听机制

    目录 1 标准的 Spring 事件机制 1 ApplicationEvent 自定义事件 2 ApplicationEventPublisher 发布事件 3 ApplicationListener 监听事件 2 基于 EventList
  • 嵌入式与人工智能关系_嵌入式人工智能的发展趋势

    嵌入式与人工智能关系 嵌入式人工智能的发展趋势 所谓嵌入式人工智能 就是设备无须联网通过云端数据中心进行大规模计算去实现人工智能 而是在本地计算 在不联网的情况下就可以做实时的环境感知 人机交互 决策控制 那么嵌入式与人工智能关系是什么 嵌
  • spark学习6:应用程序的打包部署

    standlone 集群模式下 提交应用后 可以在浏览器中输入 spark master 8080 查看执行情况 yarn集群模式下 提交应用程序 提交后 可以在tracking URL 中查看记录 如下图 ps 在 spark shell
  • python项目实现配置统一管理的方法

    一个比较大的项目总是会涉及到很多的参数 最好的方法就是在一个地方统一管理这些参数 最近看了不少的python项目 总结了两种很有意思的配置管理方法 第一种 基于easydict实现的配置管理 首先需要安装numpy easydict以及ya
  • jmeter性能测试输出html报告

    前言 jmeter在界面模式下执行性能测试会占用大量的系统资源 导致测试数据不准确 为了减少系统资源的占用 我们建议在cmd 即非GUI模式 模式输入命令 进行性能测试 jmeter自带输出html测试报告功能 1 准备 写好脚本 2 在j
  • mysql—注入点获取WebShell的几种方式

    利用条件 1 有写文件条件 secure file priv show variables 要么禁用 要么设置了路径 show variables like secure 目录权限 对于MySQL来说 有可以对某个目录进行读写的权限 Sel
  • 【C++】【MATLAB】三元二次多项式拟合求极值点原理+代码

    一 需求描述 本人最近需要对多个3维数据进行曲线的拟合 并且找到极大值点 难点 1 一组数据有125个点 每个点有3个坐标值 x y z 以及一个对应的得分值t x y z范围不限 t的范围是0到1 2 得用C 语言去实现本人的需求 因此在