【曲线全局逼近】

news2024/7/6 19:30:14

曲线全局逼近

本文是基于 这篇文章 翻译而来的,仅学习。

在插值中,插值曲线以给定的顺序通过所有给定的数据点。正如在全局插值页面中所讨论的,插值曲线可能会在所有数据点上摆动,而不是紧紧跟随数据多边形。为了克服这个问题,引入了逼近技术,放宽了曲线必须包含所有数据点的严格要求。在全局近似中,除了第一个和最后一个数据点外,曲线不必包含每个点。

为了测量曲线“近似”给定数据多边形的程度,使用了误差距离的概念。误差距离是数据点与其曲线上的“对应”点之间的距离。因此,如果这些误差距离的总和最小化,曲线应该紧密地跟随数据多边形的形状。插值曲线当然是这样一种解决方案,因为每个数据点的误差距离都是零。然而,要讨论的公式不太可能产生插值曲线。用这种方法得到的曲线称为近似曲线

假设我们有n+1个数据点D0, D1,…, Dn,并希望找到一条b样条曲线,它遵循数据多边形的形状,而不实际包含数据点。为此,我们需要另外两个输入:控制点的数量(即h+1)和度数( p ),其中必须保持n > h >= p >= 1。因此,近似比插值更灵活,因为我们不仅选择了度数,还选择了控制点的数量。以下是对我们问题的总结:
在这里插入图片描述least square:最小二乘

有了h和p,我们可以确定一组参数和节点向量。设参数为t0, t1,…, tn。注意,参数的数量等于数据点的数量。假设p次b样条曲线的近似是
在这里插入图片描述
其中P0, P1,…, Ph为 h+1 个未知控制点。由于我们希望曲线通过第一个和最后一个数据点,我们有D0 = C(0) = P0和Dn = C(1) = ph。因此,只有 h - 1 个未知控制点P1, P2,…, Ph-1。考虑到这一点,曲线方程如下所示:
在这里插入图片描述

最小二乘的意义

我们如何测量误差距离?由于参数tk对应数据点Dk,因此Dk与曲线上tk对应点的距离为|Dk - C(tk)|。由于该距离由一个平方根组成,不容易处理,因此我们选择使用平方距离|Dk - C(tk)|2。因此,所有误差距离的平方和为
在这里插入图片描述
当然,我们的目标是找到那些控制点P1,…, Ph-1,使得函数f()最小化。因此,近似是在最小二乘意义下进行的。

寻找解决方案

这部分有点乱,需要一些线性代数的知识。首先,让我们把Dk - C(tk)改写成另一种形式:

在这里插入图片描述
上面给出了D0, Dk和Dn,通过计算N0,p(u)和Nh,p(u)可以得到N0,p(tk)和Nh,p(tk)。点击这里学习如何计算这些系数。为了方便起见,我们定义一个新的向量Qk为:
在这里插入图片描述
那么平方和函数f()可以写成:

在这里插入图片描述

接下来,我们将找出误差距离的平方。回想恒等式x·x = |x|2。这意味着向量x与自身的内积给出了x长度的平方。因此,误差平方项可以重写为
在这里插入图片描述
然后,f()函数为:
在这里插入图片描述
我们如何最小化这个函数?函数f()实际上是一个椭圆抛物面,变量P1,…, Ph-1。因此,我们对f()对每个Pg进行微分,并找到这些偏导数的公共零。这些0是函数f()达到其最小值时的值。

在计算对Pg的导数时,请注意所有Qk和Ni,p(tk)都是常数(即不涉及Pk),它们对任何Pg的偏导数必须为零。因此,我们有
在这里插入图片描述
考虑求和中的第二项,它是Ni,p(tk)Pi · Qk的和。各子项的导数计算如下:
在这里插入图片描述
只有当i = g时,Pi对Pg的偏导数是非零的,因此,第二项的偏导数为:

在这里插入图片描述
第三项的导数更复杂;但这仍然很简单。下面使用乘法规则(f·g)’ = f ‘·g + f·g’。

在这里插入图片描述
如果i不等于g,则Pi对Pg的偏导数为零,因此求和中的第三项对Pg的偏导数为:

