MATLAB入门到精通(三):常用函数及数学应用

本文详细介绍了MATLAB中的常用函数,包括随机数生成(rand(), randn(), randi(), randperm())、时间处理、文件输入输出以及特殊操作函数。此外,还探讨了符号数学,如创建和使用符号对象、符号表达式的操作,如替换和化简,以及符号微积分。同时,讲解了矩阵计算和数理统计,涵盖线性方程组求解、矩阵函数和概率分布。最后,讨论了多项式运算和微积分的相关函数,如多项式加减乘除、根的求解以及积分计算。" 136736523,5869076,自定义前端管理后台侧边导航栏实现,"['前端开发', 'HTML', 'CSS']
摘要由CSDN通过智能技术生成

合集如下:
MATLAB入门到精通(一):简介及数据类型
MATLAB入门到精通(二):基本语句及绘图
MATLAB入门到精通(三):常用函数及数学应用


十一、常用函数

11.1 随机数函数

11.1.1 rand()函数

rand()函数用来产生均匀分布的随机数,其基本调用格式如下:

X=rand % 产生一个(0,1)的随机数
X=rand(n) % 产生nxn的矩阵,元素为(0,1)之间的随机数
X=rand(x,y) %产生xxy的矩阵,元素为(0,1)之间的随机数
X=rand(sz) %sz为矩阵,产生size(sz)大小的矩阵
X=rand(...,typename)% typename可以是'single'或'double',产生对应数据类型的随机数

例子如下:

r=rand;
disp(r)
X=rand(2,3,'double');
disp(X)

在这里插入图片描述

11.1.2 randn()函数

randn()函数用于产生正态分布的随机数,其调用格式和rand()函数基本一致,如下:

X=randn % 返回一个标准正态分布的随机向量
X=randn(n) % 产生nxn的矩阵,元素为一个标准正态分布中的值
X=randn(x,y) %产生xxy的矩阵,元素为一个标准正态分布中的值
X=randn(sz) %sz为矩阵,产生size(sz)大小的矩阵
X=randn(...,typename)% typename可以是'single'或'double',产生对应数据类型的随机数

例子如下:

r=randn;
disp(r)
X=randn(2,3);
disp(X)

在这里插入图片描述

11.1.3 randi()函数

randi()函数用于生成伪随机整数,也就是产生整数的函数。调用格式如下:

X=randi(imax) %返回一个(1,imax)之间的随机整数
X=randi(imax,n)  %返回nxn的矩阵,元素为(1,imax)之间的随机整数
X=randi(imax,sz1,sz2) %返回sz1xsz2的矩阵,元素为(1,imax)之间的随机整数
X=randi(imax,sz) %sz为矩阵,返回size(sz)大小元素为(1,imax)之间的随机整数
X=randi([imin,imax],...) %返回imin到imax之间的随机整数

例子如下:

X=randi(5);
disp(X)
X=randi(10,2,2);
disp(X)
X=randi([5,10],[2,2]);
disp(X)

在这里插入图片描述

————————(2023/3/17 18:01 任重道远)———————

11.1.4 randperm()函数

randperm()函数用于生成一组整数的随机排列,调用格式如下:

p=randperm(n) %返回一个1~n的随机排列其不重复的行向量
p=randperm(n,k) %返回一个1~n的随机排列其不重复的行向量

例子如下:

X=randperm(10);
disp(X)
X=randperm(10,5);
disp(X)

在这里插入图片描述


11.2 时间函数

11.2.1 日期和时间

① 获取当前日期时间

要想获取当前的日期和时间,可以使用clock()函数,该函数将当前的日期和时间返回在一个数组中。例子如下:

T=clock;
disp(T)

在这里插入图片描述

也可以使用now()函数返回当天的日期:

T=now;
disp(T)

在这里插入图片描述

另外,data()函数可以以 dd-mmm-yyy的格式返回当天日期的字符串,如下:

T=date;
disp(T)

在这里插入图片描述

② 日期格式的转换

Matlab支持以下三种日期格式:双精度日期数字、各类日期字符串和数值日期向量。使用函数datestr()将日期值转换为表示日期的字符串。调用格式如下:

datestr(date,dateform) %date为要转换的日期值,dateform为日期日期的字符串类型,可以在命令行窗口输入help datestr查看dateform的各种格式

例子如下:

t=now;
T=datestr(now);
disp(T)
T=datestr(t,12); %help datestr 查看12对应的格式
disp(T)
T=datestr(t,25);
disp(T)

在这里插入图片描述

