MATLAB2016笔记(七):数据分析
文章目录
- 一、多项式及其函数
- (一)多项式的表达式和创建
- (二)多项式求根(roots())、由根创建多项式(poly())
- (三)多项式的四则运算
- (四)多项式的导数polyder、积分polyint、计算函数值polyval
- (五)多项式运算函数及操作指令
- (六)有理多项式(部分分式展开,求导)
- 二、数据插值(近似表达式预测插值点)
- (一)概述:插值问题
- (二)一维插值 interp1()
- (三)二维插值
- 三、函数极限
- (一)极限概念
- (二)求极限的函数 limit()
- 四、函数数值积分
- (一)数值积分问题的数学表述
- (二)一元函数的数值积分 quad/quadl/quadv
- (三)多重数值积分 dblquad/triplequad
一、多项式及其函数
(一)多项式的表达式和创建
MATLABMATLABMATLAB中使用一维向量来表示多项式,将多项式的系数按照降幂次序存在在向量中,其具体表示方法如下:
P(x)=a0xn+a1xn−1+...+an−1x+an⇒[a0,a1,...,an−1,an]P(x)=a_0x^{n}+a_1x^{n-1}+...+a_{n-1}x+a_n \Rightarrow [a_0,a_1,...,a_{n-1},a_n]P(x)=a0xn+a1xn−1+...+an−1x+an⇒[a0,a1,...,an−1,an]
例如,多项式2x4+3x3+5x2+12x^4+3x^3+5x^2+12x4+3x3+5x2+1就可以用向量[2,3,5,0,1][2,3,5,0,1][2,3,5,0,1]
对于系数为0的项依然要在向量中出现
function s = pprintf(p)
%pprintf 该函数可将一维向量转变为字符串格式的数学表达式 % p:输入参数,格式为一维向量 % s:输出参数,格式为字符串
if nargin>1 %输入参数过多时的判断error('Too much input arguements');
end
while(p(1)==0) %输入向量的元素全为0p(1)=[];
end
L=length(p); %计算向量长度
s='';
for v=1:Lif p(v)==0 %当常数项为0continue;elseif L==1 %当向量长度为1s=strcat(num2str(p(v)));elseif v==L %当v为向量最后一个值s=strcat(s,'+',num2str(p(v)));elseif v==1 %当v为向量第一个值s=strcat(num2str(p(v)),'x^{',num2str(L-v),'}');elseif p(v)==1 %当向量元素的值为1s=strcat(s,'+','x^{',num2str(L-v),'}');elses=strcat(s,'+',num2str(p(v)),'x^{',num2str(L-v),'}');end
end
end
(二)多项式求根(roots())、由根创建多项式(poly())
1.特定函数roots可以求解一个多项式的根返回结果为解的向量
2.使用函数poly由根构造相应的多项式
(三)多项式的四则运算
1.多项式加法当阶次相同时,多项式相加与数组相加的规则一致;当阶次不同时,要先对低阶多项式补零,再进行相加
function p = ppadd(a,b)
% 实现阶次不同的多项式相加
if nargin<2error('Not enough input arguments')
end
a=a(:).';
b=b(:).';
na=length(a);
nb=length(b);
p=[zeros(1,nb-na),a]+[zeros(1,na-nb),b];
2.多项式乘法MATLAB中,函数conv支持多项式乘法(运算法则为两个数组的卷积)
3.多项式除法MATLAB中,函数deconv支持多项式除法(使用长除法进行解卷积,同时返回商和余数)[c,r]=deconv(b,a) c为商,r为余数,此时满足 b==conv(a,c)+r
(四)多项式的导数polyder、积分polyint、计算函数值polyval
1.多项式的导数MATLAB中,函数polyder可以用于多项式求导
2.多项式的积分MATLAB中,函数polyint可以用于多项式积分,其具体句法格式如下:polyint(P,k) 返回多项式P的积分,积分常数项为k,k默认值为0
3.多项式求函数值MATLAB中,函数polyval可以用于多项式计算函数值
(五)多项式运算函数及操作指令
以上多项式操作函数在MATLAB中不存在已有函数可以实现之前已经介绍了pprintf(向量到字符串变换)、ppadd(多项式加法)再补充一下psim(多项式简化)
function y = psim(x,tol )
% psim删除多项式中近似为零的第一个系数
if nargin<2,tol=norm(x)*1000*eps;end
x=x(:).';%保证输入是行向量
i=find(abs(x)<.99&abs(x)<tol);
x(i)=zeros(1,length(i));
i=find(x~=0);
if isempty(i)y=0;
elsey=x(i(1):length(x));
end
(六)有理多项式(部分分式展开,求导)
在许多应用中,例如傅里叶(Fourier)(Fourier)(Fourier)、拉普拉斯(Laplace)(Laplace)(Laplace)和ZZZ变换中,出现了两个多项式之比
在MATLABMATLABMATLAB中,有理多项式由它们的分子多项式和分母多项式表示
b(x)a(x)=b0xm+b1xm−1+...+bm−1x+bma0xn+a1xn−1+...+an−1x+an\frac{b(x)}{a(x)}=\frac{b_0x^{m}+b_1x^{m-1}+...+b_{m-1}x+b_m}{a_0x^{n}+a_1x^{n-1}+...+a_{n-1}x+a_n}a(x)b(x)=a0xn+a1xn−1+...+an−1x+anb0xm+b1xm−1+...+bm−1x+bm
1.多项式的展开 residue函数[r,p,k]=residue(b,a)函数residue返回两个多项式之比的部分分式展开的留数r、极点p和直接项k[b,a]=residue(r,p,k)逆过程,得到分子多项式和分母多项式
residue讲解
2.有理多项式的求导
二、数据插值(近似表达式预测插值点)
(一)概述:插值问题
插值问题,其数学定义如下:
由实验或测量的方法得到函数y=f(x)y=f(x)y=f(x)在互异点x0,x1,...,xnx_0,x_1,...,x_nx0,x1,...,xn处的数值y0,y1,...,yny_0,y_1,...,y_ny0,y1,...,yn,然后构造一个函数φ(x)\varphi(x)φ(x)作为y=f(x)y=f(x)y=f(x)的近似表达式,即y=f(x)≈φ(x)y=f(x) \approx \varphi(x)y=f(x)≈φ(x),使得φ(x0)=y0,φ(x1)=y1,...,φ(xn)=yn\varphi(x_{0})=y_{0},\varphi(x_{1})=y_{1},...,\varphi(x_{n})=y_{n}φ(x0)=y0,φ(x1)=y1,...,φ(xn)=yn
这类问题叫作插值问题,y=f(x)y=f(x)y=f(x)称为被插函数,φ(x)\varphi(x)φ(x)称为插值函数,x0,x1,...,xnx_0,x_1,...,x_nx0,x1,...,xn称为插值节点
插值的任务就是由已知的观测点为物理量建立一个简单的、连续的解析模型,以便能根据该模型推测该物理量在非观测点的特性
(二)一维插值 interp1()
当被插值函数y=f(x)为一元函数时,为一维插值,MATLAB中使用interp1函数实现一维插值,其调用格式如下:
Vq=interp1(X,V,Xq,METHOD) X为自变量的范围;V为函数值,或者V为长度与X一致的向量;Xq为插值点向量或数组;METHOD为字符串变量,用来设定插值方法MATLAB提供以下几种插值方法:
MATHOD='nearst' 最邻近插值,插值点函数值估计为与该插值点最近的数据点函数值至少提供2个点,速度最快,但平滑性最差MATHOD='linear' 线性插值,根据相邻数据点的线性函数估计落在该区域内插值数据点的函数值默认方法,至少提供2个点,结果连续,但顶点斜率会改变MATHOD='spline' 三次样本插值,在相邻数据点间建立三次多项式函数,根据多项式函数确定插值数据点的函数值至少提供4个点,速度最慢,平滑性最好,但如果输入数据不一致或数据点过近,就可能出现很差的插值结果MATHOD='pchip'或'cubic' 立方插值,通过分段立方Hermite插值方法计算插值结果 至少提供4个点,若
MATHOD='v5cubic' 用MATLAB5版本中断三次样本插值,cubic将在未来的版本中取代v5cubic点必须均匀间隔
选择一种插值方法,需要考虑运算时间、占用内存大小和插值的光滑程度
运算时间与占用内存的比较:
nearest≈next≈previous<liner<pchip(cubic)<splinenearest \approx next \approx previous < liner < pchip(cubic) < splinenearest≈next≈previous<liner<pchip(cubic)<spline
1.分段线性插值 (liner)默认方法
分段线性插值的算法是在每个小区间[xi,xi+1][x_i,x_{i+1}][xi,xi+1]上采用简单的线性插值,在区间[xi,xi+1][x_i,x_{i+1}][xi,xi+1]上的子插值多项式为:
Fi=x−xi+1xi−xi+1f(xi)+x−xixi+1−xif(xi+1)F_i=\frac{x-x_{i+1}}{x_i-x_{i+1}}f(x_i)+\frac{x-x_{i}}{x_{i+1}-x_{i}}f(x_{i+1})Fi=xi−xi+1x−xi+1f(xi)+xi+1−xix−xif(xi+1)
在此整个区间[xi,xn][x_i,x_n][xi,xn]上的插值函数为:F(x)=∑i=1nFili(x)F(x)=\sum_{i=1}^{n}F_{i}l_{i}(x)F(x)=∑i=1nFili(x)
其中li(x)l_i(x)li(x)的定义如下:
li(x)={x−xi−1xi−xi−1x∈[xi−1,xi]x−xi+1xi−xi+1x∈[xi,xi+1]0x∉[xi−1,xi+1]l_i(x)=\begin{cases} \frac{x-x_{i-1}}{x_{i}-x_{i-1}} & x\in [x_{i-1},x_{i}] \\ \frac{x-x_{i+1}}{x_{i}-x_{i+1}} & x\in [x_{i},x_{i+1}] \\ 0 & x\notin [x_{i-1},x_{i+1}] \\ \end{cases} li(x)=⎩⎨⎧xi−xi−1x−xi−1xi−xi+1x−xi+10x∈[xi−1,xi]x∈[xi,xi+1]x∈/[xi−1,xi+1]
默认采用分段线性插值
2.一维快速傅里叶插值(interpft)
一维快速傅里叶插值通过函数interpft()interpft()interpft()来实现,该函数用傅里叶变换把输入数据变换到频域,然后用更多点的傅里叶逆变换变回时域,其结果是对数据进行增采样
interpft()调用格式如下:
y=interpft(x,n) 对x进行傅里叶变换,然后使用n点傅里叶逆变换变回到时域如果x是一个长度为m、采样间隔为dx的向量,则数据y的采样间隔就是mdx/n,要注意n不能小于m如果x是矩阵,对x的列进行插值操作,返回一个矩阵y,y与x列数相同,但y有n行
y=interpft(x,n,dim) 在dim指定的维度上进行操作
(三)二维插值
当被插值函数y=f(x)为二元函数时,为二维插值,MATLAB中使用interp1函数实现一维插值,其调用格式如下:
Vq=interp2(X,Y,V,Xq,Yq,METHOD) XYV是相同大小的矩阵,V(i,j)是数据点[X(i,j),Y(i,j)]上的函数值;Xq、Yq是待插值数据网格,Method为插值方法
插值方法与一维插值特点类似,具体实现上有变化
三、函数极限
(一)极限概念
设{xn}\{x_n\}{xn}为数列,aaa为常数。若对任给的正数ε\varepsilonε,总存在正整数NNN,使得当n>Nn>Nn>N时有∣xn−a∣<ε|x_n-a|<\varepsilon∣xn−a∣<ε,则称数列{xn}\{x_n\}{xn}收敛于aaa,常数aaa称为数列{xn}\{x_n\}{xn}的极限,并记作:
limn→+∞xn=a\lim\limits_{n \rightarrow +\infty} x_n=an→+∞limxn=a
(二)求极限的函数 limit()
在MATLAB中采用limit函数求某个具体函数的极限,其常用的调用格式如下:
syms在matlab中的作用是:定义符号变量。
四、函数数值积分
定积分的计算可用牛顿-莱布尼茨公式:
∫abf(x)dx=F(b)−F(a)\int_a^bf(x)dx=F(b)-F(a)∫abf(x)dx=F(b)−F(a)
其中F(x)F(x)F(x)是f(x)f(x)f(x)的原函数之一,可用不定积分求出
但在实际应用上述公式时,却有一系列问题
数值积分便是为了解决上述问题而提出来的,数值积分只需计算f(x)f(x)f(x)在节点xi(i=1,2,..,n)x_i(i=1,2,..,n)xi(i=1,2,..,n)上的值,计算方便且适合在计算机上实现
(一)数值积分问题的数学表述
区间[a,b][a,b][a,b]上的定积分∫abf(x)dx\int_a^bf(x)dx∫abf(x)dx,就是在区间[a,b][a,b][a,b]内取n+1n+1n+1个点x0,x1,...,xnx_0,x_1,...,x_nx0,x1,...,xn利用被积函数f(x)f(x)f(x)在这n+1n+1n+1个点的函数值的某一种线性组合来近似作为待求定积分的值,即
∫abf(x)dx≈∑k=0nAkf(xk)\int_a^bf(x)dx \approx \sum_{k=0}^nA_kf(x_k)∫abf(x)dx≈k=0∑nAkf(xk)
其中,xkx_kxk称为积分节点,AkA_kAk称为求积系数,右端公式称为左端定积分的某个数值积分公式
因此,求积分的关键在于积分节点xkx_kxk的选取及积分系数AkA_kAk的确定
MATLAB支持三重以下的积分运算
(二)一元函数的数值积分 quad/quadl/quadv
1.quad函数quad采用遍历的自适应辛普森(Simpson)法计算函数的数值积分,适用于精度要求低、被积函数平滑性较差的数值积分,常用调用格式如下:q = quad(fun,a,b) fun为函数句柄,fun应接收向量输入并返回相同长度的向量;a与b为积分起始值与结束值q = quad(fun,a,b,tol) tol默认为1e-6,tol增大可以加快计算速度,但有损计算精度q = quad(fun,a,b,tol,trace) trace非零时,展示计算过程中的[fcnt,a,b-a,q],fcnt表示函数计算次数[q,fcnt] = quad(...)
2.quadl函数
quadl采用遍历的自适应Lobatto法计算函数的数值积分,适用于精度要求高、被积函数曲线比较平滑的数值积分,常用调用格式与quad一致
通常quad函数具有较快的计算速度,但准确性较差;而quadl函数较慢却准确度较高
3.quadv函数
quadv函数是quad函数的矢量扩展,因此也称为矢量积分,可以一次计算多个一元函数的数值积分值
其用法与quad函数一致,不过矢量积分的返回结果是一个向量
上图就是同时计算了10个函数的数值积分值
(三)多重数值积分 dblquad/triplequad
1.二重数值积分计算函数 dblquad
dblquaddblquaddblquad函数可以计算在矩形区域 x∈[xmin,xmax],y∈[ymin,ymax]x\in[x_{min},x_{max}],y\in[y_{min},y_{max}]x∈[xmin,xmax],y∈[ymin,ymax]内的数值积分值
调用格式如下:
q = dblquad(fun,xmin,xmax,ymin,ymax)
q = dblquad(fun,xmin,xmax,ymin,ymax,tol) tol默认为1e-6
q = dblquad(fun,xmin,xmax,ymin,ymax,tol,method) method表示指定计算一维积分时用的方法,默认为quad,@quadl表示采用quadl也可为用户自己编写的函数的函数句柄,但要保证调用序列与quad一致
2.三重数值积分计算函数 triplequad
triplequadtriplequadtriplequad函数可以计算在空间区域 x∈[xmin,xmax],y∈[ymin,ymax],z∈[zmin,zmax]x\in[x_{min},x_{max}],y\in[y_{min},y_{max}],z\in[z_{min},z_{max}]x∈[xmin,xmax],y∈[ymin,ymax],z∈[zmin,zmax]内的数值积分值
调用格式如下:
q = triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax)
q = triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol)
q = triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol,method)
参数含义与dblquad一致
MATLAB2016笔记(七):数据分析相关推荐
- Python数据挖掘笔记 七 .PCA降维操作及subplot子图绘制
Python数据挖掘笔记 七 .PCA降维操作及subplot子图绘制 这篇文章主要介绍四个知识点,也是我那节课讲课的内容.1.PCA降维操作:2.Python中Sklearn的PCA扩展包:3.Ma ...
- Typescript 学习笔记七:泛型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- 吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码
吴恩达<机器学习>学习笔记七--逻辑回归(二分类)代码 一.无正则项的逻辑回归 1.问题描述 2.导入模块 3.准备数据 4.假设函数 5.代价函数 6.梯度下降 7.拟合参数 8.用训练 ...
- websocket 获取连接id_Swoole学习笔记七:搭建WebSocket长连接 之 使用 USER_ID 作为身份凭证...
Swoole学习笔记七:搭建WebSocket长连接 之 使用 USER_ID 作为身份凭证 2年前 阅读 3678 评论 0 喜欢 0 ### 0.前言 前面基本的WebSocket操作,我们基本都 ...
- andrew ng 机器学习笔记_所有笔记目录 | 数据分析 | 机器学习 | 深度学习等
持续更新中... 机器学习模型Python复现: 舟晓南:感知机模型python复现 - 随机梯度下降法:梯度下降法:adagrad:对偶形式 舟晓南:k近邻(KNN)模型python复现 - 线性扫 ...
- ROS学习笔记七:使用rqt_console和roslaunch
ROS学习笔记七:使用rqt_console和roslaunch 本节主要介绍在调试时使用的rqt_console和rqt_logger_level,以及一次性打开多个节点的工具roslaunch. ...
- 《MFC游戏开发》笔记七 游戏特效的实现(一):背景滚动
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9344721 作者:七十一雾央 新浪微博:http:// ...
- FPGA学习笔记(七): DSB调制解调的仿真
笔记七是DSB调制解调的仿真实现. DSB调制解调的实现原理:首先使用DDS产生低频正弦波信号作为调制信号,再用DDS产生高频信号作为载波信号,然后使用乘法器将两者相乘产生DSB信号,DSB信号与载波 ...
- 【K210】K210学习笔记七——使用K210拍摄照片并在MaixHub上进行训练
[K210]K210学习笔记七--使用K210拍摄照片并在MaixHub上进行训练 前言 K210准备工作 K210如何拍摄照片 准备工作 拍摄相关代码定义 用K210拍摄到的照片在MaixHub平台 ...
- 二维码学习笔记(二) | 数据分析与数据编码
唠唠闲话 二维码笔记系列(原文地址): 『二维码学习笔记(一) | 二维码概述』 『二维码学习笔记(二) | 数据分析与数据编码』 『二维码学习笔记(三) | 纠错编码』 『二维码学习笔记(四) | ...
最新文章
- 第一段冲刺_个人总结_5.2
- 让机器搞懂100万种隐含语义 腾讯Peacock模型全揭秘
- Web三大组件的注册——Servlet、Filter、Listener(监听三大作用域: ServletContext、HttpSession、ServletRequest )
- 一秒等于多少毫秒_使用kibana对电影一秒钟影评数据测试,详述配图演示如何使用收藏了...
- 马云致投资者公开信:大数据云计算是阿里未来十年核心战略之一
- 挖掘城市ip_德国卡尔斯草莓农庄:旅游IP打造要创意更要形象!
- 网络基础: 浅析应用层一
- ssm把后端数据传到前端_前端传数据到后台分别JSON和STRING接收 AJAX SPRINGBOOT ssm
- linux驱动编写(pwm驱动)
- Nexus 安装与配置
- 【SPS2010】现在的这个版本不值得测试。
- 花生壳诊断“域名指向IP与服务器不一致”的解决方法
- flashfxp使用图文教程,flashfxp使用图文教程简单介绍
- 钛资本研究院:保险科技行业现状及趋势分析
- 序列到序列模型(一)(基本模型,RNN Search,注意力机制)
- 【DS1302驱动】
- 他用手指玩滑板,居然玩成了国内第一人?
- 嵌入式开发五:未来之星机器人语音控制及视频开发(颜色追踪)(运动追踪)
- 在Visio中实现任意两点之间的连线
- 求解一元三次方程的一个实数解