matlab学习笔记.docx
《matlab学习笔记.docx》由会员分享,可在线阅读,更多相关《matlab学习笔记.docx(15页珍藏版)》请在冰点文库上搜索。
matlab学习笔记
细胞矩阵:
比如
A={1,[2,3;4,5];sym('a'),'hello'}
于是A就是一个细胞矩阵,细胞矩阵可以看成是结构数组的推广。
它里面的元素可以是任意类型的变量,而不必是统一的类型。
细胞数组A中第i行第j列元素的表示方法是A{i,j}
例如
A{1,2}=A{1,2}'
A(1,2)得到的还是一个细胞数组,只不过他的元素只有一个,即A{1,2}
通过这种方法我们可以像对待普通数组一样提取细胞数组的某些元素构成新的数组,例如
B=A(1,:
)
pow2(x,f)求x*2
exp(x)求e
工作空间中驻留的变量查看:
who
whos
不使用format,默认输出的是short格式
数值型数据,默认的是double型,例如:
a=pi,输出a=3.1416;
A可以转化为uint8(无符号整型,8位),例如:
b=uint8(a),则输出b=3。
(a的类型不变)
用class函数查看每个变量的类型。
Matlab中单个字符,字符串都用单撇号括起来。
(区别与C语言)
获得字符的ASCII值:
double函数或是abs函数,double(‘a’)。
将ASCII码转化为字符输出,用char函数,例char(99),输出c。
字符串与数值互换,str2num,num2str.x=str2num('str')。
eval函数,eval(‘t=1’),将字符串‘t=1’作为matlab的语句执行。
将符号转换数值用eval
结构体:
结构体.成员名=表达式,a.x1=1,a.x2=’str’,a.x3=[111213],建立结构体a,成员包括x1,x2,x3。
isstruct函数:
判断是否是结构体,是结构体则输出ans=1。
fieldnames函数:
返回结构体包括的所有成员。
isfield函数:
判断某一个名称是否是某一个结构体的成员名,isfield(‘str’,a)。
调用格式:
tf=isfield(S,'fieldname')检查结构体S是否包含由fieldname指定的域,如果包含,返回逻辑1;如果S不包含fieldname域或者S不是结构体类型的,返回逻辑0。
tf=isfield(S,C)其中C是一个包含多个字符串的元胞数组,isfield判定由这些字符串表示的域是否是结构体的域。
返回值是个逻辑型数组。
rmfield函数:
删除某一个结构体的成员。
S=RMFIELD(S,'field')removesthespecifiedfieldfromthemxnstructurearrayS.ThesizeofinputSispreserved.
getfidld函数:
添加某一个结构体的成员。
单元:
a={1,’str’,[11121314]}
零矩阵的建立,zeros(3,4),建立一个3×4的零矩阵。
幺矩阵的建立,ones
单位矩阵的建立:
eye(10,10)
随机矩阵的建立:
rand,rand产生的是0到1(不包括1)的随机数;产生从a-b分布的可用,s=a+(b-a)*rand()。
randn,服从正态分布。
使用冒号式建立向量:
e1:
e2:
e3,e1为初始值,e2为步长,e3为结束值
使用linspace(x1,x2,n)建立向量:
linspace是Matlab中的一个指令,用于产生x1,x2之间的N点行矢量。
其中x1、x2、N分别为起始值、终止值、元素个数。
若缺省N,默认点数为100。
在matlab的命令窗口下输入helplinspace或者doclinspace可以获得该函数的帮助信息。
相关函数:
x=logspace(a,b,n)功能:
logspace(a,b,n)生成一个(1xn)数组,数据的第一个元素值为10^a,最后一个元素为10^b,n是总采样点数。
需要注意的是,此时产生的数组元素在10^a到10^b上并不是均匀分布的,而形成一个对数曲线。
矩阵a=123
456
789
索引矩阵:
a(2,3),找出a中第二行第三列的元素,即6。
matlab中矩阵的存放是按列的,a(5)是第五个元素,即5。
linearInd=sub2ind(matrixSize,rowSub,colSub)这种用法适用于二维数组(在MATLAB中,一个空矩阵[]、一个数、一个向量都是二维的)。
其中matrixSize是矩阵的尺寸,通常用size函数获取。
rowSub、colSub则是要访问的元素的对应行列下标,返回值就是这个元素在这个矩阵中的索引值。
[I,J]=ind2sub(siz,IND)这种调用格式适用于二维数组,其中siz是数组的尺寸,通常通过调用size函数获取。
IND则是索引值,返回值为索引值为IND的元素在该二维数组内的行列下标。
重排矩阵:
B=reshape(A,m,n)返回一个m*n的矩阵B,B中元素是按列从A中得到的。
如果A中元素个数不等于m*n,则会引发错误。
B=reshape(A,m,n,p,...)返回一个和A具有相同元素的n维数组。
但B的尺寸是m*n*p*...,m*n*p*...必须和prod(size(A))相等。
即A和B元素个数相等。
B=a(:
),把a变成列向量B。
矩阵的转置:
用单引号。
矩阵的行列式:
det矩阵的逆:
inv矩阵的共轭:
conj内积的运算:
dot
矩阵的约旦标准型:
jordan(A),[V,J]=Jordan(A),输出V为相似变换矩阵,J为约旦标准型
矩阵的特征值:
eig(A),[M,P]=eig,M为特征值,N为特征向量。
矩阵的范数:
norm函数。
矩阵的分析:
函数矩阵的求导,diff(A),求二阶导数,diff(A,2)。
matlab中使用funm函数计算矩阵函数,S=funm(A,@fun)
矩阵的拆分:
B=a(1,:
),获取第一行所有列,C=a(1,1:
2),获取第一行的1到2列。
删除矩阵中的元素:
赋空值
repmat即ReplicateMatrix,复制和平铺矩阵,是MATLAB里面的一个函数。
cat(2,'!
md',shot)cat函数用于连接两个矩阵或数组,第一个参数表示按第几维进行连接,1表示第一维,即行向,也即垂直方向;2表示第二维,及列向,也即水平方向;
魔方矩阵:
M=magic(n)生成一个n*n的矩阵,矩阵元素是由整数1到n^2组成的并且任何行任何列的和都相等,阶数n必须是大于等于3的标量。
fliplr(a)矩阵左右翻转flipud(a)矩阵上下翻转rot90(a,k)矩阵逆时针旋转90*k度
formatrat:
有理数输出格式。
M文件分为命令文件和函数文件,命令文件没有输入,没有返回;命令文件可以对工作空间的变量操作,结果返回工作空间,而函数文件中的变量为局部变量,函数执行完毕,变量被清除;命令文件可以直接运行,函数文件需要调用的形式运行(特殊除外)。
数据输入:
input函数
数据显示:
disp函数,用来显示字符串,也可以显示数字。
程序暂停:
pause函数?
选择结构:
if分支switch分支try分支
大小写字母转换:
ifs>='a'&s<='z'
s=char(s-32)
输入小写字符转换成大写输出,输入大写字符转换成小写输出。
c=input('输入字符','s');%一定要有’s’,表示允许用户输入一个字符串,缺少是输入为数值
ifc>='A'&c<='Z';
disp(char(abs(c)+32));
elseifc>='a'&c<='z';
disp(char(abs(c)-32));
end
end
价格打折:
%fix为零向取整
try分支:
try
语句组1
catch
语句组2
End
%lasterr显示最后一条信息
循环结构:
for和while,在matlab中最好不要用i,j表示循环变量。
%rem函数为取余,mod()为取模
%把sumcnt都要初始化为零
break和continue语句:
函数文件基本结构:
function[输出形参]=函数名([输入形参])
[注释说明]
函数体
函数文件名通常和函数名一致,如果不一致,那么忽略函数名,调用时使用函数文件名。
Ctrl+r和Ctrl+t注释和取消注释。
函数参数的可调性:
MATLAB用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。
%输出参数的可调类似。
输出参数的可调:
function[a,b]=add_my(c,d,e,f)
ifnargout==2
a=c+d+e+f;
b=c*d*e*f;
else
a=c+d+e+f;
end
varargin和varargour代表未知的输入输出变量:
functionA=add_my(a,b,varargin)%输入变量数不确定
ifnargin==2
A=a+b;
elseifnargin==3
c=varargin{1}%使用了元胞数组
A=a+b+c;
else
error('wrong')
end
全局变量,使用global声明,可以提供不同的M文件访问同一个变量,格式为:
global变量名
size:
获取数组的行数和列数
length:
数组长度(即行数或列数中的较大值)
numel:
元素总数。
s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时数组的行数,第二个元素是数组的列数。
[r,c]=size(A),当有两个输出参数时,size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量。
如果在size函数的输入参数中再添加一项,并用1或2为该项赋值,则size将返回数组的行数或列数。
其中r=size(A,1)该语句返回的时数组A的行数,c=size(A,2)该语句返回的时数组A的列数。
ndims求数组的维数,等价于length(size(A))。
n=length(A):
如果A为非空数组,返回行数和列数两者之间数值较大的那一个值,即相当于执行了max(size(A));如果A为空数组,则返回0;如果A是一个向量则返回A的长度。
n=max(size(A):
若A为非空数组,返回A的最大维数;若A为空数组,返回A中最长的非0维数。
A为矩阵,A^2表示A*A,A.^2表示A中每个元素的平方。
关系速算:
A=
[1,2,4;1,1,1;2,3,1]B=[2,2,2;2,2,2;2,2,2]
运行Greater=A>B输出结果为:
Greater=[0,0,1;0,0,0;0,1,0]%A中元素大于B的元素则为1
plot(x,y),x和y为相同长度的向量(一般)。
plot有一个参数,若x为实数向量,则绘制折线图,若x为负数向量,则以实部和虚部为横纵坐标绘图。
plot常用的几种颜色:
’r’红色,’k’黑色,’b’蓝色,’y’黄色,’c’青蓝色,’m紫红色’。
xlabel(‘x’),ylabel(‘y’)标注横纵坐标。
text(3,0,’y=cos(x)’),在图像上(3,0)坐标处标示y=cos(x)。
legend(‘cos’,’sin’),两个曲线的图例。
xlim([xmin,xmax]),ylim([ymin,ymax]),控制x,y在什么范围显示。
x,y同时调节可用axis([xmin,xmax,ymin,ymax])。
axisauto使用自动的坐标轴显示
axisoff坐标轴不显示axison坐标轴显示
axisequal:
横纵坐标轴采用等长刻度。
axissquare:
产生正方形坐标系。
(省略默认为矩形)
holdon图形保持
subplot(2,2,1):
窗口的分割分成2*2个小窗口,使用第一个
figure开新画图窗口
fplot单纯画方程式图形fplot(‘函数式’,[xmin,xmax,ymin,ymax])fplot('x-cos(x^3)-sin(2*x^2)',[-3,3])%绘出
图形
ezplot可以绘出y=f(x)显函数,也可绘出f(x,y)=0隐函数以及参数式
ezplot(‘函式’,[xmin,xmax,ymin,ymax])ezplot(‘x参数’,’y参数’,[tmin,tmax])
semilogx:
x轴为对数刻度,y轴为线性刻度。
semilogy:
y轴为线性刻度,x轴为对数刻度。
loglog(x,y):
表示x,y都是对数坐标系。
polar(theta,r)%输入theta,r值,绘出极坐标。
plot3(x,y,z)%输入x,y,z数据,绘出3D曲线图。
surf(x,y,z)%输入x,y,z数据,绘出3D曲面图。
meshgrid(x,y)%做出x,y坐标所交集的网格点坐标。
line对象和line函数h=line(x,y,z,属性名1,属性值1……)
matlab在创建每一个图形对象时,都为该对象分配唯一的一个值,称其为图形对象句柄。
句柄是图形对象的唯一标识符,不同对象的句柄不能重复和混淆。
计算机屏幕作为根对象由系统自动建立,其句柄值为0.
属性的操作:
set(句柄,属性名1,属性值1……)返回属性值:
V=get(句柄,属性名)
图形窗口建立:
句柄变量=figure(属性名1,属性值1……)
建立坐标轴:
句柄变量=figure(属性名1,属性值1……)注意与axis的区别
axes是创建坐标轴,axis是设定其范围
clear;
clearall;
x=0:
10*pi;
y=sin(x);
axes('position',[0.10.20.30.4]);
%创建一个坐标系。
%让起点是左边占到显示窗口的十分之一处,下边占到十分之二处。
%,宽占十分之三,高占十分之四。
一个小框就出来了。
plot(x,y);
axis([02*pi-0.50.5]);%x的坐标范围是0到2π,y的范围是-0.5到0.5。
绘制曲线并查看有关对象的句柄。
x=linspace(0,2*pi,30);
y=sin(x);
h0=plot(x,y,'rx')
h1=gcf%返回当前Figure对象的句柄值
h2=gca%返回当前axes对象的句柄值(gco获取当前坐标轴的句柄)
h3=findobj(gca,'Marker','x')%查找对象(copyobj复制对象)
在同一坐标下绘制红,绿两根不同曲线,希望获得绿色曲线的句柄,并对其进行设置。
x=0:
pi/50:
2*pi;
y=sin(x);
z=cos(x);
plot(x,y,'r',x,z,'g');%绘制两条不同的曲线
Hl=get(gca,'Children');%获取两曲线句柄向量H1
fork=1:
size(Hl)
ifget(Hl(k),'Color')==[010]%[010]代表绿色
Hlg=Hl(k);%获取绿色线条句柄
end
end
pause%便于观察设置前后的效果
set(Hlg,'LineStyle',':
','Marker','p');%对绿色线条进行设置
‘-’实线‘--’虚线‘-.’点划线‘:
’点线‘*’用星号标出数据点‘o’用圆圈标出数据点
‘x’用叉号标出数据点‘+’用加号标出数据点
fill的功能:
绘制二维多边形并填充颜色
gtext(’字符串’):
利用鼠标在图形的某一位置标示字符串
notebook的安装,输入命令notebook-setup
注意:
有几个for就要有几个end
exp和expm的区别:
exp(A)是对A整体求以e为底数,expm(A)是对A中每个元素求以e为底的对数。
rat有理分式近似。
a=0.25,rat(a)=0+1/4
find(x)返回一个x中包含非零元素的下标的向量,如果所有元素为零,返回空矩阵。
[u,v]=find(A)返回向量u和v,他们包含A中的非零元素的下标。
逻辑函数:
any(A):
对A进行运算,根据相应列是否包含非零元素,返回一个带1和0的行向量。
all(A):
对A操作,根据相应列是否所有元素都为非零值,返回带1和0的行向量。
对于一个实方阵如果all(all(A==A'))返回1,则A是对称的。
diag(A),生成一个由矩阵A的主对角线元素组成的列向量。
diag(x),生成一个n维方阵,它的主对角线元素值取自向量x,其余为零。
triu(A),成才一个和A大小相同的上三角矩阵。
该矩阵的主对角线以及以上元素取自A中相应元素,其余元素都为零。
tril(A)是生成下三角。
sum(A),返回一个包含矩阵A各列元素之和的一个矩阵。
syms是定义符号变量;sym则是将字符或者数字转换为字符
y=sym(’x');和symsx;y=x;的功能一样
符号表达式:
f='3*x+6'
symsx;f=3*x+6
f=sym('3*x+6')
符号的化简:
simplify:
对表达式S进行化简
simple:
通过对表达式尝试多种不同的方法(包括simplify)进行化简,以寻求符号表达式S的最简形式。
因式分解factor
展开expand
合并collect
符号矩阵构建方式与数值矩阵一致,使用在数值矩阵中的函数也可以用于符号矩阵。
transpose是共轭转置即
符号函数值的求解:
subs例:
y='3*x'subs(y,3)输出9
符号极限:
imit(F,x,a)takesthelimitofthesymbolicexpressionFasx->a.
符号求导:
diff(x,n);对x求n阶导数符号积分:
int
符号级数的求和:
symsx;y=1/x^2;symsum(y,x,1,inf)对y=1/x^2从1到无穷求和
符号泰勒级数展开:
symsx;y=exp(x);taylor(y,x,6,1);需要在1处展开五次项,默认在0展开
符号代数方程和方程组求解:
solve('eqn1','eqn2',...,'eqnN')
符号的常微分方程:
y=dsolve('(Dy)^2+y^2=1','y(0)=0')
D3y:
表示y的三阶导数。