首页 > 其他分享 >拟合圆的梯度下降法例子

拟合圆的梯度下降法例子

时间:2023-04-06 15:57:05浏览次数:25  
标签:dex dey resolve 梯度 der float 例子 拟合

最近研究了一下梯度下降法,所以写了个拟合圆的方法。拟合圆属于非线性拟合。网上的最小二乘法拟合圆公式并不是误差的平方,而是4次方(为了去掉公式里的开方)。一般可以先用网上的公式得到一个初始解,然后再用梯度下降法继续求精。下述代码基于VS2017、Qt5.9和OpenCV430,通过了验证。代码中为了加速收敛限制了迭代的最小步长为0.005。如果步长小于它则会放大步长,因此该程序的求解精度约为5‰。代码如下:

void main()
{
    vector<Point2f> points = { { -1, -1 }, { 1, 1 }, { 1, -1 } };
    Matx13f resolve = Matx13f::zeros();
    for (int loop = 0; loop < 50; loop++)
    {
        float dex = 0;
        float dey = 0;
        float der = 0;
        for (auto pt : points)
        {
            float dx = pt.x - resolve(0);
            float dy = pt.y - resolve(1);
            float g = sqrtf(dx * dx + dy * dy);
            float f = g - resolve(2);
            dex += -2 * f / g * dx;
            dey += -2 * f / g * dy;
            der += -2 * f;
        }
        dex /= points.size();
        dey /= points.size();
        der /= points.size();
        dex *= 0.1f;
        dey *= 0.1f;
        der *= 0.1f;
        float maxv = std::max({ fabs(dex), fabs(dey), fabs(der) });
        if (maxv < 0.005f)
        {
            dex = dex / maxv * 0.005f;
            dey = dey / maxv * 0.005f;
            der = der / maxv * 0.005f;
        }
        resolve(0) -= dex;
        resolve(1) -= dey;
        resolve(2) -= der;
        qDebug() << dex << dey << der;
    }
    qDebug() << resolve(0) << resolve(1) << resolve(2) << "-<";
}

 

标签:dex,dey,resolve,梯度,der,float,例子,拟合
From: https://www.cnblogs.com/mengxiangdu/p/17293027.html

相关文章

  • 深度学习基础入门篇[三]:优化策略梯度下降算法:SGD、MBGD、Momentum、Adam、AdamW
    1.梯度下降算法(优化器)1.1原理解释如果我们定义了一个机器学习模型,比如一个三层的神经网络,那么就需要使得这个模型能够尽可能拟合所提供的训练数据。但是我们如何评价模型对于数据的拟合是否足够呢?那就需要使用相应的指标来评价它的拟合程度,所使用到的函数就称为损失函数(LossFu......
  • python 浅拷贝和深拷贝,赋值的例子
    一、浅拷贝copy.copy()数据半独立,看下面例子1、一层列表,能够完全拷贝,和深拷贝一样的效果import copyalist=[1,2,3]#id;2281268077504blist=copy.copy(alist)#id:2281267497216alist.append(13)#一层列表添加值后,alist的值:[1,2,3,13]#blist的值不变:[1,......
  • Kotlin高阶函数的小例子
    Kotlin的高阶函数可以作为参数传递给其他函数或者返回一个函数作为结果。以下是一个简单的例子:funmain(){valnumbers=listOf(1,2,3,4,5)valevenNumbers=numbers.filter{it%2==0}println(evenNumbers)}在这个例子中,我们使用了高阶函......
  • 逆向——从一个实际例子看EBP+4为何是函数的返回地址
    第六节1、逆向CRACKME1、OD加载CRACKME后,为啥地址停在0x00401000?--需要知道什么是PE结构。  ——————2、出现这个框,表示程序已经执行完判断。3、弹出窗口是WIN32API的知识,它是API的MessageBoxA函数实现的功能。  ——————4、如何正确的下断点?(1)在OD......
  • SpringBoot的@Async注释的用法并例子
    在SpringBoot中,@Async注解用于将一个方法标记为异步执行的方法。使用该注解的方法将在一个单独的线程中异步执行,而不会阻塞调用线程。这对于处理需要长时间运行的任务或需要异步处理的任务非常有用。下面是一个简单的示例:@ServicepublicclassMyService{@Asyncpu......
  • 如何理解信息隐藏和局部化?用自己的话或者例子表达其含义
      信息隐藏是指在一个系统或者数据中,有一些信息是被隐藏起来的,不被直接展示或者访问的。这些信息可能是敏感信息,需要保密,或者是不必要的信息,不需要被用户或者其他系统访问。例如,在一个网站的后台管理系统中,管理员可以看到所有用户的个人信息,但是普通用户只能看到自己的信息,这......
  • R语言GAMLSS模型对艾滋病病例、降雪量数据拟合、预测、置信区间实例可视化
    GAMLSS模型是一种半参数回归模型,参数性体现在需要对响应变量作参数化分布的假设,非参数性体现在模型中解释变量的函数可以涉及非参数平滑函数,非参数平滑函数不预先设定函数关系,各个解释变量的非线性影响结果完全取决于样本数据。它克服了GAM模型和广义线性模型(GeneralizedLinearM......
  • C语言 特殊例子及说明
    #include<stdio.h>main(){charc;c=0345;printf("%d\n",c);}16进制:每个16进制转成4位2进制,分组计算8进制345:转2进制,每个8进制转成3位2进制2进制:011100101229:1286432168421补码:11......
  • Media Query 在 CSS 中使用的一个具体例子
    在CSS中,MediaQuery是一种用于指定不同屏幕尺寸和设备类型的样式表的技术。如下图所示:alland(max-width:360px)是一个MediaQuery表达式,它指定了一个条件,只有在......
  • future.get()处理多个线程的java例子
    一种代码示例是使用ExecutorService类的submit()方法提交多个Callable任务,并返回多个Future对象,然后在主线程中循环调用Future对象的get()方法获取结果,并进行汇总1。代码......