MATLAB数学建模 回归与内插

2023-05-16

以下内容为个人笔记,部分图片来源于郭老师课件或课程截图。
笔记汇总:MATLAB基础教程
课程视频:MATLAB基础教程-台大郭彦甫(14课全-高清-含课件)


回归与内插

  • 多项式曲线拟合
    • `polyfit()`
    • 相关系数`corrcoef()`
    • 多元线性拟合`regress()`
    • 曲线拟合工具箱`cftool`
  • 插值
    • 插值 VS 回归
    • 线性插值`interp1()`
    • `interp1()`的多种插值方法 和 外插
    • 二维网格数据的插值`interp2()`
    • 三次方样条插值`spline()`
    • 分段三次多项式插值
  • 练习

多项式曲线拟合

polyfit()

p = polyfit(x,y,n) 返回次数为 n 的多项式 p(x) 的系数,该阶数是 y 中数据的最佳拟合(在最小二乘方式中)。p 中的系数按降幂排列,p 的长度为 n+1。可以将p(1),p(2)代入拟合方程中计算x对应的拟合y值,如下图一阶多项式拟合;也可以直接使用 polyval(p,x) 来计算,如后图高阶多项式拟合。

[p,S] = polyfit(x,y,n) 还返回一个结构体 S,后者可用作 polyval() 的输入来获取误差估计值。

高阶多项式拟合:

如果你的matlab报错了,将图例换为legend('Data points','Fitted curve','Location','southeast')即可。


相关系数corrcoef()

R = corrcoef(A) 返回 A 的相关系数的矩阵,其中 A 的列表示随机变量,行表示观测值。

R = corrcoef(A,B) 返回两个随机变量 A 和 B 之间的系数。
[R,P] = corrcoef(___) 返回相关系数的矩阵和 p 值矩阵,用于测试观测到的现象之间没有关系的假设(原假设)。此语法可与上述语法中的任何参数结合使用。如果 P 的非对角线元素小于显著性水平(默认值为 0.05),则 R 中的相应相关性被视为显著。如果 R 包含复数元素,则此语法无效。

多元线性拟合regress()

b = regress(y,X) 返回向量 b,其中包含向量 y 中的响应对矩阵 X 中的预测变量的多元线性回归的系数估计值。要计算具有常数项(截距)的模型的系数估计值,请在矩阵 X 中包含一个由 1 构成的列;
[b,bint] = regress(y,X) 还返回系数估计值的 95% 置信区间的矩阵 bint;
[b,bint,r] = regress(y,X) 还返回由残差组成的向量 r。

[b,bint,r,rint] = regress(y,X) 还返回矩阵 rint,其中包含可用于诊断离群值的区间
[b,bint,r,rint,stats] = regress(y,X) 还返回向量 stats,用以确定线性回归关系的显著性,其中包含 R2 统计量、F 统计量及其 p 值,以及误差方差的估计值。矩阵 X 必须包含一个由 1 组成的列,以便软件正确计算模型统计量。

注意 b=regress(y,X) 中 参数X的每一列数、返回的系数向量b及拟合曲线方程一一对应。上图中的例子表示拟合曲线为 y=b₁+b₂x₁+b₃x₂ ,而下图中的例子则表示拟合曲线为 y=b₁+b₂x₁+b₃x₂+b₄x₂x₃


曲线拟合工具箱cftool

将需要拟合的数据载入到工作区后,使用 cftool 命令调用工具箱,再选择相应数据和拟合选项进行拟合。

工具条
第一个“main plot”,拟合曲线
第二个“Residuals plot”,残差图
第三个“Contour plot”,轮廓图
第七个“Data cursor”,进行数据提示
第八个“Exclude outliers”,剔除异常值

拟合选项

  • Custom Equations:用户自定义的函数类型;
  • Exponential:指数逼近,有2种类型, a*exp(b*x)a*exp(b*x) + c*exp(d*x)
  • Fourier:傅立叶逼近,有8种类型,基础型是 a0 + a1*cos(x*w) + b1*sin(x*w)
  • Gaussian:高斯逼近,有8种类型,基础型是 a1*exp(-((x-b1)/c1)^2)
  • Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubic spline、shape-preserving;
  • Polynomial:多形式逼近,有9种类型;
  • Power:幂逼近,有2种类型,a*x^ba*x^b + c
  • Rational:有理数逼近,分子、分母各有五种类型;
  • Smoothing Spline:平滑样条;
  • Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是 a1*sin(b1*x + c1)
  • Weibull:威布尔逼近,只有一种类型a*b*x^(b-1)*exp(-a*x^b)