在这里插入图片描述
结合这些结果,f()对Pg的偏导数为

在这里插入图片描述
将其设置为0,我们得到以下内容:

在这里插入图片描述
因为我们有h-1变量,g从1到h-1,有h-1这样的方程。注意,这些方程在未知数Pi中是线性的。在继续之前,我们先定义三个矩阵:

在这里插入图片描述
这里,P的第k行是向量Pk, Q的第k行是上面第k个方程的右边,N的第k行包含了在tk 计算 N1,P(u), N2,P(u),…, Nh-1,p(u)的值。因此,如果输入数据点是s维向量,P、N和Q分别是(h-1)×s、(N -1)×(h-1)和(h-1)×s矩阵。

现在我们重写第g个线性方程

在这里插入图片描述
转换成另一种形式,以便容易读出Pi的系数:

在这里插入图片描述
最后,Pi的系数是

在这里插入图片描述
如果你观察矩阵N,你会看到Ng,p(t1), Ng,p(t2),…, Ng,p(tn-1)为N的第g列,Ni,p(t1), Ni,p(t2),…, Ni,p(tn-1)是N的第i列。注意,N的第g列是N的转置矩阵 NT的第g行,Pi的系数是NT的第g行和N的第i列的“内积”。根据这种观察,线性方程组可以重写为

在这里插入图片描述
由于N和Q是已知的,求解P的线性方程组可以得到所需的控制点。当然,我们已经找到了解决方案。

算法

虽然上一节的开发过程冗长而乏味,但最终结果却出奇地简单:解一个线性方程组,就像我们在全局插值中遇到的那样。因此,全局近似的算法也非常简单。

  • 输入:n+1个数据点D0, D1,…, Dn,度p,所需控制点数量h+1;

  • 输出:p次b样条曲线,由h+1个控制点定义,逼近给定的数据点;

  • 算法:
    Obtain a set of parameters t0, …, tn and a knot vector U;
    Let P0 = D0 and Ph = Dn;
    for k := 1 to n-1 do
         Compute Qk with the following formula:
    在这里插入图片描述
    for i := 1 to h-1 do
         Compute the following and save it to the i-th row of matrix Q;
    在这里插入图片描述

    /* matrix Q is available /
    for k := 1 to n-1 do
         for i := 1 to h-1 do
             Compute Ni,p(tk) and save to row k and column i of N;
    /
    matrix N is available */
    Compute M = NT·N;
    Solving for P from M·P = Q;
    Row i of P is control point Pi;
    Control points P0, …, Ph, knot vector U and degree p determines an approximation B-spline curve;

度和控制点数量的影响

很明显,数据点对近似曲线的形状有影响。p度和控制点的数量对曲线形状的影响是什么?下图显示了10个数据点(n=9)在不同的度数和控制点数量下的近似曲线。每一行给出次数相同但控制点个数不同的近似曲线,每一列给出次数相同但控制点个数不同的近似曲线。注意,所有曲线都使用向心方法来计算其参数。

在这里插入图片描述
可以理解的是,低阶曲线通常不能很好地逼近数据多边形,因为它们不是很灵活。因此,在每一列上,阶数越高,结果越好(即越接近数据多边形)。基于同样的原因,控制顶点越多,逼近曲线的灵活性越高。因此,在每一行上,随着控制点数量的增加,曲线变得更接近数据多边形。

我们应该使用高阶曲线和许多控制点吗?答案是否定的,因为全局逼近可能比全局插值使用更少的控制点。如果控制点的数量等于数据点的数量,全局逼近就变成了全局插值,我们就可以使用全局插值!至于次数,我们当然希望是最小的次数,只要生成的曲线能符合数据多边形的形状。

为什么这个方法是全局的?

这种近似方法是全局的,因为改变数据点的位置会导致整个曲线发生变化。下图中的黄色点是给定的数据点,将被3次b样条曲线和5个控制点(即n = 7, p=3和h = 4)近似。参数是用向心方法计算的。假设数据点4被移动到一个由浅蓝色点表示的新位置。新的近似b样条是蓝色的。如你所见,除了第一个和最后一个数据点被算法固定外,原始曲线和新曲线的形状非常不同。因此,由于修改数据点而产生的变化是全局的!

