数学建模-Matlab学习笔记(十五)基础常用函数

本文最后更新于:December 3, 2021 pm

MATLAB(矩阵实验室)是第四代高层次的编程语言和交互式环境数值计算,可视化和编程。由美国MathWorks公司开发的一种编程语言。用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。拥有众多的内置命令和数学函数,可以帮助您在数学计算,绘图和执行数值计算方法。

目录

1.class函数

  1. 功能
  • 输出变量的类型。
  1. 使用方式
1
class(a)

2.single函数

  1. 功能
  • 将其他类型的数据转换为单精度类型。
  1. 使用方式
1
single(a)

3.double函数

  1. 功能
  • 将其他类型的数据转换为双精度类型。
  1. 使用方式
1
double(a)

4.获取矩阵行、列数

4.1 size函数

  1. 功能
  • 获取矩阵的行数和列数。
  1. 使用方式
1
2
3
4
5
6
%方法一
[m,n]=size(a) %m为行数,n为列数

%方法二
size(a,1)%返回行数
size(a,2)%返回列数

4.2 length函数

  1. 功能
  • 获取矩阵的行数或列数。
  1. 使用方式
1
length(a) %需要注意点是,返回的是行数或列数中的最大值,即:length(a)=max(size(a))。

5.求复数实、虚部

1
a=10+5i;

5.1 实部(real函数)

  1. 使用方式
1
real(a)

5.2 虚部(imag函数)

  1. 使用方式
1
imag(a)

6.输出格式(format)

  1. 功能
  • 设置数据的输出格式
  1. 使用方式
1
format 格式符

7.sin、sind、abs、char函数

  1. 使用方式
1
2
3
4
5
6
7
8
9
10
sin(pi/2) %以弧度为单位
sind(90) %以角度为单位

%abs函数可以求:实数的绝对值、复数的模、字符串的ASCII码值
abs(-4)
abs(3+4i)
abs('a')

%char函数把ASCII码矩阵转换为字符串矩阵
char(a+32)

8.取整函数

8.1 round函数

  1. 功能
  • 按照四舍五入的规则取整。
  1. 使用方式
1
round(4.7) %5

8.2 ceil函数

  1. 功能
  • 向上取整,取大于等于这个数的第一个整数。
  1. 使用方式
1
ceil(-3.8) %-3

8.3 floor函数

  1. 功能
  • 向下取整,取小于等于这个数的第一个整数。
  1. 使用方式
1
floor(3.6) %3

8.4 fix函数

  1. 功能
  • 固定取靠近0的那个整数,即舍去小数取整。
  1. 使用方式
1
fix(-3.2) %-3

9.取余数(rem函数)

  1. 功能
  • 求m/n的余数
  1. 使用方式
1
rem(m,n) %求m/n的余数

10.判断素数(isprime函数)

  1. 功能
  • 判断是否为素数,是则返回1,否则返回0。
  1. 使用方式
1
isprime(n) %判断 n 是否为素数

11.查找(find函数)&*

  1. 功能
  • 查找指定值,返回索引。
  1. 使用方式
1
k=find(j)

12.产生行向量(linspace函数)

  1. 功能
  • 在给定范围了,产生具有相同距离的n个数据。如省略n,自动产生100个元素。
  1. 使用方式
1
linspace(a,b,n) %a为一个元素,b为最后一个元素,n为元素的总数

13.元素的引用

矩阵中,序号与下标是一一对应的,以m * n矩阵A为例,矩阵元素 A(i,j)的序号为 (j-1) * m+i 。

13.1 sub2ind函数

  1. 功能
  • 将矩阵中指定元素的行、列下标转换成存储的序号。
  1. 使用方式
1
2
3
4
5
D=sub2ind(S,I,J) 
%D为序号,即最后得到的序号
%S为由行数和列数组成的向量
%I为转换矩阵元素的行下标
%J为转换矩阵元素的列下标。

13.2 ind2sub函数

  1. 功能
  • 将把矩阵元素的序号转换成对应的下标。
  1. 使用方式
1
2
3
4
5
[I,J]=ind2sub(S,D)
%I为行下标
%J为列下标
%S为行数和列数组成的向量
%D为序号

14.改变矩阵形状(reshape函数)

  1. 功能
  • 在矩阵总元素保持不变的前提下,将矩阵A重新排成 m * n 的二维矩阵。reshape函数只是改变原矩阵的行数和列数,但并不改变原矩阵元素个数及其存储顺序。
  1. 使用方式
1
reshape(A,m,n)
  • A(:)等价于reshape(A,n,1)。

