目录
[2.2. 变量及其操作](#2.2. 变量及其操作)
[2.2.1 变量命名](#2.2.1 变量命名)
[2.2.2 变量赋值](#2.2.2 变量赋值)
[2.2.3 预定义变量](#2.2.3 预定义变量)
[2.3.2 数组的大小的获取](#2.3.2 数组的大小的获取)
[2.3.3 引用矩阵元素](#2.3.3 引用矩阵元素)
[2.3.3.1 find函数](#2.3.3.1 find函数)
[2.3.3.2 利用冒号表达式引用多个数组元素](#2.3.3.2 利用冒号表达式引用多个数组元素)
[2.3.3.3 删除矩阵行或列,采用将其置为空矩阵将某些行或列从矩阵中删除。 编辑](#2.3.3.3 删除矩阵行或列,采用将其置为空矩阵将某些行或列从矩阵中删除。 编辑)
[2.3.3.4 改变矩阵形状](#2.3.3.4 改变矩阵形状)
[2.3.4 算术运算](#2.3.4 算术运算)
[2.3.5 关系运算](#2.3.5 关系运算)
[2.3.6 逻辑运算](#2.3.6 逻辑运算)
[3.1 顺序结构](#3.1 顺序结构)
[3.2 选择结构](#3.2 选择结构)
[3.2.2 switch语句](#3.2.2 switch语句)
[3.3 循环结构](#3.3 循环结构)
[3.3.3 break语句和continue语句](#3.3.3 break语句和continue语句)
[3.4 函数](#3.4 函数)
[3.4.1 函数文件](#3.4.1 函数文件)
[3.4.2 匿名函数](#3.4.2 匿名函数)
[4.1 二维曲线的绘制](#4.1 二维曲线的绘制)
[4.2 设置曲线样式](#4.2 设置曲线样式)
[4.3 图形标注与坐标控制](#4.3 图形标注与坐标控制)
[4.4 三维曲线绘制](#4.4 三维曲线绘制)
[4.5 三维曲面绘制](#4.5 三维曲面绘制)
[5.1 零矩阵/幺矩阵](#5.1 零矩阵/幺矩阵)
[5.2 随机矩阵](#5.2 随机矩阵)
[5.3 矩阵结构变换](#5.3 矩阵结构变换)
一、MATLAB介绍
**MATLAB(Matrix Laboratory,矩阵实验室)是由美国MathWorks公司出品的商业数学软件,主要用于算法开发、数据可视化、数据分析以及数值计算**。MATLAB集成了数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等功能,适用于科学研究、工程设计以及需要有效数值计算的众多科学领域。
二、MATLAB基本指令介绍
2.1.数值数据及操作
MATLAB提供4种转换函数,用于采取指定方式将浮点型数据转换为整型。
- round函数:四舍五入为最近的整数。
- fix函数:朝零方向取整。
- floor函数:朝负无穷大方向取整。
- ceil函数:朝正无穷大方向取整。
示例代码及运行结果:
2.2. 变量及其操作
2.2.1 变量命名
在MATLAB中,变量名是以字母开头,后跟字母、数字或下划线的字符序列,最多63个字符。如:x、x_1、xy12
变量名区分字母的大小写。例如addr、Addr和ADDR表示3个不同的变量。
不能使用MATLAB的关键字作为变量名。如:if,end
2.2.2 变量赋值
MATLAB中赋值语句有两种格式:
- 变量=表达式
- 表达式
如果在命令的最后加分号,MATLAB仅仅执行赋值操作,不显示运算的结果。在MATLAB命令后面可以加上注释,用于解释或说明命令的含义,对命令处理结果不产生任何影响。注释以%开头,后面是注释的内容。
2.2.3 预定义变量
|-------|-------------|-----------------------------------------------------|
| 预定义变量 | 含义 | 示例 |
| ans | 存储计算结果的默认变量 | |
| pi | 圆周率兀的近似值 | |
| Inf | 无穷大 | 1/0,1.e1000,2^2000,exp(1000)的结果为Inf,log(0)的结果为-Inf |
| NaN | 非数值 | 0/0,Inf/Inf,Inf-Inf,0*Inf的结果为NaN |
[表1 常用预定义变量]
2.3.数组及其操作
2.3.1构造矩阵
MATLAB中建立矩阵的最简单的方法是使用矩阵构造运算符[],如:
2.3.1.1构造行向量
方法一: 使用冒号表达式 a:b:c
其中,a为初始值,b为步长,c为终止值。冒号表达式可产生一个由a开始到c结束,以步长b自增的行向量。如:
方法二:用linspace函数构建线性等间距的行向量
函数的调用格式为:linspace(a, b, n)
其中,参数a和b是生成向量的第1个和最后1个元素,选项n指定向量元素个数。当n省略时,默认生成100个元素。
2.3.2 数组的大小的获取
(1)size函数
size函数用于获取数组指定维度的长度,函数的调用格式为:size(A, dim)
其中,A是数组,dim指定维度(1,2),当dim省略时,则返回一个向量,向量各个元素的值对应每一个维度的长度。
(2)length函数和numel函数
length函数用于获取最大数组维度的长度,即length(A) = max(size(A));numel函数用于获取数组元素的个数。
2.3.3 引用矩阵元素
3.3.1 引用单个矩阵元素 :矩阵名(row, col)
在MATLAB中,也可以采用矩阵元素的索引来引用矩阵元素,其中矩阵的索引顺序为从第一列的元素开始计数,当到达该列的末尾元素后,从下一列的第一个元素继续,直到走完该矩阵。
2.3.3.1 find函数
查找矩阵中满足条件的元素用法: A=[0,2,0;4,5,6];
- find(A)返回A中所有非零元素的索引
- find(A,n)返回A中n个非零元素的索引
- [r,c]= find(A)返回A中所有非零元素所在行和列
- find(A>2)返回A中所有大于2的元素的索引
2.3.3.2 利用冒号表达式引用多个数组元素
利用向量和end运算符等来表示矩阵下标,获得子矩阵。
2.3.3.3 删除矩阵行或列,采用将其置为空矩阵将某些行或列从矩阵中删除。
2.3.3.4 改变矩阵形状
(1)reshape函数
reshape(A,m,n)函数在矩阵元素个数保持不变的前提下,将矩阵A重新排成m × n的二维矩阵。
(2)矩阵堆叠
A(:)将矩阵A的各列元素堆叠起来,成为一个列向量。
2.3.4 算术运算
(1)MATLAB常用数学函数
表中三角函数都有两个,函数末尾字母为d的函数的参数是角度,另一个函数的参数是弧度,例如sin(x)中的x为弧度,而sind(x)中的x为角度
(2)abs函数可以求实数的绝对值、复数的模、字符串的ASCII码值。
2.3.5 关系运算
MATLAB提供了6种关系运算符:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、= =(等于)、~=(不等于)。
(1)当参与比较的量是两个标量时,若关系成立,关系表达式结果为1,否则为0。
(2)当参与比较的量是两个维度相同的矩阵时,逐个比较对两矩阵相同位置的元素,并给出元素的比较结果。
(3)当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素逐个比较,并给出元素的比较结果。
2.3.6 逻辑运算
MATLAB提供了&(与)、|(或)和~(非)逻辑运算符和异或运算函数xor(a, b),用于处理矩阵的逻辑运算。设参与逻辑运算的是两个标量a和b。
- a & b:逻辑与运算,当a、b全为非零时,运算结果为1,否则为0。
- a | b:逻辑或运算,当a、b中只要有一个非零,运算结果为1。
- ~a:逻辑非运算,当a是零时,运算结果为1;当a非零时,运算结果为0。
- 函数xor(a, b):逻辑异或运算,当a、b的值不同时,运算结果为1,否则运算结果为0。
三、程序控制结构
3.1 顺序结构
顺序结构是MATLAB程序中最基本的结构,表示程序中的各操作是按照它们出现的先后顺序执行的。顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算、输出三部曲的程序就是顺序结构。
1.input函数:用于打开一个输入框来获取数据,该函数的调用格式为:
A=input(提示信息) 其中,提示信息为一个字符串,用于提示用户输入什么样的数据。
若要输入一个字符串,输入的字符串前后加单撇号或双引号,界定字符串的起始和结束。
2.disp函数:用于在命令窗口显示变量和表达式的值,其调用格式为
disp(输出项) 其中,输出项既可以为字符串,也可以为矩阵。
3.2 选择结构
3.2.1.if语句
if 条件1
语句块1
elseif 条件2
语句块2
...
elseif 条件n
语句块n
else
语句块n+1
end
3.2.2 switch语句
switch 测试表达式
case 结果表1
语句块1
case 结果表2
语句块2
......
case 结果表n
语句块n
otherwise
语句块n+1
end
switch子句后面的表达式应为一个标量或一个字符串,case子句后面的结果不仅可以为一个标量或一个字符串,而且还可以为一个将多个结果用大括号括起来的单元数据(Cell)。如果case子句后面的结果为一个单元数据,则表达式的值等于该单元数据中的某个元素时,执行相应的语句组。
3.3 循环结构
3.3.1.for语句
用于处理能事先确定循环次数的情况。
for 循环变量=表达式1:表达式2:表达式3
循环体语句
end
%其中,表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表
达式2可以省略。
3.3.2.while语句
While 条件
循环体语句
end
3.3.3 break语句和continue语句
break语句用于终止循环的执行。当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句的下一语句。
continue语句控制跳过循环体中的某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环
3.4 函数
3.4.1 函数文件
函数名的命名规则与变量名的命名规则相同。字母、数字、下划线,字母开头
函数文件由function语句引导,其基本结构为
function 输出形参表=函数名(输入形参表)
注释说明部分
函数体语句
其中,以function开头的一行为引导行,表示该M文件是一个函数文件。函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于一个时,则应该用方括号括起来。
函数文件中的变量的作用域默认是局部的。全局变量用global命令定义,命令格式为:
global var1 var2 ... varN
变量var1、var2、varN之间用空格分隔。
ps: 函数文件名通常由函数名再加上扩展名.m组成,不过函数文件名与函数名也可以不相同。当两者不同时,MATLAB将忽略函数名而确认函数文件名,因此,调用时使用函数文件名。
函数调用时各实参出现的顺序,应与函数定义时形参的顺序一致;[输出实参表]=函数名(输入实参表)
3.4.2 匿名函数
匿名函数是一种特殊的函数定义形式,不存储成函数文件。匿名函数的调用与标准函数的调用方法一样,但定义只能包含表达式。通常,匿名函数与函数句柄变量相关联,通过句柄变量调用该匿名函数。定义匿名函数的基本格式为:
函数句柄=@(匿名函数形参表) 匿名函数表达式
四、曲线的绘制
4.1 二维曲线的绘制
(1)曲线基本属性
为了加强对比效果,我们常常会在plot函数中加上选项,用于指定所绘曲线的线型、颜色和数据点标记。
|-----|---------|
| 选项 | 线形 |
| - | 实现(默认值) |
| : | 虚线 |
| - - | 双画线 |
| -. | 点画线 |
[表2 线形选项]
4.2 设置曲线样式
要设置曲线样式可以在plot函数、fplot函数中加绘图选项,其调用格式为:
plot(x,y,选项)
plot(x1,y1,选项1,x2,y2,选项2,...,xn,yn,选项n)
fplot(funx,选项)
- fplot(funx,funy,选项)
题:在同一坐标内,分别用不同线型和颜色绘制曲线y=𝑥2−3y=x^2-3和y=2sin𝑥**+3cos𝑥y=2 sinx+3 cosx,并标记两曲线交点。
x=linspace(-3,3,1000);
y1=x.*x-3;
y2=2*sin(x)+3*cos(x);
k=find(abs(y1-y2)<1e-2);%查找y1与y2相等点(近似相等)的下标
x1=x(k); %取y1与y2相等点的x坐标
y3=x1.*x1-3; %求y1与y2值相等点的y坐标
plot(x,y1,x,y2,'k:',x1,y3,'bp');
4.3 图形标注与坐标控制
(1)图形标注
图形标注函数的调用格式如下。
- title(坐标轴标题)
- xlabel(x轴说明)
- ylabel(y轴说明)
- text(x, y, 图形说明)
- legend(图例1, 图例2, ...)
title函数用于给坐标轴添加标题;xlabel、ylabel分别用于给x轴、y轴添加说明;text函数用于在指定位置(x,y)添加图形说明;legend函数用于添加图例,说明绘制曲线所用线型、颜色或数据点标记。
(2)多图形显示
图形窗口的分割:subplot函数,用来实现对当前图形窗口的分割。subplot函数的调用格式为:
subplot(m, n, p)
其中,参数m和n表示将图形窗口分成m行n列个绘图区,区号按行优先编号。第3个参数指定第p个区为当前活动区,若p是向量,则表示将向量中的几个区合成1个绘图区。
4.4 三维曲线绘制
(1)plot3函数
基本调用格式为:plot3(x, y, z, 选项)
参数x、y、z组成一组曲线的空间坐标。
通常,x、y和z为长度相同的向量, x、y、z对应元素构成一条曲线上各数据点的空间坐标;当x、y、z是同样大小的矩阵时,则以x、y、z对应列元素作为数据点坐标,曲线条数等于矩阵列数。当x、y、z中有向量,也有矩阵时,行向量的长度与矩阵的列数相同,列向量的长度与矩阵的行数相同。
题:
t=0:pi/20:10*pi;
x=sin(t)+t.*cos(t);
y=cos(t)-t.*sin(t);
z=t;
plot3(x,y,z);
title('螺旋线');
xlabel('X');ylabel('Y');zlabel('Z');
grid on;
4.5 三维曲面绘制
4.5.1产生网格坐标矩阵
在 MATLAB 中,产生平面区域内的网格坐标矩阵有两种方法
(1)利用矩阵运算生成。
a=2:6;
b=(3:8)';
X=[a;a;a;a;a;a];
Y=[b,b,b,b,b];
(2)调用 meshgrid 函数生成二维网格坐标矩阵)
[X,Y]= meshgrid(x, y)
a = 2:6;
b=(3:8)';
[X,Y]=meshgrid(a b);
(3)mesh 函数和 surf 函数
mesh函数用于绘制三维网格图,surf函数用于绘制三维曲面图。surf 函数和 mesh 函数的调用格式为:
mesh(x,y,z,c)
surf(x,y,z,c)
x、y定义网格顶点的 xy平面坐标,z定义网格顶点的高度。选项c用于指定在不同高度下的补面颜色。
题:绘制三维曲面图z = sinx2 + cosy2,x∈[0,π],y∈[0,π/2]。
[x,y]=meshgrid(0:pi/50:pi, 0:pi/50:pi/2);
z=sin(x.^2)+cos(y.^2);
subplot(1,2,1)
mesh(x,y,z);
subplot(1,2,2)
surf(x,y,z);
五、特殊矩阵及矩阵分析
5.1 零矩阵/幺矩阵
MATLAB提供了如下函数,用于创建零矩阵/幺矩阵。
- zeros函数:生成全0矩阵,即零矩阵。
- ones函数:生成全1矩阵,即幺矩阵。
- eye函数:生成单位矩阵,即对角线上的元素为1、其余元素为0的矩阵。
- true函数:生成全1逻辑矩阵。
- false函数:生成全0逻辑矩阵。
- true函数:生成全1逻辑矩阵。
- eye函数:生成单位矩阵,即对角线上的元素为1、其余元素为0的矩阵。
- ones函数:生成全1矩阵,即幺矩阵。
以zeros函数为例说明函数用法。
zeros(m):生成m × m零矩阵,m缺省时,生成一个值为0的标量。
zeros(m,n):生成m × n零矩阵。
zeros(m, classname):生成m × m零矩阵,矩阵元素为classname指定类型,默认为double型。
zeros(m, 'like', p):生成m × m零矩阵,矩阵元素的类型与变量p一致。
5.2 随机矩阵
- rand(m, n)函数:生成一组值在(0, 1)区间均匀分布的随机数,构建m × n矩阵。
-
randi(imax, m, n)函数:生成一组值在[1, imax]区间均匀分布的随机整数,构建m × n矩阵。
- randn(m, n)函数:生成一组均值为0、方差为1的标准正态分布随机数,构建m × n矩阵。
-
randperm(n, k)函数:将[1, n]区间的整数随机排列,构建一个向量,参数k指定向量的长度。
-
题:建立随机矩阵: (1)在区间[10, 30]内均匀分布的4阶随机矩阵。
(2)均值为0.6、方差为0.1的4阶正态分布随机矩阵。
产生(0,1)区间均匀分布随机矩阵使用rand函数,假设得到了一组满足(0,1)区间均匀分布的随机数xi,则若想得到在任意[a, b]区间上均匀分布的随机数,只需用
yi = a + (b − a)xi计算即可。产生均值为0、方差为1的标准正态分布随机矩阵使用randn函数,假设已经得到了一组标准正态分布随机数xi,如果想更一般地得到均值为μ、方差为σ2的随机数,可用yi = μ + σxi计算出来。针对本例,命令如下:
-
a=10;
b=30;
x=a+(b-a)*rand(4) %随机矩阵
y=0.6+sqrt(0.1)*randn(4) %确定均值和方差的矩阵 - randn(m, n)函数:生成一组均值为0、方差为1的标准正态分布随机数,构建m × n矩阵。
-
5.3 矩阵结构变换
5.3.1.对角阵
除了主对角线上的元素外,其余元素都等于零
(1)提取矩阵的对角线元素
设A为m × n矩阵,函数diag(A)用于提取矩阵A主对角线元素
diag(A,k):提取第k条对角线的元素。主对角线为第0条对角线;与主对角线平行,往上为第1条、第2条、...、第n条对角线,往下为第 − 1条、第 − 2条、...、第 − n条对角线。例如,对于上面建立的A矩阵,提取其主对角线两侧对角线的元素。
(2)构造对角矩阵
设V为具有m个元素的向量,diag(V, k)的功能是生成一个n × n(n = m + |k|)对角阵,其第k条对角线的元素即为向量V的元素。例如:
(3) 三角阵
上三角阵:对角线以下的元素全为0的一种矩阵
下三角阵:对角线以上的元素全为0的一种矩阵。
函数:
- triu(A):求矩阵A的上三角阵的。
- triu(A,k):求矩阵A的第k条对角线以上的元素。
- tril(A):求矩阵A的下三角阵的。
- tril(A,k):求矩阵A的第k条对角线
- triu(A,k):求矩阵A的第k条对角线以上的元素。
(4)矩阵的旋转
函数rot90(A, k):以90°为单位旋转矩阵A,选项k指定旋转k倍90°,默认k为1。当k>0时,将矩阵A按逆时针方向进行旋转;当k<0时,将矩阵A按顺时针方向进行旋转。例如:
(5)矩阵的翻转
- fliplr(A):对矩阵A实施左右翻转
- flipud(A):对矩阵A实施上下翻转的函数。
(6)矩阵求逆
inv(A)函数用来计算方阵的逆矩阵。若A为奇异矩阵、接近奇异矩阵或降秩矩阵时,系统将会给出警告信息。inv(A)函数等效于A^(-1)。
题:求方阵A的逆矩阵并赋值给B,且验证A与B是互逆的
(7)矩阵求值
函数det(A)用于求矩阵A的行列式。
(8) 矩阵的秩
函数rank(A)求矩阵秩。
(9) 特征向量
对于n阶方阵A,求数λ和向量ζ,使得等式Aζ = λζ成立,满足等式的数λ称为A的特征值,而向量ζ称为A的特征向量。计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有如下3种。
e = eig(A):求矩阵A的全部特征值,构成向量e。
[V,D] = eig(A):求矩阵A的全部特征值D、右特征向量V。
[V,D,W] = eig(A):返回以特征值为主对角线的对角阵D、以右特征向量构成的矩阵V,以及以左特征向量构成的矩阵W。
(10)矩阵的最值
求一个数据序列最大值的函数max,其调用格式如下:
Y = max(X):若X是向量,则返回向量X的最大值;若X是矩阵,则返回一个包含每一列最大值的行向量。
[Y,U] = max(X,[],dim):沿维度dim返回最大值。dim取1或2。dim取1时,该函数和max(A)完全相同;dim取2时,该函数返回一个列向量,其第i个元素是A矩阵的第i行上的最大值。
求矩阵最小值的函数是min,其用法和max相同。
函数max和min还能对两个同型的向量或矩阵进行比较。max函数调用格式如下。
max(X,Y):返回值是与X、Y同型的向量或矩阵,其中的每个元素等于X、Y对应元素的较大者。
max(X,n):n是一个标量,返回值是与X同型的向量或矩阵,其中的每个元素等于X对应元素和n中的较大者。
(11)求和与求积
sum函数是用于对数据序列求和。调用格式如下:
S = sum(X):如果X是一个向量,则返回向量各元素的和。如果X是一个矩阵,则返回一个行向量,其第i个元素是X的第i列的元素和。
S = sum(X,dim):当dim为1(默认值)时,该函数等同于sum(X);当dim为2时,返回一个列向量,其第i个元素是X的第i行的各元素之和。
数据序列求积的函数是prod
题:
(12) 平均值和中值
数据序列的平均值指的是算术平均值。中值是指在数据序列中其值的大小恰好处在中间的元素。例如:数据序列 -2,5,7,9,12的中值为7
如果数据为偶数个,则中值等于中间的两项之平均值。例如,数据序列 -2,5,6,7,9,12中,处于中间的数是6和7,故其中值为此两数之平均值6.5。
求数据序列平均值的函数是mean,调用格式如下:
M = mean(X):如果X是一个向量,则返回向量的算术平均值。如果X是一个矩阵,则返回一个行向量,其第i个元素是X的第i列的算术平均值。
M = mean(X,dim):当dim为1(默认值)时,该函数等同于mean(X);当dim为2时,返回一个列向量,其第i个元素是X的第i行的算术平均值。ps:dim默认为1,求的均为列的结果,最终为行向量
求数据序列中值的函数是median
(13) 累加和与累乘积
求累加和的cumsum函数与求累乘积的cumprod函数。cumsum函数的调用格式如下:
B = cumsum(X):如果X是一个向量,则返回累加和向量。如果X是一个矩阵,返回的矩阵的第i列是X的第i列的累加和向量。
B = cumsum(X,dim):返回多维数组的累加和。若X是矩阵,当dim为1(默认值)时,返回的矩阵的第i列是X的第i列的累加和向量;当dim为2时,返回的矩阵的第i行是X的第i行的累加和向量。
累乘积的cumprod函数用法和cumsum函数相同。
(14)标准差与方差
标准方差描述了一组数据波动的大小,方差越小,数据波动越小。在MATLAB中,提供了计算数据序列的标准方差的函数std。对于向量X,std(X)返回一个标准方差。对于矩阵A,std(A)返回一个行向量,它的各个元素便是矩阵A各列的标准方差。std函数的一般调用格式为
Y=std(A,flag,dim)
其中flag取0或1,当flag = 0时,按σ1所列公式计算标准方差;当flag = 1时,按σ2所列公式计算标准方差。dim取1或2。当dim = 1时,求各列元素的标准方差;当dim = 2时,则求各行元素的标准方差。默认flag = 0,dim = 1。
方差var函数的调用格式为:
V = var(X, w, dim)
对于向量X,var(X)返回一个标量。对于矩阵X,var(X)返回一个行向量,各个元素是矩阵X各列或各行的方差。
其中,选项w用于指定权重方案。若w为0(默认值),则按观测值数量-1(即k=n-1)实现归一化;若w为1,则按观测值数量(即k=n)实现归一化。
选项dim指定沿维度dim计算方差。对于矩阵,当dim 为1(默认值)时,求各列元素的方差;当dim 为 2时,求各行元素的方差。
(14) 排序
对数组元素进行排序的函数sort(X),调用格式为:
[Y,I]=sort(X, dim, mode)
其中Y是排序后的矩阵,而I记录Y中的元素在X中的位置。
选项dim指定排序的维度,若dim 为1(默认值),则按列排序;若dim = 2,则按行排序。
选项mode指明排序的方法,'ascend'(默认值)为升序,'descend'为降序。
六、数据插值
实现一维插值的函数是interp1,其调用格式为
vq = interp1(x,v,xq,method)
x、v是两个等长的已知向量,分别存储采样点和采样值。若同一个采样点有多种采样值,则v可以为矩阵,v的每一列对应一种采样值。
xq存储插值点,vq是一个列的长度与xq相同、宽度与v相同的矩阵。
选项method用于指定插值方法,可取值如下:
'linear'(默认值)、 'pchip'、'spline'、'nearest'、'next'、'previous'
method是插值方法
●'linear':线性插值。线性插值是默认的插值方法。它是把与插值点靠近的两个数据点用直线连接,然后在直线上选取对应插值点的数据。
● 'pchip':分段三次埃尔米特插值。
●'nearest':最近点插值。根据已知插值点与已知数据点的远近程度进行插值。插值点优先选择较近的数据点进行插值操作。
●'cubic':3次多项式插值。根据已知数据求出一个3次多项式,然后根据该多项式进行插值。
●'spline':3次样条插值。所谓3次样条插值,是指在每个分段(子区间)内构造一个3次多项式,使其插值函数除满足插值条件外,还要求在各节点处具有光滑的条件。
题:
七、曲线拟合
polyfit函数来求得最小二乘拟合多项式的系数。polyfit函数的调用格式为
p = polyfit(x,y,n)
[p,S] = polyfit(x,y,n)
[p,S,mu]=polyfit(X,Y,n)
x、y是两个等长的向量,存储采样点x和采样值y
产生一个n次多项式的系数向量p及其在采样点的误差向量S。p是一个长度为n+ 1的向量,p的元素为多项式p1xn+p2xn−1+...+pnx+pn+1的系数。
mu是一个二元列向量,
mu(1)是mean(x)平均值, mu(2)是std(x)标准差。
题:
data=[0,15.18;34,21.36;67,25.72;101,32.29;135,34.03; ...
202,39.45;259,43.15;336,43.46;404,40.83;471,30.75];
x=data(:,1);
y=data(:,2);
f=polyfit(x,y,2);%拟合2次多项式
yi=polyval(f,x); %把x带入多项式求值
plot(x,y,'rp',x,yi)
八、建立符号对象
MATLAB提供了两个建立符号变量的函数:sym和syms,两个函数的用法不同。
sym函数用于创建单个符号变量,基本调用格式为:
x = sym('x')
建立符号变量时可以指定该变量所属集合:x = sym('x',set)
set可取值为'real'、'integer'、'positive' 或'rational'。
sym 函数可以将常量、向量、矩阵转换为符号对象:
x = sym(Num,flag)
Num可以是常量、向量或矩阵,选项flag用于指定将浮点数转换为符号对象时所采用的方法,可取值有'r'、'd'、'e'和'f',分别代表将Num转换为有理式、十进制数、带估计误差的有理式、与精确值对应的分式,默认为'r'。
syms函数用于创建多个符号变量,基本调用格式为:syms x y z;