清风数学建模——拟合算法
拟合算法
文章目录
- 拟合算法
- 概念
- 确定拟合曲线
- 最小二乘法的几何解释
- 求解最小二乘法
- matlab求解最小二乘法
- 如何评价拟合的好坏
- 计算拟合优度的代码
概念
在前面的篇幅中提到可以使用插值算法,通过给定的样本点推算出一定的曲线从而推算出一些想要的值。但存在一些问题。一是若样本点过多,那么多项式的次数过高会造成龙格现象;二是为了避免龙格现象而通过分段的思想求得拟合曲线,但这样会导致曲线函数非常复杂。
针对以上问题,在拟合问题中,不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),而该函数尽可能设置得较为简单,使得该曲线在某种准则下与所有的数据点最为接近,即只要保证误差足够小即可,(最小化损失函数),这就是拟合是思想。
确定拟合曲线
给定一组数据[x,y],找出y和x之间的拟合曲线
在matlab上通过画图得出这组数据对应的图像
plot(x,y,'o');
拟合一个曲线去接近样本点,这里我用一个简单的拟合曲线y=kx+b。现在的问题是,k和b取何值时,样本点和拟合曲线最接近。
最小二乘法的几何解释
- 第一种定义有绝对值,后续不容易求导,因此计算较复杂。所以我们往往使用第二种定义,这正是最小二乘法的思想
- 我们也不使用三次方,因为三次方计算样本点到拟合曲线的距离会出现负数,那么该距离就会正负抵消
- 我们也不使用四次方,使用4次方时,若出现某个异常值离曲线较远,那么该拟合曲线受到的影响较大
求解最小二乘法
最终落脚到的两个公式:k</sup>和b<sup>推导公式
- 该公式通过对k和b一介求导,然后分离系数所得
matlab求解最小二乘法
根据公式不难得出代码
plot(x,y,'o');
xlabel("x");
ylabel("y");
n=size(x,1);%% 数据的个数
k=(n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.*x)-sum(x)*sum(x));
b=(sum(x.*x)*sum(y)-sum(x)*sum(x.*y))/(n*sum(x.*x)-sum(x)*sum(x));
hold on;%% 写上这句后续可以继续在之前的图形上画图形
grid on;%% 图形显示网格线
f=@(x) k*x+b; %% f=kx+b是匿名函数,该函数图形不需要另外传参数也能形成图形
fplot(f,[2.5,7]);
legend('样本数据','拟合函数','location','southeast');
- f函数是匿名函数,该函数图形不需要另外传参数也能形成图形。在matlab中画出图形需要传参。比如正常情况下f函数需要传参x否则不能画出图形,而匿名函数系统会根据需求自己给出一定范围的参数以得画出图形
匿名函数的基本用法
handle = @(arglist) anonymous_function
-
其中handle为调用匿名函数时使用的名字。
-
arglist为匿名函数的输入参数,可以是一个,也可以是多个,用逗号分隔。
-
anonymous_function为匿名函数的表达式。
-
注意输入参数和表达式之间要用空格
- fplot可用于画出匿名一元函数的图形
基本用法
fplot(f,xinterval)
- 将匿名函数f在指定区间xinterval绘图。xinterval = [xmin xmax] 表示定义域的范围
如何评价拟合的好坏
- 根据SST、SSE、SSR可以证明:
- SST=SSE+SSR
- 拟合优度:0<=1-SSE/SST<=1;而SSE误差平方和越小,拟合优度R2越接近1。误差越小说明拟合的越好
- 注意:拟合优度R2只能用于拟合函数是线性函数,若拟合函数是其他函数,直接看误差平方和即可,SSE越小,说明拟合度越好
- 线性函数是指在函数中,参数仅以一次方出现,且不能乘以或除以其他任何的参数,并不能出现参数的复合函数形式。该参数不是指自变量x。比如y=kx+b,该参数指的是区别于自变量x和因变量y以外的参数k和b。
计算拟合优度的代码
plot(x,y,'o');
xlabel("x");
ylabel("y");
n=size(x,1);%% 数据的个数
k=(n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.*x)-sum(x)*sum(x));
b=(sum(x.*x)*sum(y)-sum(x)*sum(x.*y))/(n*sum(x.*x)-sum(x)*sum(x));
hold on;%% 写上这句后续可以继续在之前的图形上画图形
grid on;%% 图形显示网格线
f=@(x) k*x+b; %% f=kx+b是匿名函数,该函数图形不需要另外传参数也能形成图形
fplot(f,[2.5,7]);
legend('样本数据','拟合函数','location','southeast');
y_hat=k*x+b;
SSR=sum((y_hat-mean(y)).^2); % 回归平方和
SSE=sum((y-y_hat).^2); % 误差平方和
SST=sum((y-mean(y)).^2); % 总体平方和
disp(SST-SSE-SSR);
R_2=SSR/SST; % 拟合优度
disp(R_2);
-
SST-SSE-SSR的结果不为0的原因是在matlab中浮点数做运算一定程度上结果不精准,但结果是5.6843^-14结果是非常小的即非常接近0
[外链图片转存中…(img-WkmLP3WM-1692188156893)] -
SST-SSE-SSR的结果不为0的原因是在matlab中浮点数做运算一定程度上结果不精准,但结果是5.6843^-14结果是非常小的即非常接近0
-
拟合度为0.9635非常接近1了,说明该拟合函数的拟合度较好
相关文章:

清风数学建模——拟合算法
拟合算法 文章目录 拟合算法概念 确定拟合曲线最小二乘法的几何解释求解最小二乘法matlab求解最小二乘法如何评价拟合的好坏计算拟合优度的代码 概念 在前面的篇幅中提到可以使用插值算法,通过给定的样本点推算出一定的曲线从而推算出一些想要的值。但存在一些问题…...

单片机 (一) 让LED灯 亮
一:硬件电路图 二:软件代码 #include "reg52.h"#define LED_PORT P2void main() {LED_PORT 0x01; // 0000 0001 D1 是灭的 } #include "reg52.h" 这个头文件的作用:包含52 系列单片机内部所有的功能寄存器 三&#…...
c++——单例模式
c单例模式 1、概念: 单例模式确保一个类只有一个实例,并提供一个全局访问点以获取该实例。这通常通过让类的构造函数为私有,以防止外部直接实例化,然后提供一个静态方法来获取实例。 2、实现方法: 实现单例模式的主…...
C# 流Stream详解(2)——FileStream、BinaryReader、MemorySream、SreamReader等之间的关系
【文件流】 电脑上的文件有很多,文本文件、音频文件、视频文件、图片文件等,这些文件会被持久化存储在磁盘上,其本质都是一堆二进制数据。 FileStream用于读取二进制文件。电脑上的所有文件,不管是文本、音频、视频还是其他任意…...

【JavaSE】详解final关键字
在Java中,final可以用来修饰类、方法和变量。final修饰类,表示该类无法被继承,并且此类的设计已被认为很完美而不需要进行修改或扩展。final修饰类中的方法,表示不可以被重写;也就是把该方法锁定了,以防止继…...

问道管理:机器人概念走势活跃,新时达涨停,拓斯达、丰立智能等大涨
机器人概念17日盘中走势活跃,到发稿,拓斯达大涨18%,昊志机电涨近16%,丰立智能涨超13%,步科股份、优德精细涨超10%,新时达涨停,天玑科技、兆龙互联、中大力德涨逾9%。 消息面上,8月16…...