15.字符串比较函数

15.1 strcmp函数

  1. 功能
  • 比较两个字符串是否相等,如果相等,返回1;否则返回0。
  1. 使用方式
1
strcmp(s1,s2)

15.2 strncmp函数

  1. 功能
  • 比较两个字符串前n个字符是否相等,如果相等,返回1;否则返回0。
  1. 使用方式
1
strncmp(s1,s2,n)

15.3 strcmpi函数

  1. 功能
  • 这忽略字母大小写前提下,比较字符串是否相等,如果相等,返回1;否则返回0。
  1. 使用方式
1
strcmpi(s1,s2)

15.4 strncmpi函数

  1. 功能
  • 这忽略字符串大小写前提下,比较两个字符串前n个字符是否相等,如果相等,返回1;否则返回0。
  1. 使用方式
1
strncmpi(s1,s2,n)

16.字符串的查找、替换函数

16.1 findstr函数

  1. 功能
  • 返回短字符串在长字符串中的开始位置。不分先后位置。
  1. 使用方式
1
findstr(s1,s2)

16.2 strrep函数

  1. 功能
  • 将字符串s1中的所有子字符串s2替换为字符串s3。
  1. 使用方式
1
strrep(s1,s2,s3)

17.将字符串作为命令执行(eval函数)

  1. 功能
  • 将字符串内容作为Matlab命令执行。
  1. 使用方式
1
eval(a) %a为带命令的字符串

18.判断整数(isinteger函数)

  1. 功能
  • 验证变量是否为整数。
  1. 使用方式
1
isinteger(x)

19.通用矩阵

19.1 零矩阵(zeros函数)

  1. 功能
  • 产生全零矩阵,即零矩阵。
  1. 使用方式
1
2
3
zeros(m) %产生m * m 零矩阵
zeros(m,n) %产生m * n 零矩阵
zeros(size(a)) %产生与矩阵a同样大小的零矩阵

19.2 幺矩阵(ones函数)

  1. 功能
  • 产生全1矩阵。即幺矩阵。
  1. 使用方式
1
zeros函数用法相同。具体用法见zeros函数。

19.3 对角线为1(eye函数)

  1. 功能
  • 产生对角线为1的矩阵。当矩阵是方阵时,得到一个单位矩阵。
  1. 使用方式
1
zeros函数用法相同。具体用法见zeros函数。

19.4 随机矩阵(rand函数)

  1. 功能
  • 产生(0,1)区间均匀分布的随机矩阵。
  1. 使用方式
1
zeros函数用法相同。具体用法见zeros函数。

19.5 标准正态分布随机矩阵(randn函数)

  1. 功能
  • 产生均值为0,方差为1的标准正态分布随机矩阵。
  1. 使用方式
1
2
3
4
zeros函数用法相同。具体用法见zeros函数。

%产生均值为0.6、方差为0.1的5阶正态分布随机矩阵。
B=0.6+sqrt(0.1)*randn(5)

20.特殊矩阵

20.1 魔方矩阵(magic函数)

  1. 功能
  • 产生一个特定的魔方阵。
  1. 使用方式
1
magic(n)  %n阶

20.2 范德蒙矩阵(vander函数)

  1. 功能
  • 生成以v为基础的范德蒙矩阵。
  1. 使用方式
1
2
3
4
vander(v)

%实例
vander(1:5)

20.3 希尔伯特矩阵(hilb函数)

  1. 功能
  • 生成n阶希尔伯特矩阵函数。
  1. 使用方式
1
hilb(n)

20.4 伴随矩阵(compan函数)

  1. 功能
  • 生成伴随矩阵。其中p是一个多项式的系数向量,高次幂系数排在前,低次幂系数排在后。
  1. 使用方式
1
2
3
4
5
compan(p)

%实例
p=[1,-2,-5,6]
compan(p)

20.5 帕斯卡矩阵(pascal函数)

  1. 功能
  • 生成一个n阶帕斯卡矩阵。
  1. 使用方式
1
pascal(n)

21.对角阵

  • 对角矩阵:只有对角线上有非零元素的矩阵。

  • 数量矩阵:对角线上的元素相等的对角矩阵。

  • 单位矩阵:对角线上的元素都为1的对角矩阵。

21.1 提取矩阵的对角线元素

21.1.1 提取主对角线元素(diag函数)

  1. 功能
  • 提取矩阵对角线元素,产生一个列向量。
  1. 使用方式
1
2
3
diag(a) %提取矩阵a主对角线元素,产生一个列向量。