选用 Custom Equations 来自定义函数逼近时,设置好待拟合函数的系数的StartPoint,Lower和Upper三者的值可以使拟合更加准确。

对同一问题的拟合情况,每次可能都不一样,这取决对于系数的StartPoint的选取.解决方法是在拟合过程中,将系数也作为约束拟合的条件。点击[Fit Options]按钮,调整系数的StartPoint,Lower,Upper三个选项来是拟合更加准确,例如,已知a,b,d都大于0,则将a,b,d的Lower选项设为0,c小于0,则将c的Upper选项设为0



插值

插值 VS 回归

  • 插值
    寻找函数近似值的过程;
    拟合会经过所有点
  • 回归(拟合)
    寻找最合适的曲线的过程;
    拟合通常不会通过数据点

线性插值interp1()

vq = interp1(x,v,xq) 使用线性插值返回一维函数在特定查询点的插入值。向量 x 包含样本点,v 包含对应值 v(x)。向量 xq 包含查询点的坐标。
如果有多个在同一点坐标采样的数据集,则可以将 v 以数组的形式进行传递。数组 v 的每一列都包含一组不同的一维样本值。

如果 A 的某些元素是 NaN,isnan(A) 返回大小与 A 相同,相应位置包含逻辑值 1 (true) 而其他位置为逻辑值 0 (false) 的数组,~ 则将逻辑值反置。

interp1()的多种插值方法 和 外插

vq = interp1(x,v,xq,method):method 指定备选插值方法:'linear', 'nearest', 'next', 'previous', 'pchip', 'cubic', 'v5cubic', 'makima''spline'。默认方法为 'linear'

vq = interp1(x,v,xq,method,extrapolation):extrapolation 用于指定外插策略,来计算落在 x 域范围外的点。如果希望使用 method 参数指定的算法进行外插,可将 extrapolation 设置为 ‘extrap’。也可以指定一个标量值,这种情况下,interp1 将为所有落在 x 域范围外的点返回该标量值。


二维网格数据的插值interp2()

Vq = interp2(X,Y,V,Xq,Yq) 使用线性插值返回双变量函数在特定查询点的插入值。结果始终穿过函数的原始采样。X 和 Y 包含样本点的坐标。V 包含各样本点处的对应函数值。Xq 和 Yq 包含查询点的坐标

Vq = interp2(___,method):method 指定备选插值方法:'linear', 'nearest', 'cubic', 'makima''spline'。默认方法为 'linear'

Vq = interp2(___,method,extrapval) 还指定标量值 extrapval,此参数会为处于样本点域范围外的所有查询点赋予该标量值。
如果为样本点域范围外的查询省略 extrapval 参数,则基于 method 参数,interp2 返回下列值之一:对于 ‘spline’ 和 ‘makima’ 方法,返回外插值;对于其他内插方法,返回 NaN 值

三次方样条插值spline()

s = spline(x,y,xq) 返回与 xq 中的查询点对应插值的向量 s。s 的值由 x 和 y 的三次样条插值确定;
pp = spline(x,y) 返回一个分段多项式结构体以用于 ppval 和样条实用工具 unmkpp。

v = ppval(pp,xq) 在 查询点xq 处 计算分段多项式 pp 对应的值
pp = mkpp(breaks,coefs) 根据其间断数和系数生成分段多项式 pp。使用 ppval 计算特定点处的分段多项式,或使用 unmkpp 提取有关分段多项式的详细信息。


分段三次多项式插值

p = pchip(x,y,xq) 返回与 xq 中的查询点对应的插值 p 的向量。p 的值由 x 和 y 的保形分段三次插值确定;
pp = pchip(x,y) 返回一个分段多项式结构体以用于 ppval 和样条实用工具 unmkpp。
相比 spline()pchip() 可以避免过冲,并且可以准确地连接平台区。这种情况下,它不会在样本点之间自由振动:

当基础函数振荡时,spline 能够比 pchip 更好地捕获点之间的移动,后者会在局部极值附近急剧扁平化:

练习

close all;clear all;
y=[0.025 0.035 0.050 0.060 0.080];
x=20:10:60;
fit=polyfit(x,y,1);
xfit=x(1):0.1:x(end);
yfit=polyval(fit,xfit);
plot(x,y,'ro',xfit,yfit,'LineWidth',2);
g=gca;g.FontSize=14;
xlabel('Temperature(℃)');
ylabel('TC output(mV)');
title('Calibration of TC');

在这里插入图片描述

