栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

用C语言写梯度下降法求多个经纬度坐标的中心点

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用C语言写梯度下降法求多个经纬度坐标的中心点

前言一、梯度下降法是什么 二、使用步骤 1.欧氏距离函数2.求导函数3.梯度下降函数三.经纬度数据 总结


前言

当得到10个及以上的以经纬度为坐标的点时 我们往往需要得到其中心点 但大多数算法都是很暴力的直接求算数平均 效果不佳 所以想到了梯度下降法 但是它的难点也是显而易见的 怎么规划步长

算法的核心思想 得到的中心点是与各个点之间的距离和是最小的。

提示 以下是本篇文章正文内容 下面案例可供参考




一、梯度下降法是什么

具体的 请参考这里 作者水平有限 就不多说了

梯度下降算法原理讲解——机器学习_Arrow and Bullet-CSDN博客_梯度下降法




二、使用步骤


1.欧式距离函数

代码函数头如下 示例 由于特殊原因 我不能直接给出源代码 指针用的太垃圾了 容易误导比别人

不过 你们可以参考一下python的源码梯度下降-5463. 服务中心的最佳位置_yangzijiangtou-CSDN博客_服务中心的最佳位置

我的只有步长发生了变化 变成了0.01

double GetSum(double x,double y,double *q[2],int len)
//该函数求 x,y 与各个坐标的欧氏距离之和 q[2]存储的就是经纬度坐标 
len表示一共有多少个这样的坐标



2.求导函数
double* GetDeri(double x,double y,double *q[2],int len)
//参数含义与上同
3.梯度下降函数
double* GetMinDistSum(double *q[2],int len)
//参数含义与上同
//这里需要说明 要注意浮点数精度的问题 step不断除2 会从0.000001-》0.000000 这时候step 不是0 如果要退出程序 记得和10e-7比较。
//python中求绝对值是abs(),C语言对于浮点数是fabs(),注意哦。
三.经纬度数据
[(120.022991,42.332668),(117,40.527075),(120.820795,39.084449),(118.470878,38.303049),
 (112.5,37.490659),(117.0,37.780937),(110.157332,36.967925),(112.5,36.019736),
 (114.842668,36.967925),(112.5,39.907371),(112.5,35.255533),(113.779452,36.546141),
 (115.86597,37.360651),(113.748282,38.376738),(115.150882,39.331714)]

说明 该数据由硕士学问论文中计算得出 下图是该论文封面




总结

以上就是今天要讲的内容 本文仅仅简单介绍了梯度下降法的使用 读者可以对比者python版的 自行写出程序

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/266904.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号