③ 日期函数
日期函数用于从一个日期值或日期字符串中找到具体的日子或星期几。如想知道某天是周几可以使用weekday()函数。例子如下:

[d,w]=weekday('19-Mar-2023');
disp(w)

在这里插入图片描述利用calendar()函数可以生成指定月份的日历。如下:

calendar(date)

在这里插入图片描述

11.2.2 时钟函数

当用户想要计算一组Matlab操作运行时间时,可以使用tic()和toc()函数。tic()函数启动一个秒表,表示计时开始;toc()函数则停止这个秒表,表示计时结束,并计算所经历的时间(单位为秒),例子如下:

tic;
plot(rand(20,6))
toc

在这里插入图片描述


11.3 文件输入输出函数

Matlab提供了一些低级文件I/O函数来读取和写入二进制或ASCII文件,大多与C语言相似。

11.3.1 文件的读写

① 读写二进制文件

使用fread()可以从文件中读取二进制数据,将每一个字节看成一个整数,将结果写入一个矩阵返回,最基本的调用格式如下:

% fid:是用于fopen打开的一个文件的文件标识
% array:是包含有数据的数组
% count:用于读取文件中变量的数目
% size:用于指定读取文件中的变量个数
[array,count]=fread(fid,size,precision)
[array,count]=fread(fid,size,precision,skip)

例子如下:

fid=fopen('test.m','r');%打开文件并获取文件标识
data=fread(fid); %读取到的是二进制数据即ASCII码对应的数字
disp(char(data)');

test.m中的内容:

在这里插入图片描述

输出结果:

在这里插入图片描述
与读取对应的写入操可以通过fwrite()函数实现,fwrite()函数可以将一个矩阵的元素所定的二进制格式写入某个打开的文件,调用格式如下:

% array:写出变量的数组
%count:写入变量的数目
%precission:用于指定输出数据的格式
% skip:用位当单位
count=frite(fid,array,precision,skip)

例子如下:

fid=fopen('test2.m','w');
fwrite(fid,magic(5),'integer*4');
fclose(fid);

② 读写文本文件

Matlab的写入文本文件函数是fpeintf(),其语法格式如下:

%fid是要写入数据那个文件的标识
%format是控制数据显示的字符串
%val1,val2...是Matlab的数据变量
%count是返回成功写入的字节数
count=fprintf(fid,format,val1,val2,...)

例子如下:

a=1:10;
b=[a;a];
fid=fopen('test3.dat','w');
fprintf(fid,'%2d %2d\n',b);
fclose(fid);
type test3.dat

在这里插入图片描述

对应的读取文件的函数为fscanf(),调用格式如下:

[array,count]=fscanf(fid,format,size)

Matlab对文件的操作函数比较多,这里不在一一赘述,列出一张表了解大概,想要进一步学习可以去搜索相关内容。
另外,提一下以二进制读写与格式化读写的比较。一句话概述就是:二进制读写计算机运行更快,但是阅读困难。格式化读写运行较慢,阅读方便。
文件操作汇总表:

类别函数名描述
文件打开fopen打开文件
文件关闭fclose关闭文件
二进制读取fread从一个二进制文件中读取全部或部分数据
二进制写入fwrite将数据写入一个二进制文件
读取的格式化fscanf从文件中读取格式化数据
写入的格式化fprintf将格式化数据写入文件
读取的格式化fgetl从文件读取行,删除换行符
读取格式化fgets从文件读取行,保留换行符
字符串转换写入sprintf将格式化数据写入字符串
字符串转换读取sscanf在格式控制下读取字符串
文件定位feof检测是否到了文件末尾
文件定位ferror获取文件I/O状态信息
文件定位fseek设置文件定位指针
文件定位ftell获取文件定位指针位置
文件定位frewind将文件定位指针设置到文件开头
11.3.2 Matlab数据文件

介绍如何将当前Matlab工作区的变量存储到Matlab本机自定义的数据格式以及Matlab数据文件的导入与导出

① .mat文件形式导入导出

二进制MAT文件中包含的都是各变量完整的双精度格式的值及变量的名称,并且保留了变量的名字。
命令行中输入:

save

可以将当前Matlab工作区中的所有变量存储到当前文件夹下的MATLAB.mat文件中。

也可保留特定的变量,格式如下:

save var1 var2 var3...
save('filename','var1','var2','var3'...)

与save命令对应的为load命令,用于加载打开save命令创建的数据文件,在命令行输入:

load

可以把当前文件夹下或者Matlab的搜索路径中找到第一个MATLAB.mat中的所有变量载入到工作区,也可指定变量,格式如下:

load('filename','var1','var2','var3'...)

最后,要想删除已经存在的数据文件,则可以使用delete()函数,例子如下:

delete filename.ext

② 以其他格式导出

Matlab还支持多种工业标准文件格式和一些用户自定的文件格式。
下表列举了一些常用的数据导入和导出函数:

函数名描述
dlmread从分割文本文件中读入数据
dlmwrite将数据写入分隔文本文件
textread从文件中读入格式化文本
textscan在利用fopen()函数打开文件后,再读入格式化文本
wklread从电子表格文件中读入数据
wklwrite将数据写入电子表格文件
xlsread从电子表格文件读入
aviread从AVI文件中读入数据
imread从图像文件读入数据
imwrite将数据写入图像文件
auread从Sum声音文件读入数据
wavread从Microsoft声音文件读入数据
wavwrite将数据写入.wav文件

——————(2023/3/19 11:44 有点忙)——————


11.4 特殊操作函数

11.4.1 对位操作函数

除逻辑运算外,Matlab还提供了对一个无符号整数数据的各个位进行逻辑运算的函数。
下面列举一些例子:

format hex %数据格式限定为十六进制
max=intmax('uint16'); % 十六进制的最大数
disp(max)
a=uint16(2^9);
disp(a)
b=uint16(567);
disp(b)

result1=bitand(a,b); %按位相与操作
disp(result1)
result2=bitor(a,b); %按位相或操作
disp(result2)
result3=bitxor(a,b); %按位异或操作
disp(result3)

result4=bitcmp(a); %取反操作
disp(result4)
result5=bitget(b,5); %取前五位
disp(result5)
result6=bitset(b,5); %将前五位设置为1

format short g %还原为默认设置(短浮点型)

在这里插入图片描述

11.4.2 进制相互转换函数

Matlab提供了一些函数用于将十进制数字转换为其他进制的数字,转化的结果一字符串的形式给出
例子如下:

%% 十进制/二进制
a=dec2bin(28); %十进制转化为二进制
disp(a);
b=bin2dec(a); %二进制转化为十进制
disp(b);

%% 十进制/十六进制
a=dec2hex(1024); %十进制转为十六进制
disp(a)
b=hex2dec(a); %十六进制转为十进制
disp(b)

%% 十进制和任意进制转化
a=dec2base(52,5); %十进制转化为五进制
disp(a)
b=base2dec(a,3);
disp(b)

11.4.3 集合函数

① isequal()函数

用于比较两个集合是否相等。

a=rand(2,6);
b=randn(2,6);
isequal(a,b)

在这里插入图片描述

② unique()函数

用于去除集合中的重复元素。

s=[3 3 1;4 3 9];
unique(s)

在这里插入图片描述
③ ismember()函数

一个集合中的哪些元素是另一个集合的成员,有种并集的感觉。

a=2:8;
b=2:2:9;
ismember(a,b)

在这里插入图片描述
④ 其他函数

a=1:9;
b=2:2:9;

union(a,b) %交集
intersect(a,b) %交集
setxor(a,b) %补集
setdiff(b,a) %b有,a没有的集合

在这里插入图片描述

十二、符号数学

本章介绍如何借助Matlab的符号数学工具箱来创建和使用符号变量、符号表达式和符号矩阵。

12.1 符号对象的创建和使用

12.1.1 创建符号对象和表达式

sym类是符号数学工具箱中定义的一种新的数据类型。sym类的实例就是符号对象,符号对象是一种新的数据结构,是用于存储代表符号的字符串。在符号数学工具箱中,用符号对象来表示符号变量、符号表达式和符号矩阵。
在一个Matlab程序中,sysms()函数规定和创建符号常量、符号变量、符号函数及符号表达式,利用class()可以测试建立的操作对象为何种操作对象类型以及是否为符号对象类型。

① 函数命令sym

函数命令sym的调用格式如下:

S=sym(A)
S=sym('A',[m,n])
S=sym('A',n)
S=sys(A,'real')
S=sym(A,'positive')
S=sym(A,'clear')
S=sym(A,flag)

其中,A用来建立一个符号对象S,其类型为sym。如果A(不带单引号)是一个数字、数值矩阵或数值表达式,则输出是讲数值对象转化为符号对象。如果A(带单引号)是一个字符串,则输出是将字符串转化成符号对象。

例如:

c=sym(2);
class(c)

② 函数命令 syms

函数命令syms的调用格式如下:

syms arg1 arg2 ...
syms arg1 arg2 ... real
syms arg1 arg2 ... clear
syms arg1 arg2 ... positive

syms命令可以建立三个或多个符号对象。例子如下:

syms a b c d;
class(c)

在这里插入图片描述

12.1.2 符号对象的基本运用

在Matlab中,符号计算表达式的运算符和数值计算中的运算符及基本函数几乎完全相同。
例如,输入函数表达式 f=x²+y²+z²+1 ,代码如下:

syms x y z;
f=x^2+y^2+z^2+1;
disp(f)

在这里插入图片描述


12.2 符号表达式的操作

12.2.1 替换

符号运算工具箱提供了subexpr()和subs()两个函数,用于实现符号对象的替换。可以通过符号替换来使表达式输出形式简化,从而得到简单的表达式。

① subexpr()函数
subexpr()函数将表达式中重复出现的字符串用变量替代,调用格式如下:

%指定用变量SIGMA的值来替代符号表达式中重复出现的字符串
%替换的结果由Y返回。
[Y,SIGMA]=subexpr(S,SIGMA) %SIGMA为符号对象
[Y,SIGMA]=subexpr(S,'SIGMA') %单引号中的SIGMA为字符串

例如:将复杂的表达式进行替换,求矩阵[a b;b a]的特征值和特征向量:

syms a b W
[V,D]=eig([a b;b a]); %V:特征向量矩阵。D:特征值
[RVD,W]=subexpr([V,D],W); %对矩阵元素中的公共子表达式进行替换表达
RVD

在这里插入图片描述
② subs()函数

subs()函数可以指定符号替换符号表达式中的某一特定符号,调用格式如下:

R=subs(S) %用工作空间中的变量值替换符号表达式S中的所有符号变量。如果没有指定某符号变量的值,则返回值中该符号变量不被替换。
R=subs(S,New) %用新符号变量New替代原来符号表达式中默认变量
R=subs(S,Old,New)%用新符号变量New替代原来符号表达式S中的变量Old

例如:

syms a b;
subs(a+b,a,5)

在这里插入图片描述

12.2.2 精度计算

① digits(d)

调用该函数后的近似解的精度变成d位有效数字。d的默认值是32。调用digits()可以得到当前数值计算的精度。

② vpa(A,d)

求符号A的近似解,该近似解的有效位数由参数d来指定。如果不指定d,则按照一个digits(d)指令设置的有效位输出

③ double(A)
把符号矩阵或任意精度表示的矩阵A转换为双精度矩阵。

例如:

A=[4.220 1.360 5.800;6.370 7.401 1.0;5.000 2.30 4.901];
S=sym(A);
disp(S)
digits(5) %转化为有效位为5的任意精度矩阵
vpa(S)
double(S)  %转化为双精度型矩阵

在这里插入图片描述

12.2.3 化简

Matlab符号工具箱提供了collect()、expand()、horner()、factor()、simplify()和simple()函数来实现符号表达式的化简,下面将分别介绍这些函数。

① collect()函数

collect()函数的功能是将符号表达式中同类项合并,其调用格式如下:

%将表达式中同次幂的项合并
R=collect(S) %S可以是表达式或符号矩阵

例如:

syms x
f=(x-1)*(x-2)^2;
collect(f)

在这里插入图片描述① expand()函数

expand()函数的作用是将表达式展开。调用格式如下:

%将表达式S中的各项展开,如果S包含函数,则利用恒等变形将它写成相应的和的形式。
%多用于多项式、三角函数、指数函数、对数函数
R=expand(S)

例如:

syms x y;
h=sin(x+y);
expand(h)	

在这里插入图片描述
③ horner()函数

horner()函数的功能是将符号表达式转化成嵌套形式,调用格式如下:

%将S中的每个多项式转化成嵌套形式
R=horner(S) %S为符号多项式矩阵

例如:

syms x y;
f=x^4+x^2+x;
horner(f)

在这里插入图片描述
——————(2023/3/19 17:30)————————
④ factor()函数

factor()函数是将符号多项式进行因式分解,调用格式如下:

%X为一个多项式或多项式矩阵,系数是有理数
%那么该函数将把X表示成系数为有理数的低阶多项式分解形式
%如果不能分解则返回X本身
factor(X)

例如:将多项式 x³-y³ 进行因式分解。

syms x y
factor(x^3-y^3)

在这里插入图片描述
⑤ simplify()函数

simplify()函数根据一定规则对表达式进行简化,调用格式如下:

%该函数很强,可以应用于包含和式、方根、分数的城防、指数函数、对数函数、三角函数、Bessel函数及超越函数等的表达式,其中S可以是符号表达式矩阵
R=simplify(S)

例如化简多项式:

syms x
S=(x^2+2*x+1)/(x+1);
simplify(S)

在这里插入图片描述
⑥ simple()函数

ps:这个函数在新版本已经被淘汰
simple()函数是寻找一个符号表达式的最简形式,调用格式如下:

r=simple(S)
[r,how]=simple(S) %r是最简符号表达式,how是描述化简方法的字符串

例如:

syms x
f=cos(x)^2+sin(x)^2;
f=simple(f);
disp(f)
g=cos(3*acos(x));
[g,how]=simple(g);
disp(g)
disp(how)

12.3 符号微积分的计算

12.3.1 极限和导数的符号计算

高数中的大多数微积分问题,都能用符号计算解决。

① limit()函数

函数limit(f,x,z)用于求极限:


其调用格式如下:

limit(f) %对x求趋于0的极限
limit(f,x,a) %对x求趋于a的极限
limit(f,x,a,left) %求x左趋于a的极限
limit(f,x,a,right) %求x右趋于a的极限

例如求极限:
在这里插入图片描述

l=limit((2-3/x)^2,x,1);
l

在这里插入图片描述

② diff()函数

diff()函数用于函数求微分,其调用格式如下:

diff(S,'v') % 将符号v视作变量,对符号表达式或符号矩阵S求取微分
diff(S,n) %将S中的默认变量进行n阶微分运算,默认变量可以用findsym()函数确定。
diff(S,'v',n) %将v视作变量,对符号表达式或矩阵S进行n阶微分运算

例子如下:

syms t x
g=[2*x t^2;t*cos(x) exp(x)];
diff(g,'x')

在这里插入图片描述

12.3.2 级数求和与积分的符号计算

高数的知识,求积分的过程就是累计和的过程,在介绍符号积分之前要先了解一下级数求和。

① symsum()函数
symsum()函数用于对表达式进行求和。其调用格式如下:

r=symsum(s,a,b) %求符号表达式s中默认变量从a到b时的有限和,s为级数的通项公式
r=symsum(s,v,a,b) %求符号表达式s中变量v从a变到b时的有限和

例子如下:
求1+1/2²+1/3²+…+1/k² 和 1+x+x²+…x^k的和

syms x k
s1=symsum(1/k^2,1,10);
s2=symsum(1/k^2,1,inf);
s3=symsum(x^k,k,0,inf);
disp(s1)
disp(s2)
disp(s3)

在这里插入图片描述
② int()函数

int()函数用于求符号表达式的积分,调用格式如下:

R=int(S) %用默认变量求S的不定积分
R=int(S,v) %用符号v求符号表达式的不定积分
R=int(S,a,b) %默认变量a到b的定积分
R=int(S,v,a,b) %v从a到b的定积分

例子如下:

syms t x
g=[2*x t^2;t*cos(x) exp(x)];
s1=int(g);
s2=int(g,'t');
s3=int(g,sym('a'),sym('b'));
disp(s1)
disp(s2)
disp(s3)

在这里插入图片描述


12.4 符号计算

12.4.1 符号矩阵的加减运算

例子如下:

syms a b
A=[a b;b a];
B=[2*a b;b 2*a];
A+B

在这里插入图片描述

12.4.2 对矩阵求若尔当典范形

使用jordan()函数,其调用函数如下:

J=jordan(A) %计算A的若尔当典范形
[V,J]=jordan(A) %V为相应的变换矩阵

例子如下:

A=sym([1 2 -3;1 2 5;2 4 -5]);
[V,J]=jordan(A);

在这里插入图片描述

12.4.3 求线性方程组的解
syms x y z
a=x^2+2*x+1;
b=x+3*z-4;
c=y*z+1;
[x,y,z]=solve(a,b,c);
[x,y,z]

在这里插入图片描述

————————(2023/3/19 22:36)————————


十三、矩阵计算

13.1 线性方程组

13.1.1 直接法求解线性方程组

① “\”运算符求解

在Matlab中用运算符 “\” 求解线性系统,这个运算符的功能很强大,直接利用该运算符即可求线性方程组的解。如下:

% A是nxm矩阵,b和x是有n个元素的列向量。
x=A\b

求方程组的 一个特解

2x1+x2-x3-x4=3
x1-x2-3x3+4x4=4
x1+5x2-2x3-4x4=1

A=[2 1 -1 -1;
    1 -1 -3 4;
    1 5 -2 -4];
B=[3 4 1]';
X=A\B;
disp(X)

在这里插入图片描述

② 借助逆矩阵求解

对于线性方程组AX=b,只要矩阵A非奇异,就可以通过矩阵A的逆矩阵求解,即x=A﹣¹b。使用inv()函数求逆矩阵,或者直接对矩阵求-1次方即A^-1。
例子如下:
求方程的解:

x1+x2=1
2x1+4x2=2

A=[1 1;2 4];
b=[1;2];
x=inv(A)*b;
x

在这里插入图片描述

13.1.2 间接法求解线性方程组

间接法是通过LU分解将矩阵进行转化,再进行计算,可大大提高运算速度。

LU分解可把任意方阵分解为下三角矩阵的基本变换形式和上三角矩阵的乘积。即A=LU,L为下三角阵,U为上三角阵。线性方程组AX=b就变成了LU*X=b,所以X=U(L\b)。

Matlab提供了LU分解函数,调用格式如下:

[L,U]=lu(A)

例子如下:求解方程组的一个特解:

x1+x2-x3=6
2x1-x2+3x3=7
4x1+5x2=8

A=[1 1 -1;2 -1 3; 4 5 0];
B=[6 7 8]';
[L,U]=lu(A);
X=U\(L\B);
X

在这里插入图片描述

13.2 矩阵函数

13.2.1 求矩阵的特征值和特征向量

在Matlab中用函数eig()求特征值和特征向量,其调用格式如下:

d=eig(A)%返回矩阵A的所有特征值
[V,D]=eig(A)%返回特征值和特征向量,AV=VD
[V,D]=eig(A,'nobalance') %输入数值很小时用这个
d=eig(A,B) % 返回A,B的广义特征值
[V,D]=eig(A,B) %返回广义特征值特征向量
[V,D]=eig(A,B,flag)    %flag='chol'时计算广义特征值通过B的Cholesky分解进行;flag='qz'时,采用QZ分解

例子如下:

A=[1 2 3;4 5 6;7 8 9];
[V D]=eig(A)

在这里插入图片描述

13.2.2 矩阵函数汇总

见下表:

函数或运算符描述
/和\矩阵的左除和右除,用于求解线性方程组
accumarray(ind,val)利用累加创建数组
A^n求A的n次幂,A^3=AAA
balance(A)将A进行缩放提高特征值的精度
[V,D]=cdf2rdf(V,D)将复数对角矩阵转化为两个实数对角矩阵
chol(A)将A进行Cholesky因式分解
cholinc(A,DropTol) cholinc(A,Options)将A进行不完全Cholesky分解
choluodate(R,X)Cholesky因式分解的秩1升级
cond(A)利用奇异值分解求A的条件数
condest(A)求A的范数1的条件估计
[V,D,s]=condeig(A)求的与重复特征向量相对应的条件数
det(A)求矩阵的行列式
dmperm(A)对A进行Dulmage-Mendelsohn排列
eig(A)求矩阵的特征值和特征向量
[V,D]=eig(A)求A的特征向量矩阵V和特征对角矩阵D
expm(A)矩阵指数函数
funm(A)矩阵通用函数
gsvd(A,B)求A的广义奇异值
[U,V,X,C,S]=gsvd(A)对A进行广义奇异值分解
hess(A)对A的Hessenburg标准型
inv(A)求A的逆
limsolve(A,y,options)快速求解Ax=y,其中A的结构由options给定
logm(A)矩阵对数运算
lscov(A,y,V)已知数据的协方差矩阵(V),求线性方程组的最小二乘解
lsqnonneg(A,y)求线性方程组的非负最小二乘解
[L,U,P]=lu(A)对矩阵A进行LU分解
minres(A,y)利用最小残差法求线性方程组的解
norm(A,type)求矩阵或向量(由type指定)的范数
null(A)求A的零空间
orth(A)求A的正交空间
pinv(A)求A的伪逆矩阵
planerot(X)对X进行平面旋转
poly(A)求A的特征多项式
polyeig(A0,A1,…)多项式的特征值解
polyvalm(A)求A的矩阵多项式
qr(A)对A进行正交三角分解
qrdelete(Q,R,J)从QR分解中删除行或列
qrinsert(Q,R,J,X)从QR分解中插入行或列
qrupdate(Q,R,U,V)Cholesky因式分解的秩1升级
qz(A,B)广义特征值问题求解
rank(A)利用奇异值分解求A的秩
rcond(A)对A进行LAPACK倒数条件估计
rref(A)将矩阵A变换为行阶梯形
rsf2csf(A)将A由实块对角阵转化为复块对角阵
schur(A)对A进行Schur分解
sqrtm(A)求A的平方根
subspace(A,B)求两个子空间A和B之间的角度
svd(A)求矩阵A的奇异值
[U,S,V]=svd(A)对A进行奇异值分解
trace(A)求矩阵A的迹(对角元素的和)

下面列举一些函数的用法:

A=[1 2 3;4 5 6;7 8 9];
r1=rank(A); %行列式的值
r2=trace(A); %矩阵的迹
disp(r1)
disp(r2)

在这里插入图片描述


13.3 非线性矩阵的运算

介绍有关非线性矩阵的求解过程,对于非线性矩阵运算函数如下表:

函数名功能描述
expm矩阵指数运算
logm矩阵对数运算
sqrtm矩阵开平方运算
funm一般非线性矩阵运算

————————(2023/3/20/ 13:58)————————

十四、数理统计

14.1 概率分布

Matlab提供了5个函数分别是概率密度函数、累积分布函数、逆累积分布函数、随机产生器与方差计算函数。下面分别介绍几种常见函数的使用。

14.1.1 常用概率分布函数

① 概率密度函数——pdf()函数

其调用格式如下:

Y=pdf('Name',X,A1,A2,A3)
  • Name为特定的分布名称,首字母必须大写;
  • X为分布函数自变量取值矩阵;
  • A1、A2、A3分别为相应分布的参数值;
  • Y存放结构,为概率密度矩阵。

例如:计算一个正态分布的概率密度分布值,代码如下:

y=pdf('Normal',-4:4,0,1);
disp(y)

在这里插入图片描述② 累积分布函数——cdf()

其调用格式如下:

p=cdf('Name',X,A1,A2,A3)

其中的参数设置与pdf()函数相同。

例如:计算一个正态分布的累积分布值。

y=cdf('Normal',-4:4,0,1);
disp(y)

在这里插入图片描述

14.1.2 常用的分布函数列表
分布名分布函数
正态分布[m,v]=normstat(mu,sigma)
超几何分布[mn,v]=hygestat(M,K,N)
几何分布[m,v]=geostat§
Gamma分布[m,v]=gamstat(A,B)
F分布[m,v]=fstat(v1,v2)
指数分布[m,v]=expstat(mu)
Chi-squrare分布[m,v]=chi2stat(nu)
二项分布[m,v]=binostat(N,P)
连续均匀分布[m,v]=unistat(A,B)
离散均匀分布[m,v]=unidstat(N)
t分布[m,v]=tstat(nu)
泊松分布[m,v]=poisstat(lambda)

——————(2023/3/21 21:05 )—————————


十五、多项式

15.1 多项式的运算

15.1.1 多项式的表示

Matlab用行向量来表示多项式,将多项式的系数按照降幂次存放在行向量中。
如:描述一个6次幂多项式,代码如下:

poly2sym([1 -2 0 8 0 6 -8])

在这里插入图片描述若是计算上述多项式在x=1处的值:

val= polyval([1 -2 0 8 0 6 -8],1);

在这里插入图片描述

15.1.2 多项式的加减法

Matlab没有提供专门的函数来执行多项式的加法。如果两个多项式向量长度相等可以直接将两个多项式向量相加。如:

a=[0 1 2 1];
b=[3 0 1 1];
c=a+b;
d=a-b
poly2sym(c)
poly2sym(d)

在这里插入图片描述

15.1.3 多项式乘除法

由于多项式的乘法实际上就是多项式系数向量之间的卷积运算,这样可以直接使用Matlab提供的卷积函数conv()来完成多项式的乘法,其调用格式如下:

w=conv(u,v) %u和v的卷积,代数上相当于多项式u乘上多项式v

例子如下:

计算x²+2x+1和3x²+x+1的乘积

a=[1 2 1];
b=[3 1 1];
c=conv(a,b);

在这里插入图片描述
多项式除法由deconv()函数实现,调用格式如下:

[q,r]=deconv(v,u) %实现解卷积的操作,实现多项式v除以多项式u,得到商q和余多项式r

例子如下:

计算3x^3+x+1除以x²+2x+1

a=[3 0 1 1];
b=[1 2 1];
[q,r]=deconv(a,b)

在这里插入图片描述


15.2 多项式的根

求多项式的根,即多项式等于0的解。在Matlab中使用roots()来求多项式的根,根通常用列向量表示。调用格式如下:

r=roots(c) %返回多项式c的所有根r

例如:

求x²+2x+1的根

p=[1 2 1];
r=roots(p)

在这里插入图片描述
Matlab还提供了通过多项式的根反向构建相应的多项式,实现函数为poly()函数从一个根向量构建一个多项式向量。调用格式为:

p=poly(r) %r为多项式的所有根,p为多项式的行向量形式
p=poly(A) %A为方阵,根据A的特征值求特征多项式p

例子如下:

p=poly([-1 -1])

在这里插入图片描述


15.3 多项式部分分式展开

函数residue()可以将多项式之比用部分分式展开,也可以将一个部分分式表示为多项式之比。调用格式如下:

[r,p,k]=residue(b,a)

解释下上述参数的意思:求b/a的部分展开式,返回值r是部分分式的柳树,p是部分分式的几点,k是直接项(余数)。如果多项式a没有重根,其格式如下:

在这里插入图片描述其中向量r,p的长度和a,b的长度有以下关系:

length(a)-1=length(r)=length(p)

当向量b的长度小于a时,向量k中没有元素,否则应满足以下关系:

length(k)=length(b)-length(a)+1
[b,a]=residue(r,p,k)

例子如下:

求x²+2x+1与多项式3x^3+x+1之比的部分展开式:

a=[3 0 1 1];
b=[1 2 1];
[r,p,k]=residue(b,a)

在这里插入图片描述


15.4 多项式的导数和积分

对于多项式可以使用polyder()来计算多项式的导数,其调用格式如下:

k=polyder(p) %返回多项式p的导数
k=polyder(a,b) %返回多项式a与多项式b乘积的导数
[q,d]=polyder(b,a) %返回多项式a除以b的商数的导数,并以q/d格式表示

例子如下:

a=[3 0 1 1];
h=polyder(a)

在这里插入图片描述在Matlab中使用polyint()来计算多项式的积分,调用格式如下:

polyint(p,k) %返回多项式p的积分,设积分的常数项为k
polyint(p) %设积分的常数项为0

例子如下:

polyint([9 0 1],1)

在这里插入图片描述


15.5 多项式曲线拟合

函数polyfit()采用最小二乘法对给定数据进行多项式拟合,最后给出拟合多项式的系数,调用格式如下;

p=polyfit(x,y,n) %采用n次多项式p来拟合x和y从而使p(x)与y的最小均方差最小

例如

x=(0:0.1:2.5)'; %拟合用的x
y=erf(x);
p=polyfit(x,y,6); %六次多项式拟合
f=polyval(p,x);
figure(1)
plot(x,y,'o',x,f,'-')
x=(0:0.1:5)'; %测试用的x
y=erf(x);
f=polyval(p,x);
figure(2)
plot(x,y,'o',x,f,'-')
axis([0 5 0 2])

在这里插入图片描述在这里插入图片描述
———————(2023/3/20 20:40 看论文去了)———————


十六、微积分

16.1 微分

16.1.1 导数

Matlab提供了一个函数diff()来近似计算一个描述了某个该函数的数据列表的近似导数。diff()函数实际上是通过计算数组中相邻元素之间的差值来估算导数的。其调用函数如下:

Y=diff(X) %X 是矩阵或者一维向量
Y=diff(X,n) %n是求导次数
Y=diff(X,n,dim) %dim是X的维数

例如:

x=[0,1,2,3,4,5,6];
diff(x)

在这里插入图片描述
求 y=cos(x) 的导数:

x=linspace(0,2*pi);
y=cos(x);
dydx=diff(y)/(x(2)-x(1));
xx=x(2:end);
plot(x,y,xx,dydx)
16.1.2 梯度

求梯度的函数为gradient(),其调用格式如下:

FX=gradient(F) %F为一维向量,返回的值FX是F的梯度
[FX,FY]=gradient(F) %F是一个矩阵,FX和FY分别对应F对X和Y的偏导数

求 f(x-y)e^(-x²-y²) 的梯度

v=-2:0.2:2;
[x,y]=meshgrid(v);
z=exp(-x.^2-y.^2);
[Fx,Fy]=gradient(z);
contour(v,v,z),hold on %绘制等值线
quiver(v,v,Fx,Fy), hold off %绘制箭头梯度图,箭头越长,梯度越大

在这里插入图片描述

16.2 积分

Matlab提供了三个函数:integral()、dblquad()和triplequad()来求数值积分。

16.2.1 integral()函数——一重积分

调用格式如下:

q=integral(fun,a,b) %fun是函数句柄,a和b是x下限和上限

例子如下:
计算:∫(0->2) (x^2-2)dx

fun=@(x) x.^2-2;
Q=integral(fun,0,2)

在这里插入图片描述

16.2.2 integral2()函数——二重积分

integral2()函数的调用格式如下:

q=integral2(fun,xmin,xmax,ymin,ymax)

例如:

fun=@(x,y) x.^2+y.^2;
Q=integral2(fun,0,4,0,2);

在这里插入图片描述

16.2.3 integral3()函数——三重积分

其调用格式如下:

q=integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值