在这里插入图片描述

补充:距离度量常见的有几何距离和代数距离。几何距离表示某点到曲线最近点的距离。平面内某点(x0,y0)到方程 f(x,y)=0 所代表曲线的代数距离就是 f(x0,y0)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/136078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

包装类的使用

文章目录一、单元测试方法的使用步骤二、包装类的使用基本数据类型、包装类、String类型之间的相互转化基本数据类型——>包装类注意包装类——>基本数据类型自动装箱与自动拆箱(jdk5.0后)基本数据类型、包装类——>String类型String类型——&g…

史上最全 Appium 自动化测试从基础到框架实战精华学习笔记(一)

1080402 31.8 KB 对测试人来说,Appium 是非常重要的一个开源跨平台自动化测试工具,它允许测试人员在不同的平台(iOS、Android 等)使用同一套 API 来写自动化测试脚本,这样可大幅提升代码复用率和工作效率。 本文汇总了…

郭盛华:警惕家庭智能扬声器中潜在的窃听风险

一名安全研究人员因识别Google Home智能扬声器中的安全问题而获得了107500美元的漏洞赏金,这些问题可能被用来安装后门并将其变成窃听设备。 国际知名网络黑客安全专家、东方联盟创始人郭盛华在一篇技术文章中透露:这些漏洞“允许无线附近的攻击者在设备…

服务的雪崩以及解决方案

文章目录一、什么是服务的雪崩二、服务雪崩形成的原因三、雪崩解决方案3.1 设置超时时间3.2 线程隔离(舱壁模式)3.3 熔断器(断路器)3.4 限流四、总结一、什么是服务的雪崩 服务的雪崩效应是一种因服务提供者不可用导致服务调用者…

从源码角度带你清楚分析Spring 的Lazy-init 延迟加载机制原理

lazy-init 延迟加载应用 ApplicationContext 容器的默认值行为是在启动服务器时将所有Singleton Bean 提前进行实例,提前实例化意味着作为初始化过程的一部分,ApplicationContext 实例会创建并配置所有的singleton Bean. 例如: <bean id"testBean" class"c…

张力控制PID增益(Kp)自适应算法详解(含SCL和梯形图完整源代码)

有关收放卷张力控制的详细内容,请参看下面的文章链接,这里不再赘述。 变频器简单张力控制(线缆收放卷应用)_RXXW_Dor的博客-CSDN博客张力控制的开闭环算法,可以查看专栏的其它文章,链接地址如下:PLC张力控制(开环闭环算法分析)_RXXW_Dor的博客-CSDN博客。https://blo…

ThinkPHP3.2.3_SQLi

文章目录ThinkPHP3.2.3_SQLi0x00 测试代码0x02 paylaod0x03 调用分析0x04 漏洞成因0x05 总结ThinkPHP3.2.3_SQLi 刚好有朋友在测一个目标是tp3.2.3框架的站遇到了一些问题 顺手跟一下流程复现一下吧。 0x00 测试代码 <?php namespace Home\Controller; use Think\Contr…

启岁新程|跨越2022,2023一起追光而行!

和气渐入东风&#xff0c;岁杪将迎春临&#xff0c; 时间的车轮即将驶离2022开往2023&#xff0c; 回首来时路&#xff0c;我们收获满满&#xff0c; 展望新征程&#xff0c;我们斗志昂扬...... 2022注定是不平凡的一年&#xff0c; 在这一年里&#xff0c; 我们与行业同行…

深度学习:07 CNN经典模型总结(LeNet-5、AlexNet、VGG、GoogLeNet、ResNet)

目录 CNN经典网络模型 LeNet-5 AlexNet VGG GoogLeNet (Inception) ResNet 如何选择网络 CNN经典网络模型 以下介绍了LeNet-5、AlexNet、VGG、GoogLeNet、ResNet等&#xff0c;它们通常用于图像的数据处理&#xff0c;那么卷积神经网络是否应用于自然语言分类任务呢&am…

.net可视化表单设计工具

在很多软件系统中&#xff0c;表单开发都是很重要的一个部分。在表单开发中&#xff0c;往往会遇到重复开发的问题&#xff0c;例如在页面搭建系统中&#xff0c;除了组件本身的逻辑&#xff0c;配置组件数据的表单通常也需要开发人员重复手动开发。这就导致开发人员不仅要维护…