elementui 修改日期选择器el-date-picker样式
1. 案例: 2. css /* 最外层颜色 */ .el-popper.is-pure {background: url("/assets/imgList/memuBG.png") no-repeat;border: none;background-size:100% 100%}/* 日期 1.背景透明 */ .el-date-picker{background: transparent; }/* 日期 2.标题、左右图…...

自己实现 SpringMVC 底层机制 系列之-实现任务阶段 6-完成控制器方法获取参数-@RequestParam
😀前言 自己实现 SpringMVC 底层机制 系列之-实现任务阶段 6-完成控制器方法获取参数-RequestParam 🏠个人主页:尘觉主页 🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,…...
数据可视化:图表绘制详解
数据可视化是一种将抽象的数字和数据转化为直观图形的技术,使数据的模式、趋势和关系一目了然。本文将详细介绍如何绘制各种类型的图表,包括柱状图、折线图、饼图、散点图和热力图等。 第一部分:图表类型和选择 1. 柱状图 柱状图是用于比较类…...

【中危】Apache Ivy<2.5.2 存在XXE漏洞 (CVE-2022-46751)
漏洞描述 Apache Ivy 是一个管理基于 ANT 项目依赖关系的开源工具,文档类型定义(DTD)是一种文档类型定义语言,它用于定义XML文档中所包含的元素以及元素之间的关系。 Apache Ivy 2.5.2之前版本中,当解析自身配置、Ivy 文件或 Apache Maven 的 POM 文件…...

C#使用自定义的比较器对版本号(编码)字符串进行排序
给定一些数据,如下所示: “1.10.1.1.1.2”, “1.1”, “2.2”, “1.1.1.1”, “1.1.3.1”, “1.1.1”, “2.10.1.1.1”, “1.1.2.1”, “1.2.1.1”, “2.5.1.1”, “1.10.1.1”, “1.10.2.1”, “1.11.3.1”, “1.11.12.1”, “1.11.11.1”, “1.11.3.1”, “1”, “…...

AI在日常生活中的应用:从语音助手到自动驾驶
文章目录 AI的定义和发展AI在日常生活中的应用1. **智能语音助手**2. **智能家居**3. **智能医疗**4. **自动驾驶** 代码示例:使用Python实现基于机器学习的图片分类AI的未来前景结论 🎉欢迎来到AIGC人工智能专栏~探索AI在日常生活中的应用 ☆* o(≧▽≦…...

Windows10查看图片的分辨率
文章目录 查看方法 查看方法 鼠标悬停在想查看分辨率大小的图片上,稍等那么零点几秒,就会弹出图片的分辨率信息,如图所示:...

Spring事务和事务传播机制(2)
前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 在Spring框架中,事务管理是一种用于维护数据库操作的一致性和…...

计算机视觉 -- 图像分割
文章目录 1. 图像分割2. FCN2.1 语义分割– FCN (Fully Convolutional Networks)2.2 FCN--deconv2.3 Unpool2.4 拓展–DeconvNet 3. 实例分割3.1 实例分割--Mask R-CNN3.2 Mask R-CNN3.3 Faster R-CNN与 Mask R-CNN3.4 Mask R-CNN:Resnet1013…...

ubuntu18.04复现yolo v8之CUDA与pytorch版本问题以及多CUDA版本安装及切换
最近在复现yolo v8的程序,特记录一下过程 环境:ubuntu18.04ros melodic 小知识:GPU并行计算能力高于CPU—B站UP主说的 Ubuntu可以安装多个版本的CUDA。如果某个程序的Pyorch需要不同版本的CUDA,不必删除之前的CUDA,…...

Redis三种模式——主从复制,哨兵模式,集群
目录 一、主从复制 1.1主从复制的概念 1.2Redis主从复制作用 1.2.1数据冗余 1.2.2故障恢复 1.2.3负载均衡 1.2.4高可用基石 1.3Redis主从复制流程 1.4部署Redis 主从复制 1.4.1.环境部署 1.4.2.所有服务器都先关闭防火墙 1.4.3.所有服务器都安装Redis 1.4.4修改Master主节点R…...
mysql8.0.31新增只读远程普通用户
在 MySQL 8.0.31 中,可以通过以下步骤新增只读远程普通用户: 1、使用 root 用户登录 MySQL 数据库。 mysql -u root -p 2、创建用户: CREATE USER username% IDENTIFIED WITH mysql_native_password BY password ; 其中,username…...

揭开路由协议隐藏的风险
路由协议在互联网和基于其的服务的运行中发挥着至关重要的作用。然而,许多这些协议的开发都没有考虑到安全问题。 例如,边界网关协议 (BGP) 最初并未考虑对等点之间发生攻击的可能性。过去几十年来,BGP 中的起源和路径验证已投入了大量工作。…...

图片因固定宽高被拉伸了?object-fit:一个神奇的属性
一、问题产生的场景 近期在完成项目开发时,测试人员针对漫画长图上传后的展示提出了一个界面优化的点,因为其特点是长,但是我们展示图片的区域是固定的,如果我们按照正常思路将图片的宽高写死,确实占位大小的问题解决了…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...