close all; clear all;
x =[-1.2 -0.5 0.3 0.9 1.8 2.6 3.0 3.5];
y =[-15.6 -8.5 2.2 4.5 6.6 8.2 8.9 10.0];
figure('Position', [50 50 1500 400]);
for i=4:6
subplot(1,3,i-3); p = polyfit(x,y,i);
xfit = x(1):0.1:x(end); yfit = polyval(p,xfit);
plot(x,y,'ro',xfit,yfit); set(gca,'FontSize',14);
ylim([-17, 11]); legend('Data points','Fitted curve','Location','southeast');
end

close all; clear all;
load carsmall;
y = MPG;
x1 = Weight; x2 = Horsepower;
X = [ones(length(x1),1) x1 x2 x1.^2 x2.^2 x1.*x2];
b = regress(y,X);
x1fit = min(x1):100:max(x1);
x2fit = min(x2):10:max(x2);
[X1FIT,X2FIT]=meshgrid(x1fit,x2fit);
YFIT=b(1)+b(2)*X1FIT+b(3)*X2FIT+b(4)*X1FIT.^2+b(5)*X2FIT.^2+b(6)*X1FIT.*X2FIT;
scatter3(x1,x2,y,'filled'); hold on;
mesh(X1FIT,X2FIT,YFIT); hold off;
xlabel('Weight');
ylabel('Horsepower');
zlabel('MPG'); view(50,10);

clear all; close all;
x=[0 0.25 0.5 0.75 1 1.25 1.5 1.75 2.0 2.25];
y=[1.2 1.18 1.1 1 0.92 0.8 0.7 0.55 0.35 0];
X=linspace(0,2.25);
Y1=interp1(x,y,X);
Y2=interp1(x,y,X,'spline');
plot(x,y,'o',X,Y1,'g',X,Y2,'-r','LineWidth',0.8);
legend('Data','Linear','Spline');
xlabel('x(ft)');ylabel('y(ft)');
title('Data & Fit Model');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB数学建模 回归与内插 的相关文章

  • 二叉树先中后序遍历(递归非递归)

    先序遍历 先序遍历也叫先根遍历 xff0c 采用先访问根节点 xff0c 再访问左节点 xff0c 最后访问右节点 递归实现 span class token comment Definition for a binary tree nod
  • 数据结构与算法二 ---链表

    前言 这一节是链表 xff0c 这是为了填坑 xff0c 自己说过的话 xff0c 一定要做到 什么是链表 相比上一章的数组 xff0c 链表是一种稍微麻烦亿丢丢的数据结构 如图 xff1a 数组需要一块连续的存储空间 xff0c 对内存要
  • 如何在Linux中的命令行中列出和启动VirtualBox VM?

    VirtualBox is a nice open source virtual machine software It works nicely on Linux and is supported by many Linux distro
  • 数据结构与算法---(最小栈)

    最小栈 题目需求 xff1a 实现一个这样的栈 xff0c 这个栈除了可以进行普通的push pop操作以外 xff0c 还可以进行getMin的操作 xff0c getMin方法被调用后 xff0c 会返回当前栈的最小值 栈里面存放的都是
  • JAVA集合三大类

    JAVA集合三大类 xff1a 1 set set集合无法记住添加的顺序 xff0c 因此set集合中的元素不能重复 2 list xff1a 与数组类似 xff0c list集合可以记住每次添加元素的顺序 xff0c 因此可以根据元素的索
  • 计算机网络词汇解释(二)——交互、 点到点、端到端

    计算机网络词汇解释 xff08 二 xff09 交互 点到点 端到端 本篇文章试图以 xff1a 是什么 xff1f 为什么 xff1f 怎么样 xff1f 三个层次来解释词汇 xff0c 并尽量实现通信的哲学 你传达的复杂信息 xff0c
  • java 字符串 提取 或 去除字母字符串

    提取 linStr span class token operator 61 span linStr span class token punctuation span span class token function replaceAl
  • 数字图像处理---自适应中值滤波实验(MATLAB实现含源码)

    自适应中值滤波实验 xff08 MATLAB实现 xff09 实验目的 1 掌握中值滤波以及自适应中值滤波器的原理以及滤波过程 2 掌握自适应中值滤波的算法设计 3 进一步熟悉MATLAB编程 实验原理 中值滤波的思想就是比较一定领域内的像
  • SpringBoot拦截器执行后,Controller层不执行

    问题描述 xff1a 请求在SpringBoot拦截器中执行后 xff0c 在Controller层不执行 xff0c 前端错误码400 原因分析 xff1a ServletRequest 中通过流获取参数 xff08 getInputSt
  • 一位工作了10年的C++程序员总结出这些忠告

    1 可以考虑先学习C 大多数时候 xff0c 我们学习语言的目的 xff0c 不是为了成为一个语言专家 xff0c 而是希望成为一个解决问题的专家 做一个有用的程序员 xff0c 做一个赚钱的程序员 我们的价值 xff0c 将体现在客户价值
  • 1.6配置通过ftp进行文件操作

    ftp是文件传输的internet标准 xff0c 主要功能是向用户提供本地和远程主机之间的文件传输 版本升级 日志下载 使用c s结构 实验内容 xff1a 模拟企业网络 xff0c pc1访问ftp server 做上传下载操作 出于安
  • 数据库原理及应用复习资料

    单选 xff08 无解析 xff09 xff08 A xff09 是对数据库中全部数据的逻辑结构和特征的描述 A 模式 B 外模式 C 内模式 D 视图 xff08 B xff09 是对数据库用户能够看见和使用的局部数据的逻辑结构和特征的描
  • ae 渲染选项_好的MPlayer选项,以提高视频渲染质量

    ae 渲染选项 MPlayer has lots options for video rendering and filtering Any suggestions on good MPlayer options that improve
  • Nuxt.js 概述 安装 目录结构说明

    什么是SEO SEO xff1a 搜索引擎优化 xff08 Search Engine Optimization xff09 通过各种技术 xff08 手段 xff09 来确保 xff0c 我们的Web内容被搜索引擎最大化收录 xff0c
  • Nuxt.js路由

    路由 路由概述 Nuxt js 依据 pages 目录结构自动生成 vue router 模块的路由配置 要在页面之间切换路由 xff0c 我们建议使用 nuxt link 标签 基础路由 自动生成基础路由规则 情况1 xff1a 访问路径
  • Nuxt.js 视图

    视图 默认模板 定制化默认的 html 模板 xff0c 只需要在应用根目录下创建一个 app html 的文件 默认模板 xff1a span class token doctype span class token punctuatio
  • Nuxt.js整合axios

    整合 axios 默认整合 在构建项目时 xff0c 如果选择axios组件 xff0c nuxt js将自动与axios进行整合 手动整合 步骤1 xff1a package json有axios的版本 34 dependencies 3
  • Vuex 状态树

    根模块数据操作 步骤一 xff1a 创建 store index js 添加一个 counter变量 xff0c 并可以继续累加操作 export const state 61 61 gt counter 0 export const mu
  • Nuxt.js查询学生列表案例

    查询所有的班级 xff1a 后端 父工程pom文件 lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt lt project xmlns 61 34 http maven apach
  • 大数据面试题

    Hive理论知识汇总 1 Hive和数据库比较 Hive 和数据库除了拥有类似的查询语言 xff0c 再无类似之处 1 xff09 数据存储位置 Hive 存储在 HDFS 数据库将数据保存在块设备或者本地文件系统中 2 xff09 数据更