diag(a,k) %提取矩阵a第k条对角线元素,产生一个列向量。

22.三角阵

22.1 上三角矩阵

1
2
triu(a) %提取矩阵a的主对角线及以上的元素。
triu(a,k) %提取矩阵a的第k条对角线及以上的元素。

22.2 下三角矩阵

1
tril() % 用法同triu函数。

23.矩阵的转置

1
2
转置运输符是小数点后面接单引号(.')
共轭转置,其运算符是单引号('),它在转置的基础上还要取每个数的复共轭。

24.矩阵的旋转、翻转、求逆

1
2
3
4
5
6
7
8
9
% 旋转
rot90(a,k) % 将矩阵a逆时针方向旋转90°的k倍,k=1时可省略。

% 翻转
fliplr(a) % 对矩阵a实施左右翻转
flipud(a) % 对矩阵a实施上下翻转

% 求逆
inv(a) % 求方阵a的逆矩阵

25.求矩阵元素个数(numel函数)

1
numel(a)

26.拟合函数

26.1 线性最小二乘拟合

26.1.1 多项式曲线拟合函数(polyfit函数)

  1. 方法
1
2
3
4
5
6
P=polyfit(X,Y,n) 
[P,S]=polyfit(X,Y,n)
[P,S,mu]=polyfit(X,Y,n)

%n 需要小于等于样点(x,y)的个数。
%函数将根据采样点X和采样点的函数值Y,产生一个n次的多项式P,S为采样点的误差向量,mu(1)是%mean(X)(平均值),mu(2)是std(X)(方差)。

26.1.2 多项式计算求值函数(polyval函数)

  1. 使用方式
1
2
3
4
% 求多项式p(x)=4*x^2+2*x+1在x=[5 6 7]的值
p = [4 2 1] % 系数
x = [5 6 7] % x的值
polyval(p,x)

26.1.3 工具箱(cftool函数)

  1. 使用方式
1
cftool

26.2 非线性最小二乘拟合

26.2.1 lsqcurvefit、lsqnonlin函数

两个函数都需要先建立函数文件。

  1. lsqcurvefit函数
1
x=lsqcurvefit('f',a,xd,yd)
  • f:符号函数句柄。也可以是函数文件,但函数的参数需要是x和xd。即fun(x,xd)。

  • a:最开始预估的值(预拟合的未知参数的估计值)。

  • xd:已知的xd值。

  • yd:已知的yd值。

  1. lsqnonlin函数
1
2
3
x=lsqnonlin('f',x0)
% f是一个函数文件,自变量为x
% x0 是迭代初值

27.利用多项式求系数、利用系数求多项式

27.1 求多项式的系数(sym2poly函数)

返回值是多项式的系数,依次输出由高阶到0阶的系数。

  1. 使用方式
1
2
syms x; % 必须先运行此代码,且这里的x为多项式的未知数x,也可以换成其他字母
sym2poly(x^3+2*x^2-4*x-9)

27.2 求多项式(poly2sym函数)

  1. 使用方式
1
2
syms x; % 必须先运行此代码,且这里的x为多项式的未知数x,也可以换成其他字母
poly2sym([1,3,5],x)

28.插值函数

28.1 interp1函数

1
2
3
4
5
6
7
8
9
y1=interp1(x,y,x1) % 默认linear分段线性插值
y1=interp1(x,y,x1,'nearest') % 临近插值
y1=interp1(x,y,x1,'spline') % 球面线性插值、样条插值
y1=interp1(x,y,x1,'cubic') % 三次多项式插值
y1=interp1(x,y,x1,'pchip') % 分段三次Hermite 插值

% 其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量,
% 'method'表示采用的插值方法,MATLAB提供的插值方法有几种:'nearest'是最邻近插值, 'linear'线性插值; 'spline'三次样条插值; 'pchip'立方插值.缺省时表示线性插值
% 注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。

28.2 拉格朗日插值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function y=lagrange(x0,y0,x) 
%拉格朗日插值函数
%n 个节点数据以数组 x0, y0 输入(注意 Matlat 的数组下标从1开始),
%m 个插值点以数组 x 输入,输出数组 y 为 m 个插值
n=length(x0);m=length(x);
for i=1:m
z=x(i);
s=0.0;
for k=1:n
p=1.0;
for j=1:n
if j~=k
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=p*y0(k)+s;
end
y(i)=s;
end

28.3 埃尔米特插值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function y = hermite( x0,y0,y1,x ) 
%埃尔米特插值多项式
%x0为点横坐标
%y0为函数值
%y1为导数值
%m个插值点用数组x输入
n=length(x0);m=length(x);
for k=1:m
yy=0.0;
for i=1:n
h=1.0;
a=0.0;
for j=1:n
if j~=i
h=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2;
a=1/(x0(i)-x0(j))+a;
end
end
yy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i));
end
y(k)=yy;
end