VS1053音频解码器介绍

VS1053音频解码器简介 VS1053b是单片Ogg Vorbis/MP3/AAC/WMA/MIDI音频解码器&#xff0c;及IMA ADPCM 编码器和用户加载的Ogg Vorbis编码器。它包含了一个高性能、有专利的低功耗DSP处理器内核VS_DSP、工作数据存储器、供用户应用程序和任何固化解码器一起运行的16 KiB 指令RAM…

小程序:后台交互-首页

目录 一&#xff0c;数据库准备 二&#xff0c;后台准备 pom.xml 配置数据源 mybatis-generator 整合mybatis 三&#xff0c;准备前端首页的数据 Promise 封装request 会议展示 四&#xff0c;通过wxs将首页动态数据优化 一&#xff0c;数据库准备 二&#xff0c;后…

docker的镜像存放地址

今天突然想到一个问题&#xff0c;docker的镜像到底存在哪的&#xff0c;一直没太注意&#xff0c;稍微记录下 1、先查看下本地有哪些images docker images 2、找到docker的数据目录 /var/lib/docker 可以看到有好多的目录 盲猜一波大概也能猜到 containers 是当前运行的容器…

React-Router6路由相关一(路由的基本使用、重定向、NavLink·、路由表、嵌套路由)(七)

系列文章目录 第一章&#xff1a;React基础知识&#xff08;React基本使用、JSX语法、React模块化与组件化&#xff09;&#xff08;一&#xff09; 第二章&#xff1a;React基础知识&#xff08;组件实例三大核心属性state、props、refs&#xff09;&#xff08;二&#xff0…

Android OpenGL ES 学习(十二) - MediaCodec + OpenGL 解析H264视频+滤镜

OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学习(三) – 绘制平面图形 Android OpenGL ES 学习(四) – 正交投影 Android OpenGL ES 学习(五) – 渐变色 Android OpenGL ES 学习(六) – 使用…

宝妈可以做什么副业比较好?盘点七种适合宝妈的在家工作

现在有很多全职宝妈在家带孩子的&#xff0c;除了带孩子以外呢&#xff0c;还有很多的空闲时间&#xff0c;所以找一份自由的兼职工作是如今很多宝妈的想法。不仅可以给家里增加收入&#xff0c;支付日常开支&#xff0c;减轻老公的压力&#xff0c;还可以让自己学点新的赚钱知…

Linux编辑器-vim

一、vim的基本概念 我们讲解vim的三种模式(其实有好多模式&#xff0c;目前掌握这3种即可),分别是命令模式&#xff08;command mode&#xff09;、插入模式&#xff08;Insert mode&#xff09;和底行模式&#xff08;last line mode&#xff09;&#xff0c;各模式的功能区分…

OpenCV4入门到进阶

OpenCV4入门到进阶 第1章 介绍与学习指南 第2章 OpenCV开发环境搭建 第3章 图像&视频的加载与展示 第4章 OpenCV必知必会基础 第5章 OpenCV实现图形的绘制 第6章 OpenCV的算术与位运算 第7章 图像基本变换 第8章 OpenCV中的滤波器 第9章 OpenCV中的形态学 第10章 目标识别…

Redis事务以及缓存雪崩,缓存穿透,缓存击穿简介及解决策略

事物的基本操作 *开启事务 multi *作用 设定事物的开启位置,此指令执行后,后续的所有指令均加入到事物中 *执行事物 exec *作用 设定事物的结束位置,同时执行事物,与multi成对出现,成对使用 注意:加入事物的命令暂时进入到任务队列中,并没有立即执行,只有执行exec命令才开始执行…

商业与新消费:从2022到2023

【潮汐商业评论/原创】 “暴风雨结束后&#xff0c;你不会记得自己是怎样活下来的&#xff0c;你甚至不确定暴风雨真的结束了。但有一件事是确定的&#xff1a;当你穿过暴风雨&#xff0c;你就不再是原来那个人。”——村上春树转眼间&#xff0c;时间的齿轮已经从2022滑向了20…