Matlab笔记.docx
- 文档编号:10291940
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:33
- 大小:114.87KB
Matlab笔记.docx
《Matlab笔记.docx》由会员分享,可在线阅读,更多相关《Matlab笔记.docx(33页珍藏版)》请在冰豆网上搜索。
Matlab笔记
MATLAB笔记
作者:
晏江
1、用于取整的函数有fix、floor、ceil、round,要注意它们的区别,
Ceil向正无穷大方向取整,floor向负无穷大方向取整,round向最接近的整数取整fix负数向下取整、整数向上取整
rem与mod函数的区别。
rem(x,y)和mod(x,y)要求x,y必须为相同大小的实矩阵或为标
量。
2、数据输出时用户可以用format命令设置或改变数据输出格式。
format命令的格式为:
format格式符
其中格式符决定数据的输出格式。
3、linspace(a,b,n)
其中a和b是生成向量的第一个和最后一个元素,n是元素总数。
4、在MATLAB中,矩阵元素按列存储,先第一列,再第二列,依次类推。
例如
A=[1,2,3;4,5,6];
A(3)
ans=
2
显然,序号(Index)与下标(Subscript)是一一对应的,以m×n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。
其相互转换关系也可利用sub2ind和ind2sub函数求得。
(1)建立矩阵A。
A=[4,-65,-54,0,6;56,0,67,-45,0]
(2)找出大于4的元素的位置。
find(A>4)结果是索引
[i,j]=ind2sub(size(A),find(A>4))将索引转化为下标
5、常用的产生通用特殊矩阵的函数有:
zeros:
产生全0矩阵(零矩阵)。
(1)建立一个3×3零矩阵。
zeros(3),
(2)建立一个3×2零矩阵。
zeros(3,2)
ones:
产生全1矩阵(幺矩阵)。
eye:
产生单位矩阵。
rand:
产生0~1间均匀分布的随机矩阵。
randn:
产生均值为0,方差为1的标准正态分布随机矩阵。
例:
(1)在区间[20,50]内均匀分布的5阶随机矩阵。
x=20+(50-20)*rand(5)
(2)均值为0.6、方差为0.1的5阶正态分布随机矩阵。
y=0.6+sqrt(0.1)*randn(5)
6、reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵。
7、pascal(n)生成一个n阶帕斯卡矩阵
例:
求(x+y)5的展开式。
在MATLAB命令窗口,输入命令:
pascal(6)
矩阵次对角线上的元素1,5,10,10,5,1即为展开式的系数。
8、
(1)提取矩阵的对角线元素
设A为m×n矩阵,diag(A)函数用于提取矩阵A主对角线元素,产生一个具有min(m,n)个元素的列向量。
diag(A)函数还有一种形式diag(A,k),其功能是提取第k条对角线的元素。
(2)构造对角矩阵
设V为具有m个元素的向量,diag(V)将产生一个m×m对角矩阵,其主对角线元素即为向量V的元素。
diag(V)函数也有另一种形式diag(V,k),其功能是产生一个n×n(n=m+)对角阵,其第k条对角线的元素即为向量V的元素。
9、
(1)上三角矩阵
函数triu(A)求矩阵A的上三角阵。
triu(A,k)是求矩阵A的第k条对角线以上的元素;
(2)下三角矩阵
tril(A)提取矩阵A的下三角矩阵。
tril(A,k)是求矩阵A的第k条对角线以下的元素;
(3)矩阵的转置转置运算符是单撇号(‘);
(4)矩阵的旋转rot90(A,k)将矩阵A旋转90º的k倍,当k为1时可省略;
(5)矩阵的左右翻转fliplr(A);fliplr(A)=rot90(A,2)
(6)矩阵的上下翻转flipud(A);
(7)矩阵的逆方阵A的逆矩阵可调用函数inv(A);
(8)求方阵A所对应的行列式的值的函数是det(A);
(9)矩阵的秩求矩阵秩的函数是rank(A);
(10)矩阵的迹求矩阵的迹的函数是trace(A)。
10、建立一个字符串向量,然后对该向量做如下处理:
ch='ABc123d4e56Fg9';
subch=ch(1:
5)%取子字符串
revch=ch(end:
-1:
1)%将字符串倒排
k=find(ch>='a'&ch<='z');%找小写字母的位置
ch(k)=ch(k)-('a'-'A');%将小写字母变成相应的大写字母
char(ch)
length(k)%统计小写字母的个数
eval(t)%eval(t)其中t为字符串。
作用是把字符串的内容作为对应的MATLAB语句来执行。
11、矩阵操作
稀疏矩阵
1.将完全存储方式转化为稀疏存储方式
函数A=sparse(S)将矩阵S转化为稀疏存储方式的矩阵A。
当矩阵S是稀疏存储方式时,则函数调用相当于A=S。
sparse函数还有其他一些调用格式:
sparse(m,n):
生成一个m×n的所有元素都是0的稀疏矩阵。
sparse(u,v,S):
u,v,S是3个等长的向量。
S是要建立的稀疏矩阵的非0元素,u(i)、v(i)分别是S(i)的行和列下标,该函数建立一个max(u)行、max(v)列并以S为稀疏元素的稀疏矩阵。
此外,还有一些和稀疏矩阵操作有关的函数。
例如
[u,v,S]=find(A):
返回矩阵A中非0元素的下标和元素。
这里产生的u,v,S可作为sparse(u,v,S)的参数。
full(A):
返回和稀疏存储矩阵A对应的完全存储方式矩阵。
2.产生稀疏存储矩阵
B=spconvert(A)
其中A为一个m×3或m×4的矩阵,其每行表示一个非0元素,m是非0元素的个数,A每个元素的意义是:
(i,1)第i个非0元素所在的行。
(i,2)第i个非0元素所在的列。
(i,3)第i个非0元素值的实部。
(i,4)第i个非0元素值的虚部,若矩阵的全部元素都是实数,则无须第四列。
该函数将A所描述的一个稀疏矩阵转化为一个稀疏存储矩阵。
A=[2,2,1;3,1,-1;4,3,3;5,3,8;6,6,12];
B=spconvert(A)
结果:
B=
(3,1)-1
(2,2)1
(4,3)3
(5,3)8
(6,6)12
4.单位矩阵的稀疏存储
函数eye产生一个完全存储方式的单位矩阵。
speye(m,n)返回一个m×n的稀疏存储单位矩阵。
5.求矩阵的最大值和最小值
(1)max(A):
返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值。
(2)[Y,U]=max(A):
返回行向量Y和U,Y向量记录A的每列的最大值,U向量记录每列最大值的行号。
(3)max(A,[],dim):
dim取1或2。
dim取1时,该函数和max(A)完全相同;dim取2时,该函数返回一个列向量,其第i个元素是A矩阵的第i行上的最大值。
求最小值的函数是min,其用法和max完全相同。
(4)两个向量或矩阵对应元素的比较
U=max(A,B):
A,B是两个同型的向量或矩阵,结果U是与A,B同型的向量或矩阵,U的每个元素等于A,B对应元素的较大者。
(2)U=max(A,n):
n是一个标量,结果U是与A同型的向量或矩阵,U的每个元素等于A对应元素和n中的较大者。
min函数的用法和max完全相同。
6.求和与求积
sum(X):
返回向量X各元素的和。
prod(X):
返回向量X各元素的乘积。
sum(A):
返回一个行向量,其第i个元素是A的第i列的元素和。
prod(A):
返回一个行向量,其第i个元素是A的第i列的元素乘积。
sum(A,dim):
当dim为1时,该函数等同于sum(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的各元素之和。
prod(A,dim):
当dim为1时,该函数等同于prod(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的各元素乘积。
7.平均值和中值
mean(X):
返回向量X的算术平均值。
median(X):
返回向量X的中值。
mean(A):
返回一个行向量,其第i个元素是A的第i列的算术平均值。
median(A):
返回一个行向量,其第i个元素是A的第i列的中值。
mean(A,dim):
当dim为1时,该函数等同于mean(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的算术平均值。
median(A,dim):
当dim为1时,该函数等同于median(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的中值。
8.累加和与累乘积
cumsum(X):
返回向量X累加和向量。
cumprod(X):
返回向量X累乘积向量。
cumsum(A):
返回一个矩阵,其第i列是A的第i列的累加和向量。
cumprod(A):
返回一个矩阵,其第i列是A的第i列的累乘积向量。
cumsum(A,dim):
当dim为1时,该函数等同于cumsum(A);当dim为2时,返回一个矩阵,其第i行是A的第i行的累加和向量。
cumprod(A,dim):
当dim为1时,该函数等同于cumprod(A);当dim为2时,返回一个向量,其第i行是A的第i行的累乘积向量。
9、结构矩阵的建立与引用
(1)具体格式为:
结构矩阵名.成员名=表达式
其中表达式应理解为矩阵表达式。
(2)结构成员的修改
可以根据需要增加或删除结构的成员。
例如要给结构矩阵a增加一个成员x4,可给a中任意一个元素增加成员x4:
a
(1).x4=‘410075’;
但其他成员均为空矩阵,可以使用赋值语句给它赋确定的值。
要删除结构的成员,则可以使用rmfield函数来完成。
例如,删除成员x4:
a=rmfield(a,‘x4’);
10.标准方差与相关系数
(1)Y=std(A,flag,dim)
其中dim取1或2。
当dim=1时,求各列元素的标准方差;当dim=2时,则求各行元素的标准方差。
flag取0或1,当flag=0时,按σ1所列公式计算标准方差,当flag=1时,按σ2所列公式计算标准方差。
缺省flag=0,dim=1。
(2)corrcoef函数,可以求出数据的相关系数矩阵。
corrcoef函数的调用格式为:
corrcoef(X):
返回从矩阵X形成的一个相关系数矩阵。
此相关系数矩阵的大小与矩阵X
一样。
它把矩阵X的每列作为一个变量,然后求它们的相关系数。
corrcoef(X,Y):
在这里,X,Y是向量,它们与corrcoef([X,Y])的作用一样。
11.排序
sort(X),函数返回一个对X中的元素按升序排列的新向量。
sort函数也可以对矩阵A的各列或各行重新排序,其调用格式为:
[Y,I]=sort(A,dim)
其中dim指明对A的列还是行进行排序。
若dim=1,则按列排;若dim=2,则按行排。
Y是排序后的矩阵,而I记录Y中的元素在A中位置。
12.isprime(A)测出每个整数是否为质数,最后用下标提取的方式将这些质数提取出来.
如:
>>A=1:
1000;B=A(isprime(A))
结果为1000以内的所有质数.
13.匪名函数的定义(版本Matlab7.0)
a=2;b=3;f=@(x,y)a*x.^2+b*y.^2;
>>f(2,2)
ans=
20
14.gcd()求取两个整数的最大公约数,lcm()求取最小公倍数
数据插值
1.一维数据插值
在MATLAB中,实现这些插值的函数是interp1,其调用格式为:
Y1=interp1(X,Y,X1,'method')
函数根据X,Y的值,计算函数在X1处的值。
X,Y是两个等长的已知向量,分别描述采样点和样本值,X1是一个向量或标量,描述欲插值的点,Y1是一个与X1等长的插值结果。
method是插值方法,允许的取值有‘linear’(直线插值)、‘nearest’、‘cubic’、‘spline’(3次样条插值)。
注意:
X1的取值范围不能超出X的给定范围,否则,会给出“NaN”错误。
例:
某观测站测得某日6:
00时至18:
00时之间每隔2小时的室内外温度(℃),用3次样条插值分别求得该日室内外6:
30至17:
30时之间每隔2小时各点的近似温度(℃)。
设时间变量h为一行向量,温度变量t为一个两列矩阵,其中第一列存放室内温度,第二列储存室外温度。
命令如下:
h=6:
2:
18;
t=[18,20,22,25,30,28,24;15,19,24,28,34,32,30]';
XI=6.5:
2:
17.5
YI=interp1(h,t,XI,‘spline’)%用3次样条插值计算
2.二维数据插值
二维插值问题的函数interp2,其调用格式为:
Z1=interp2(X,Y,Z,X1,Y1,'method')
其中X,Y是两个向量,分别描述两个参数的采样点,Z是与参数采样点对应的函数值,X1,Y1是两个向量或标量,描述欲插值的点。
Z1是根据相应的插值方法得到的插值结果。
method的取值与一维插值函数相同
同样,X1,Y1的取值范围不能超出X,Y的给定范围,否则,会给出“NaN”错误。
3.曲线拟合
在MATLAB中,用polyfit函数来求得最小二乘拟合多项式的系数,再用polyval函数按所得的多项式计算所给出的点上的函数近似值。
polyfit函数的调用格式为:
[P,S]=polyfit(X,Y,m)
函数根据采样点X和采样点函数值Y,产生一个m次多项式P及其在采样点的误差向量S。
其中X,Y是两个等长的向量,P是一个长度为m+1的向量,P的元素为多项式系数。
程序的暂停
暂停程序的执行可以使用pause函数,其调用格式为:
pause(延迟秒数)
如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。
若要强行中止程序的运行可使用Ctrl+C命令。
switch语句
例3-6某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示):
price<200没有折扣
200≤price<5003%折扣
500≤price<10005%折扣
1000≤price<25008%折扣
2500≤price<500010%折扣
5000≤price14%折扣
输入所售商品的价格,求其实际销售价格。
程序如下:
price=input('请输入商品价格');
switchfix(price/100)
case{0,1}%价格小于200
rate=0;
case{2,3,4}%价格大于等于200但小于500
rate=3/100;
casenum2cell(5:
9)%价格大于等于500但小于1000
rate=5/100;
casenum2cell(10:
24)%价格大于等于1000但小于2500
rate=8/100;
casenum2cell(25:
49)%价格大于等于2500但小于5000
rate=10/100;
otherwise%价格大于等于5000
rate=14/100;
end
price=price*(1-rate)%输出商品实际销售价格
3.try语句
语句格式为:
try
语句组1
catch
语句组2
end
try语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。
例3-7矩阵乘法运算要求两矩阵的维数相容,否则会出错。
先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。
程序如下:
A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];
try
C=A*B;
catch
C=A.*B;
end
C
lasterr%显示出错原因
例3-16利用函数的递归调用,求n!
。
n!
本身就是以递归的形式定义的:
显然,求n!
需要求(n-1)!
,这时可采用递归调用。
递归调用函数文件factor.m如下:
functionf=factor(n)
ifn<=1
f=1;
else
f=factor(n-1)*n;%递归调用求(n-1)!
end
函数参数的可调性
变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。
nargin用法示例。
函数文件examp.m:
functionfout=charray(a,b,c)
ifnargin==1
fout=a;
elseifnargin==2
fout=a+b;
elseifnargin==3
fout=(a*b*c)/2;
end
命令文件mydemo.m:
x=[1:
3];
y=[1;2;3];
examp(x)
examp(x,y')
examp(x,y,3)
全局变量与局部变量
全局变量用global命令定义,格式为:
global变量名
结构数据
1.结构矩阵的建立与引用
结构矩阵的元素可以是不同的数据类型,它能将一组具有不同属性的数据纳入到一个统一的变量名下进行管理。
建立一个结构矩阵可采用给结构成员赋值的办法。
具体格式为:
结构矩阵名.成员名=表达式
其中表达式应理解为矩阵表达式。
2.结构成员的修改
可以根据需要增加或删除结构的成员。
例如要给结构矩阵a增加一个成员x4,可给a中任意一个元素增加成员x4:
a
(1).x4=‘410075’;
但其他成员均为空矩阵,可以使用赋值语句给它赋确定的值。
要删除结构的成员,则可以使用rmfield函数来完成。
例如,删除成员x4:
a=rmfield(a,‘x4’);
3.关于结构的函数
除了一般的结构数据的操作外,MATLAB还提供了部分函数来进行结构矩阵的操作。
单元数据
1.单元矩阵的建立与引用
建立单元矩阵和一般矩阵相似,只是矩阵元素用大括号括起来。
可以用带有大括号下标的形式引用单元矩阵元素。
例如b{3,3}。
单元矩阵的元素可以是结构或单元数据。
可以使用celldisp函数来显示整个单元矩阵,如celldisp(b)。
还可以删除单元矩阵中的某个元素。
2.关于单元的函数
MATLAB还提供了部分函数用于单元的操作。
4.1文件的打开与关闭
4.1.1文件的打开
fopen函数的调用格式为:
fid=fopen(文件名,打开方式)
其中文件名用字符串形式,表示待打开的数据文件。
常见的打开方式有:
‘r’表示对打开的文件读数据,‘w’表示对打开的文件写数据,‘a’表示在打开的文件末尾添加数据。
fid用于存储文件句柄值,句柄值用来标识该数据文件,其他函数可以利用它对该数据文件进行操作。
4.1.2文件的关闭
文件在进行完读、写等操作后,应及时关闭。
关闭文件用fclose函数,调用格式为:
sta=fclose(fid)
该函数关闭fid所表示的文件。
sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回–1。
4.2文件的读写操作
4.2.1二进制文件的读写操作
1.读二进制文件
fread函数可以读取二进制文件的数据,并将数据存入矩阵。
其调用格式为:
[A,COUNT]=fread(fid,size,precision)
其中A用于存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,size为可选项,若不选用则读取整个文件内容,若选用则它的值可以是下列值:
(1)N表示读取N个元素到一个列向量。
(2)Inf表示读取整个文件。
(3)[M,N]表示读数据到M×N的矩阵中,数据按列存放。
precision代表读写数据的类型
2.写二进制文件
fwrite函数按照指定的数据类型将矩阵中的元素写入到文件中。
其调用格式为:
COUNT=fwrite(fid,A,precision)
其中COUNT返回所写的数据元素个数,fid为文件句柄,A用来存放写入文件的数据,precision用于控制所写数据的类型,其形式与fread函数相同。
例4-1建立一数据文件magic5.dat,用于存放5阶魔方阵。
程序如下:
fid=fopen(‘magic5.dat’,‘w’);
cnt=fwrite(fid,magic(5),‘int32’);
fclose(fid);
4.2.2文本文件的读写操作
1.读文本文件
fscanf函数的调用格式为:
[A,COUNT]=fscanf(fid,format,size)
其中A用以存放读取的数据,COUNT返回所读取的数据元素个数。
fid为文件句柄。
format用以控制读取的数据格式,由%加上格式符组成,常见的格式符有d,f,c,s。
size为可选项,决定矩阵A中数据的排列形式。
%e,%f,%g浮点型(Floating-pointnumbers)
%i有符号的整型(Signedinteger)
%o有符号的八进制的整型(Signedoctalinteger)
%s连续的不带空格的字符串(Aseriesofnon-white-spacecharacters)
%u十进的整型(Signeddecimalinteger)
%x十六进制的整型(Signedhexadecimalinteger)
2.写文本文件
fprintf函数的调用格式为:
COUNT=fprintf(fid,format,A)
其中A存放要写入文件的数据。
先按format指定的格式将数据矩阵A格式化,然后写入到fid所指定的文件。
格式符与fscanf函数相同。
4.3数据文件定位
MATLAB提供了与文件定位操作有关的函数fseek和ftell。
fseek函数用于定位文件位置指针,其调用格式为:
status=fseek(fid,offset,origin)
其中fid为文件句柄,offset表示位置指针相对移动的字节数,origin表示位置指针移动的参照位置。
若定位成功,status返回值为0,否则返回值为–1。
ftell函数返回文件指针的当前位置,其调用格式为:
position=ftell(fid)
返回值为从文件开始到指针当前位置的字节数。
若返回值为–1表示获取文件当前位置失败。
.xls文件的读取
a=xlsread('F:
\互评.xls','C4:
E6')
多项式求根
roots函数用于求多项式的全部根,其调用格式为:
x=roots(P)
其中P为多项式的系数向量,求得的根赋给向量x,即x
(1),x
(2),…,x(n)分别代表多项式的n个根。
求多项式x4+8x3-10的根。
命令如下:
A=[1,8,0,0,-10];
x=roots(A)
若已知多项式的全部根,则可以用poly函数建立起该多项式,其调用格式为:
P=poly(x)
若x为具有n个元素的向量,则poly(x)建立以x为其根的多项式,且将该多项式的系数赋给向量P。
二维数据曲线图
c=sym('-0.1066*t^2+6.75*t+89.51');
ezplot(c,[0,50])
plot(x,y)其中x和y为长度相同的向量,分别用于存储x坐标和y坐标数据。
例5-1在0≤x≤2区间内,绘制曲线
y=2e-0.5xcos(4πx)
程序如下:
holdon/off命令控制是保持原有图形还是刷新原有图形
grido
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 笔记