matlab基本语法和运算基础
转载自:http://blog.csdn.net/robertcalm/article/details/51582253
matlab语法比较随意,但正如其全名 matrix &laboraty(矩阵实验室)所言,相比于其他语言,它可以非常便捷实现矩阵运算,就像我们标量的加减乘除一样简单。对于矩阵运算的强大支持和强大数学和科学计算函数库也垫定了其可以广泛应用在各种科学计算中,研究人员可以快速的使用matlab验证一个算法,使用matlab验证算法相比C/C++/JAVA等工作量小了很多,算法验证达到了一个较好的效果,我们也可以比较迅速的使用C、C++等语言把它用到实际工程和产品中去。本文主要介绍一下matlab一些比较重要且和C/C++等语言等常用语言不太一样的概念和基础矩阵运算方法。
一·支持的数据类型
matlab是一门以矩阵运算为基础语言,标量运算也可以看成1*1矩阵之间的运算。
1·元胞数组:元胞是元胞数组的基本组成成分,元胞数组与数字数组相似,以下标来区分,单元胞数组和元胞内容两部分组成。用花括号{}表示元胞数组的内容,用圆括号()表示元胞元素,与一般数字数组不同,元胞可以存放任何类型、任何大小的数组,而且一个元胞数组各元素的内容可以不同。
2·结构数组:与元胞数组类似,结构数组也能存放各类数据,使用指针方式传递数值,结构数组由结构变量名 和属性名组成,用操作符.来连接结构变量名和属性名。parameter.temperaure 表示温度。
3·对象: 当创建应用软件时,你所要描述的类别或事物可能是实际的对象,如汽车或是一个有机体,可能是一个虚拟实体,如金融市场,也可能是信息,如一组测试结果。在面向对象的程序设计中,这些类别以“类”的概念表达。数据元素或状态表示为类的属性。matlab也支持面向对象编程。
二·关系运算和逻辑运算
1·逻辑运算:&逻辑与,~逻辑非,|逻辑或。
2·关系运算函数:all(A):A向量所有向量为非零元素时为真。xor():异或。any(A):A中任何一向量为非零元素时为真。
3·逻辑运算函数:bitand():按位与 。 bitcmp():位比较。bitor():按位或。bitmax():最大无符号浮点整数。bitxor():位方式逻辑异或 bitshift():将二进制移位运算。
三·矩阵及其运算
1·一般矩阵生成和特殊矩阵生成函数
1·1一般矩阵生成:矩阵以左方括号“[”开始,以右方括号“]”结束。每一行元素用分号或回车结束,每个元素之间用空格或逗号隔开。此外矩阵建立还可以靠读入数据。
1·2特殊矩阵生成函数
zeros():生成全为零的矩阵。tril():生成下三角矩阵
ones():生成元素全为1矩阵。eye():生成单位矩阵
rand():生成均匀分布随机矩阵。randn():生成正态分布所及矩阵
magic():生成魔方矩阵。 hilb():生成希尔伯特矩阵
vander():生成vander矩阵。diag():生成对角矩阵
hankel():生成hankel矩阵。 triu():生成上三角矩阵
hadamard():生成hadamard矩阵
2·矩阵运算
A矩阵转置:A’。A矩阵对数运算:logm(A)。
矩阵的指数运算:expm(A)。矩阵求逆:inv(A)。
矩阵逆时钟旋转90度:rot90()。计算矩阵特征值和特征向量:eig().
矩阵上下翻动:flipud(). 计算矩阵的秩:rank()。
矩阵左右翻动:fliplr(). 计算矩阵的迹:trace().
矩阵某维元素翻转:flipdim()。计算矩阵的2范数:norm()。
矩阵元素移位:shiftdim()。计算矩阵特征方程的根:ploy()。
3·矩阵分解函数
矩阵的特征值分解:eig().矩阵的奇异值分解:svd().
矩阵的QR分解:qr(). 矩阵的cholesky分解:chol()
矩阵的schur分解:shur()。 矩阵的LU分解:lu().
四·符号运算
1·符号运算基本语法
数值运算必须先对变量赋值再运算,然后才能参与运算。符号运算无须事先的运算对象可以使没有赋值的符号变量,可以获得任意精度的解。
1·符号表达式可以代表数字、函数、算子、变量的matlab字符串。
2·建立单个符号量:符号量名 = sym(‘符号表达式’)。
syms 符号表达式1 符号表达式2 符号表达式3 表达式4;
2·符号矩阵
符号矩阵也是一种符号表达式,所以前面介绍符号表达式运算也可以在矩阵意义下进行,但应该注意这些函数作用于符号矩阵时,是分别用于矩阵的每个元素。比如A =sym(‘[a,3*b;3*a,c]’);由于符号矩阵是一个矩阵,所以它可以进行矩阵相关运算(diag,tril,det等函数)。
numeric(A):将符号矩阵转化为数值矩阵。
tranpose(A):返回A的装置矩阵
determ(A):返回矩阵的行列式值
3·符号表达式的4则运算
对符号表达式或或符号矩阵A进行因式分解:factor(A);
对符号表达式或符号矩阵A进行展开:expand(A)
对符号表达式或符号矩阵A进行合并同类项:collect(A)
应用函数规则对A进行简化:simplify(A)
对函数进行综合简化:simple(A)
对函数f关于x求n阶导数:diff(f,x,n)
求积分最常用函数:int(f,r,x0,x1) 其中f为积分表达,r为积分变量,
x0和x1为积分上下限。没有上下限则求得的是不定积分。
subs(f,{x},{x的实际值})给表达式中的x赋实际值并计算。
五·复数运算
*1·基本运算操作
复数表达式构造利用i,j直接写,也可以额利用符号函数来构造。也可以写成极坐标的形式。
polar(theta,rho)画出极坐标图,其中theta为极坐标极角,rho为极坐标失径。
real(A)求复数A的实部 conj(A) 求A的共轭
imag(A) 求复数A的虚部 abs(A)求A的模
angle(A) 求A的相角
[r,p,k]= residue([an-1,…,a0],[bn-1,…,b0]);求解有理分式的留数。其中r为留数,p对应的各奇点。
2·泰勒展开和Fourier变换
taylor(f):返回函数f的五次多项式近似,函数f的自变量有函数findsym决定。
taylor(f,n):返回n-1次幂多项式,函数f自变量由findsym决定。
taylor(f,a):返回a点附近的五次幂多项式近似。
taylor(f,x):返回指定变量x的五次幂多项式近似。
fourier(f):返回以默认变量x为数量符号f的Fourier变换,其中变换后函数默认以w为自变量。
fourier(f,v):以v替代w为变换后的函数自变量。
fourier(f,u,v):以v替代w,以u提到x
ifourier也是类似的。
拉普拉斯变换用法:laplace 和ilaplace都是类似的。
Z变换用法:ztrans和iztrans也是类似的。
六·matlab的绘图
1·plot(x1,y1,option1,x2,y2,option2);画二维曲线
2·plot3(x1,y1,z1,option1,x2,y2,z2,option2);画三维 曲线
3·mesh(X,Y,Z,C);画三维网格曲面X,Y,Z为矩阵
4·surf(X,Y,Z,C);画三维阴影曲面,X,Y,Z为矩阵
5·[X,Y]=meshgird(x,y);将矩阵X的每一行都为向量x
6·view(beta,theta),选择三维图角度,其中beta为方位角,theta为视角。
7·hist(Y,X)以X为统计范围统计,绘制出Y分布直方图
8·rose(thera,x)以向量x为统计范围,在极坐标下统计thera的直方图分布。
9·bar(data,’mode’)用来画柱状图,mode默认是‘grouped’模式,这时bar函数把数组data每一行看作一组,画在一个水平坐标位置。若指定为‘stacked’则把每一组数据叠加起来绘图。barh水平放置的柱状图。
三维柱状图bar3() bar3h()也是类似。
10·面积图 area()函数用于绘制面积图,和累叠模式柱状图类似,面积图也是把每一组数据点累叠绘制。不过它把每一个数据集合的相邻点用线条连起来,并且把每一个数据集合所在区域用不同颜色填充。
11·pie()绘制二维饼图。pie3()绘制三维饼图。
13·火柴干图:把每个数据点用一个垂直于横轴的火柴棒表示,stem(),stem3()。
14·绘制阶梯图stairs()。
15·等高线图:用于显示多元函数的函数值变化趋势,contour()来绘制等高线,clabel()标注等高线函数值,contourf绘制颜色填充模式。
16·axis[xmin xmax ymin ymax]:分别限定x轴和y轴的范围
axis equal:横纵坐标单位长度相同
axis square:图框呈方形
axis off:清除坐标刻度
semilogx:x轴为对数坐标
semilogy:y轴为对数坐标
loglog:全对数坐标
text(x,y,’标识文本’)在指定坐标标识对应的数据点
gtext(‘标识文本’)绘图后用鼠标来标识对应的位置
title(”)图形标题,xlabel(”)标识x轴,ylabel(”)表示y轴
legend(‘图例一’,图例二’)给曲线添加图例
grid on 给当前坐标加上珊格线
grid off 从当前坐标中删去珊格线
hold on 保持图像,便于绘制多条曲线
hold off 取消保持
七·matlab函数及调用
1·匿名函数:匿名函数可以接受多个输入和输出参数,适用于命令行操作。fhandle = @(arglist) expression
2·私有函数:具有访问限制性访问权限的函数,他们对应的M文件保存在名为private的文件夹下,但它只能被private文件下M文件调用。
**3·输入输出参数目录:**nargin:输入参数数目,nargout:输出参数数目。
**4·可变输入参数:**varargin:可变输入参数。varargout 可变输出参数。
5·全局变量:用global来声明和调用
6·函数句柄:函数句柄提供了一种间接调用函数的方法,创建函数句柄需要用到@,匿名函数其实也是一种句柄,而对M文件的各种函数都可以创建函数句柄,从而可以通过函数句柄对这些函数实现间接调用。fhandle =@function_filename;
feval(fhandle,parameters);调用函数句柄
八·matlab调试方法和编程技巧
1·去掉分号输出中间结果。
2·设置断点逐步调试,观测变量值的变化。
3·Code Analyzer:可以分析M文件的性能和错误。
4·Profiler:MATLAB提供的一个功能强大的代码分析工具,一般来说,应该尽量避免不必要的变量输出、循环赋值前预定义数组尺寸,多采用向量化的,matlab函数,少采用数组,提高matlab的性能。
5·一个程序的执行速度取决于它所调用的子程序个数以及所采用的算法 ,通常希望程序越少越好,算法效率越高越好。可以使用嵌套计算减小乘法次数。tic初始化时钟开始计时,toc时钟停止,获得执行时间。
6·matlab要尽量避免使用循环,为了得到最快的运行速度,在for循环运行之前,应该预先分配数组。矩阵运算优先考虑内联函数。
7·程序应该具有一定容错能力,当用户输入错误时,应该使用error()函数来提示出国原因。