曲线拟合 | 二次B样条拟合曲线

2024-06-14 10:52

本文主要是介绍曲线拟合 | 二次B样条拟合曲线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

B 样条曲线拟合实例:能平滑化曲线

1. 实例1

为MASS包中mcycle数据集。它测试了一系列模拟的交通车事故中,头部的加速度,以此来评估头盔的性能。times为撞击时间(ms),accel为加速度(g)。首先导入数据,并绘制散点图

(1) 关键函数

# bs() ====
# bs(x, df = NULL, knots = NULL, degree = 3, intercept = FALSE,
#   Boundary.knots = range(x))
#参数解释:
#x:自变量,这里为x
#df: 自由度(回归函数中的参数个数),默认为0,由于我们需要截距,
#  2.2 节中c中提到的公式减去1,因此自由度为4+3 = 7
#knots:节点的位置,这里为c(15,20,32,40)
#degree:q值,默认为3
#其他的参数保持默认即可

然后搭配lm 函数,即可画出样条函数曲线

(2) 代码

# Spline ====
x=mcycle$time
y=mcycle$accel
plot(x, y, type="p", pch=19, cex=0.5)library(splines)
#B = spline(y, n=3*length(y) )
#lines(B$x, B$y, lty=2, col="red")bspl <- lm(y~bs(x, df =7, #knots = c(15,20,32,40), degree=2))
lines(x, fitted(bspl),lwd = 2, col = 2)ref: https://blog.csdn.net/weixin_39642998/article/details/110705947

似乎不靠谱,需要自己指定锚点位置?去掉 knots 参数就好了。
请直接看2(2)

2. help 例子:更靠谱的方法

(1) 原例:不明显

require(stats); require(graphics)
head(women)
bs(women$height, df = 5)
summary(fm1 <- lm(weight ~ bs(height, df = 5), data = women))## example of safe prediction
plot(women, xlab = "Height (in)", ylab = "Weight (lb)")
ht <- seq(57, 73, length.out = 200)
lines(ht, predict(fm1, data.frame(height = ht)))

(2) 重做例1,模仿(1)

library(MASS)
head(mcycle)
x=mcycle$times
y=mcycle$accel#plot(x, y, pch=19, cex=0.5)
library(splines)
bs(y, df = 5)
summary(fm1 <- lm(y ~ bs(x, df = 7, degree = 2), data = NULL))## example of safe prediction
plot(mcycle, xlab = "times", ylab = "accel", pch=19, cex=0.5)
x_2 <- seq(min(x), max(x), length.out = 200)
lines(x_2, predict(fm1, data.frame(x = x_2)), lwd=2, col="red")

目测效果很好!
参数解释:
df=7,有大概7个控制点,越多拟合越好;太多就会过拟合!
degree=3,次数。

在这里插入图片描述

这篇关于曲线拟合 | 二次B样条拟合曲线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1060199

相关文章

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

基于NURBS曲线的数据拟合算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1NURBS曲线基础 4.2 数据拟合原理 5.完整程序 1.程序功能描述        基于NURBS曲线的数据拟合算法,非均匀有理B样条(Non-Uniform Rational B-Splines,简称NURBS)曲线是一种强大的数学工具,广泛应用于计算机图形学、CAD/CA

自动驾驶规划中使用 OSQP 进行二次规划 代码原理详细解读

目录 1 问题描述 什么是稀疏矩阵 CSC 形式 QP Path Planning 问题 1. Cost function 1.1 The first term: 1.2 The second term: 1.3 The thrid term: 1.4 The forth term: 对 Qx''' 矩阵公式的验证 整体 Q 矩阵(就是 P 矩阵,二次项的权重矩阵)

几何内核开发-实现自己的NURBS曲线生成API

我去年有一篇帖子,介绍了NURBS曲线生成与显示的实现代码。 https://blog.csdn.net/stonewu/article/details/133387469?spm=1001.2014.3001.5501文章浏览阅读323次,点赞4次,收藏2次。搞3D几何内核算法研究,必须学习NURBS样条曲线曲面。看《非均匀有理B样条 第2版》这本书,学习起来,事半功倍。在《插件化算法研究平台

Android自定义系列——8.Path之贝塞尔曲线

贝塞尔曲线能干什么 贝塞尔曲线作用十分广泛,简单举几个的栗子: QQ小红点拖拽效果一些炫酷的下拉刷新控件阅读软件的翻书效果一些平滑的折线图的制作很多炫酷的动画效果 理解贝塞尔曲线的原理 一阶曲线原理: 一阶曲线是没有控制点的,仅有两个数据点(A 和 B),最终动态过程如下: (本文中贝塞尔曲线相关的动态演示图片来自维基百科)。一阶曲线其实就是前面讲解过的lineTo。 二阶曲线

简单了解ESD模型与TLP曲线

上文讲了ESD和EOS的区别,说实话远不止那些。今日再稍加深入的介绍ESD。 一 ESD原理 ESD-Electro Static Discharge静电放电,具有不同静电电位的物体互相靠近或者直接接触引起的电荷转移。正常情况下,物体内部的正负电荷是相等的,对外表现不带电。当任何两种不同材质的物体接触后再分离就会产生静电。当正负电荷逐渐累计到一定程度时,将与周围环境产生电位差,从而使电荷经由放

智能优化算法改进策略之局部搜索算子(三)—二次插值法

1、原理介绍 多项式是逼近函数的一种常用工具。在寻求函数极小点的区间(即寻查区间)上,我们可以利用在若干点处的函数值来构成低次插值多项式,用它作为求极小点的函数的近似表达式,并用这个多项式的极小点作为原函数极小点的近似。低次多项式的极小点比较容易计算。常用的插值多项式为二次或三次,一般说来三次插值公式的收敛性好一些,但在导数不变计算时,三点二次插值也是一种常用的方法[1]。 3

HarmonyOS-MPChart根据y轴刻度绘制渐变色曲线

本文是基于鸿蒙三方库mpchart(OpenHarmony-SIG/ohos-MPChart)的使用,自定义绘制方法,绘制一条颜色渐变的曲线。 mpchart本身的绘制功能是不支持颜色渐变的曲线的,只支持渐变色填充大块颜色。那么当我们的需求曲线根据y轴的刻度发生变化,就需要自定义绘制方法了。 从图中我们可以看到,左边的y轴是一个从底部到顶部颜色渐变的直线,从绿色渐变到红色,而且数据曲线根据

三次插值曲线--插值技术

三次插值曲线 1.1.三次样条曲线 三次样条曲线的基本思想是,在给定的一系列点(称为控制点或数据点)之间,通过一系列三次多项式曲线段来拟合这些点,使得整个曲线既平滑又准确地通过所有控制点。 1.1.1.数学定义 给定一组点 ( P_0, P_1, …, P_n ),其中 ( P_i = (x_i, y_i) ),( x_0 < x_1 < … < x_n )。三次样条曲线由以下性质定义:

PCL 三次样条插值(二维点)

一、简介 在插值计算中,最简单的分段多项式近似应该是分段线性插值,它由连接一组数据点组成,仅仅只需要将这些点一一用直线进行顺序相连即可。不过线性函数插值的缺点也很明显,就是在两个子区间变化的比较突兀,也就是没有可微性(不够光滑)。因此我们需要更为符合物理情况的一种曲线,一般来讲,三次多项式包含四个常数,它可以确保插值函数不仅在区间上连续可微,而且具有连续的二阶导数,这样就可以达到我们想要节点处