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

文章目录

前言

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

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


提示:以下是本篇文章正文内容,下面案例可供参考
一、梯度下降法是什么?

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

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

二、使用步骤

1.欧式距离函数

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

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

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

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版的,自行写出程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值