随机推荐

  • MyBatis Plus

    概述 简介 MyBatis Plus xff08 简称 MP xff09 是一个 MyBatis 的增强工具 xff0c 在 MyBatis 的基础上只做增强不做改变 xff0c 为简化开发 提高效率而生 特点 无侵入 xff1a 只做增强
  • MybatisPlus--QueryWrapper

    QueryWrapper wrapper介绍 Wrapper xff1a 条件构造抽象类 xff0c 最顶端父类 AbstractWrapper xff1a 用于查询条件封装 xff0c 生成 sql 的 where 条件 QueryWra
  • 大数据导论题库

    选择题 1 下面哪个程序负责 HDFS数据存储 C A NameNode B Jobtracker C Datanode D secondaryNameNode 2 HDfS 中的 block 默认保存几份 A A 3份 B 2 份 C 1
  • Oracle Linux7.8 下离线 一键静默安装Oracle12c

    目录 安装前的准备最小安装OracleLinux7 8 xff08 centos7 8一样 xff09 安装oracle需要的依赖包 准备Oracle安装包准备一键安装脚本 并执行脚本使用安装前配置 问题及解决方法 xff1a 错误码ORA
  • MybatisPlus-插件机制-乐观锁-逻辑删除-通用service

    插件机制 自动填充 项目中经常会遇到一些数据 xff0c 每次都使用相同的方式填充 xff0c 例如记录的创建时间 xff0c 更新时间等 我们可以使用MyBatis Plus的自动填充功能 xff0c 完成这些字段的赋值工作 原理 实现元
  • 畅购商城项目--(用户模块+用户注册【用户名占用】)

    搭建环境 4 1 1 后端web服务 xff1a changgou4 service web 修改pom xml文档 lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt lt pro
  • Mysql对于列中存储键值对数据的查询

    对于键值对数据的查询 为了方便查看 xff0c 将其称之为A表 A表 xff1a 可以看到A表中的列有 id inquiry id data key data value date key列中的各个字段对应的data value中的各个数据
  • PathVariable注解的用法以及报错

    今天碰见个很奇怪的问题 xff0c 因为之前在学校没怎么用过 64 PathVariable这个注解 xff0c 但是postman测试时并没有请求到 xff0c 具体如下 接口就是一个简单的查询详情 xff0c 而当我请求postman的
  • 关于@PreAuthorize注解的使用场景

    作用 64 PreAuthorize 能够在执行方法之前进行权限的认证 xff0c 支持Spring EL表达式 xff0c 基于方法注解和权限解决方案 xff0c 并且只有当 64 EnableGlobalMethodSecurity p
  • 获取 当前时间的前五天凌晨0点的时间

    公司今天提到的需求是 xff1a 每日凌晨两点 xff0c 调用方法 xff0c 方法的内容是 xff1a 拉取当前时间的前五天的0点的消息聊天记录 在网上查了好久才找到 xff0c 现在奉上代码 xff1a span class toke
  • 查询 按照 指定时间的前一天的数据

    需求 xff1a 查询按照指定时间的前一天的数据 xff0c 举个例子 xff1a 传入2023 2 27 xff0c 需要获取到2023 2 26 的数据 xff0c 如果这一天没有数据 xff0c 那就需要往前找 xff0c 直到找不到
  • 关于limit的使用场景

    什么情况下使用 limit 1呢 xff1f 当我们写sql语句的时候需要进行全表扫描 xff0c 前提我们已经确认返回的结果只有一条数据的时候 xff0c 使用limit 1 xff0c 因为使用limit 1 之后 xff0c 在查询过
  • 【STM32多级界面】-LCD结构体多级图形界面框架

    STM32多级界面搭建 在实际的项目之中 xff0c 需要用单片机在LCD OLED中搭建一个3级的图形界面 本文的工程文件我将上次传到百度网盘 xff0c 链接在最后的部分 STM32多级界面搭建一 方案选择二 实现效果三 程序设计3 1
  • ubuntu20.04系统安装u盘制作方法

    1 下载UltraISO软碟通 xff0c 下载Ubuntu20 04 2 打卡UltraISO xff0c 如下 3 加载Ubuntu20 04系统iso文件 文件 gt 打开 xff0c 如下 4 点击 启动 gt 写入硬盘映像 结果如
  • vue和react相同点_我试图在React,Unity,Godot,Construct,Game Maker和Phaser中制作相同的2D游戏原型。 这是我发现的。...

    vue和react相同点 I 39 m a tabletop game developer In designing a new card game I decided to build a digital prototype to hel
  • java发送Http请求(获取响应cookie、重定向)

    1 正常的发送Http请求 xff0c 获取返回值 xff08 json格式 xff09 span class token comment 引入的相关包 import org apache http HttpEntity import or
  • MATLAB基础教程-台大郭彦甫-学习笔记

    MATLAB基础教程 台大郭彦甫 学习笔记 最近在跟着郭彦甫老师的教程学matlab xff0c 刚开始用OneNote整理了一些笔记 郭彦甫老师的课讲的超级棒 xff0c 个人认为目前各平台上最好的matlab入门视频 但是2015年的课
  • MATLAB入门:基本操作与矩阵运算

    matlab基本操作与矩阵运算 基本操作把matlab当作计算器使用变量变量类型避免使用与函数 脚本同名的变量 格式控制 矩阵运算矩阵的定义向量乘法 矩阵索引使用 96 96 创建向量使用 96 96 索引 矩阵串联矩阵运算一些特殊矩阵一些
  • MATLAB数学建模 统计

    统计 叙述统计学数值统计图形统计 推论统计学练习 叙述统计学 数值统计 主要介绍一些函数 M 61 mean A 返回 A 沿大小不等于 1 的第一个数组维度的元素的均值 如果 A 是向量 xff0c 则 mean A 返回元素均值 xff
  • MATLAB数学建模 回归与内插

    以下内容为个人笔记 xff0c 部分图片来源于郭老师课件或课程截图 笔记汇总 xff1a MATLAB基础教程 课程视频 xff1a MATLAB基础教程 台大郭彦甫 xff08 14课全 高清 含课件 xff09 回归与内插 多项式曲线拟