当前位置: 首页 > news >正文

曲线拟合 | 二次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,次数。

在这里插入图片描述

http://www.lryc.cn/news/372078.html

相关文章:

  • delphi FDMemTable1.SourceView遍历各行数据,取任意行数据无需Next移动指针了。TFDDatSView
  • 为什么选择 ABBYY FineReader PDF ?
  • php遇到的问题
  • 零基础入门学用Arduino 第二部分(二)
  • 旅游行业电商平台:数字化转型的引擎与未来发展趋势
  • Ubuntu 22.04安装 docker
  • 【Gitlab】访问默认PostgreSQL数据库
  • 乐鑫ESP32-C3芯片应用,启明云端WT32C3-S5模组:简化产品硬件设计
  • 算法刷题【二分法】
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • 基于WPF技术的换热站智能监控系统09--封装水泵对象
  • GLM+vLLM 部署调用
  • leetcode 122 买卖股票的最佳时机||(动态规划解法)
  • C++设计模式---组合模式
  • 工厂方法模式(大话设计模式)C/C++版本
  • [NCTF 2018]flask真香
  • 性能测试3【搬代码】
  • <tesseract><opencv><Python>基于python和opencv,使用ocr识别图片中的文本并进行替换
  • 海南云亿商务咨询有限公司解锁抖音电商新纪元
  • arm64架构 统信UOS搭建PXE无盘启动Linux系统(麒麟桌面为例)
  • SpringBoot 实现 阿里云语音通知(SingleCallByTts)
  • IDEA 连接GitHub仓库并上传项目(同时解决SSH问题)
  • vue/react/js 常用的原生获取当前页面的url网址的相关方法
  • java-final 关键字
  • ARM32开发--IIC软实现
  • 在有向无环图(DAG)中实现拓扑排序与最短路径和最长路径算法
  • SQLServer按照年龄段进行分组查询数据
  • 开放式耳机哪个品牌质量比较好?2024高性价比机型推荐!
  • Blender骨骼创建
  • DevExpress WPF中文教程:Grid - 如何完成列和编辑器配置(设计时)?