28.4 二维插值之插值节点为散乱节点

  1. 使用方式
1
2
3
4
ZI = griddata(X,Y,Z,XI,YI,'method')
%其中 X、 Y、 Z 均为 n 维向量,指明所给数据点的横坐标、纵坐标和竖坐标。向量 XI、YI 是给定的网格点的横坐标和纵坐标,返回值 ZI 为网格( XI, YI)处的函数值。 XI与 YI 应是方向不同的向量,即一个是行向量,另一个是列向量。

% 插值方法:nearest(最邻近插值)、linear(双线性插值)、cubic(双三次插值)、v4(Matlab提供的插值方法)。

29.获得每两个点之间的距离(pdist函数)

29.1 求距离(pdist函数)

1
2
3
4
5
% 一个矩阵X的大小为M*N,
D = pdist(X)
% 得到的矩阵D的大小为1行M*(M-1)/2列,表示的意义是M行数据,每两行计算一下距离。
D = pdist(X,'distance')
% distance 表示用什么距离方式。默认欧式距离
  • distance 参数:
    欧几里德距离(euclidean)、标准欧几里德距离(seuclidean)、马哈拉诺比斯距离(mahalanobis)、曼哈顿距离(城市区块距离)(cityblock)、闵可夫斯基距离(minkowski)、切比雪夫距离(chebychev)、夹角余弦距离(cosine)、相关距离(correlation)、汉明距离(hamming)、杰卡德距离(jaccard)、斯皮尔曼(spearman)、

29.2 将向量转化为矩阵

1
2
3
4
5
6
7
squareform(dis) % 将向量 dis 转化为矩阵

% 实例
A = [0 0 0;1 2 3;2 2 2;7 8 9];
dis = pdist(A);%计算各行向量之间的欧式距离
squareform(dis)%将向量 dis 转化为矩阵
% 矩阵中i行 j列元素表示 A中第i个行向量,与第j个行向量之间的欧氏距离。

30.矩阵求值

30.1 矩阵的行列式

1
det(a) % 求方阵a所对应的行列式的值

30.2 矩阵的秩

1
rank(a) % 求矩阵a的秩

30.3 矩阵的迹

1
trace(a) % 求矩阵a的迹

30.4 向量和矩阵的范数

矩阵或向量的范数用来度量矩阵或向量在某种意义下的长度。

  1. 向量的三种常用范数
  • 向量1-范数:向量元素的绝对值之和。

  • 向量2-范数:向量元素绝对值的平方和的平方根。

  • 向量∞-范数:所有向量元素绝对值中的最大值。

1
2
3
norm(v)或norm(v,2) % 计算向量v的2-范数。
norm(v,1) % 计算向量v的1-范数。
norm(v,inf) % 计算向量v的∞-范数。
  1. 矩阵的三种常用范数
  • 矩阵a的1-范数:矩阵列元素绝对值之和的最大值。

  • 矩阵a的2-范数:a’a矩阵的最大特征值的平方根。

  • 矩阵a的∞-范数:所有矩阵行元素绝对值之和的最大值。

用法与向量的范数的函数完全相同。

30.5 矩阵的条件数

  • 矩阵a的条件数等于a的范数与a的逆矩阵的范数的乘积。

  • 条件数越接近于1,矩阵的性能越好,反之,矩阵的性能越差。

1
2
3
cond(a,1) % 计算a的1-范数下的条件数。
cond(a)或cond(a,2) % 计算a的2-范数下的条件数。
cond(a,inf) % 计算a的∞-范数下的条件数。

30.6 矩阵的特征值与特征向量

设a是n阶方阵,如果存在常熟λ和n维非零列向量x,使得等式ax=λx成立,则称λ为a的特征值,x是对应特征值λ的特征向量。

1
2
3
4
e=eig(a) % 求矩阵a的全部特征值,构成向量e
[x,d]=eig(a) % 求矩阵a的全部特征值,构成对角阵d,并产生矩阵x,x各列是相应的特征向量。

可以用 eigshow函数 演示单位圆上的关系。

31.稀疏矩阵

31.1 存储方式

31.1.1 完全存储方式

31.1.2 稀疏存储方式

31.2 稀疏存储方式的产生