第二篇Matlab第一章矩阵及其基本运算一、矩阵的表示1.实数值矩阵生成2.复数矩阵生成3.符号矩阵的生成用sym函数或syms函数4.大矩阵的生成.m文件、数据文件的读入5.特殊矩阵的生成全零阵、全1阵、单位阵:zeros,eye,ones随机矩阵:均匀分布:rand标准正态分布:randn线性等分向量:linspaceHilbert矩阵:hilb魔方矩阵:magic二、矩阵操作1.取矩阵中的元素2.增加及删除矩阵中的元素3.矩阵的旋转与变形三、矩阵运算1.加减法运算2.乘法运算①向量乘法②矩阵乘法③数组乘法(数乘)3.集合运算并:union返回a、b的并集,即c=a∪b交:intersect返回向量a、b的公共部分,即c=a∩b差:setdiff返回属于a但不属于b的不同元素的集合,C=a-b交集的非:setxor检测集合中的元素:ismember4.除法运算A/B5.矩阵乘方exp(A):EA6.矩阵函数expmlogmsqrtm7.方阵的行列式:det8.方阵的逆:inv9.矩阵的迹:trace10.矩阵的秩:rank11.矩阵和向量的范数norm欧几里德范数norm(x,inf)无穷范数四、矩阵分解1.LU分解:[L,U]=lu(X)U为上三角阵,L为下三角阵或其变换形式,满足LU=X2.QR分解:[Q,R]=qr(A)求得正交矩阵Q和上三角阵R,Q和R满足A=QR3.特征值分解[V,D]=eig(A)计算A的特征值对角阵D和特征向量V,使AV=VD成立五、其它二次型、秩与线性相关性、稀疏矩阵第二章Matlab语言基础一、M文件1.脚本文件:在Matlab的工作空间内对数据进行操作。2.函数文件:可接受输入参数并返回输出参数,其内的变量不占用Matlab工作空间,第一行包含function注:M文件的调用以文件名为准。%为Matlab的注释符,其后的语句不执行(只对当前行有效)。二、Matlab语言1.逻辑判断符====~=isequal函数2.逻辑运算符&|~3.条件语句①if-else语句②switch-case语句4.循环语句①for语句②while语句三、编程技巧1.调试程序2.输入输出参数nargin、nargout第三章Matlab图形处理一、二维图形1.基本二维图形Plot用法如下:a.Plot(X)b.Plot(X,Y)c.Plot(X1,Y1,X2,Y2,…)d.Plot(X1,Y1,LineSpec1,X2,Y2,X3,Y3,…)fPlot在指定的范围limits内画出一元函数y=f(x)的图形用法:fplot('function',limits)注意:函数function必须是一个M文件函数或者是一个包含变量x,且能用函数eval计算的字符串。例:在同一坐标系下绘制tgx和的sinx图形fplot(‘[tan(x),sin(x)]’,[-1,1,0,2*pi])注意坐标系调整函数axis的作用和用法其中参数LineSpec定义线条的属性。Matlab中可以对线条定义如下的特性:a.线型:-(实线)--(划线):(点线)-.(点划线)b.颜色c.标记类型d.标记大小:Markersize2.图形标注title为图形添加标题xlabel为x轴加标注ylabel为y轴加标注text在指定位置上添加文本字符串gtext用鼠标在图形上放置文本legend为图形添加图例3.特殊二维图形polar画极坐标形式函数r=f(θ)的极坐标图用法如下:polar(theta,rho,LineSpec)例:t=0:.01:2*pi;polar(t,sin(3*t).*cos(2*t),'--r')4.其它二维图形pie用x中的数据画一饼形图semilogxx轴对数图形loglog双对数图形bar用二维垂直条形显示向量或矩阵中的值barh用二维水平条形显示向量或矩阵中的值hist二维条形直方图,可以显示出数据的分配情形二、三维图形1.曲面与网格图形命令mesh生成由X,Y和Z指定的网线面在使用该命令前应先用meshgrid函数生成可用于计算函数值的矩阵网格。通常用法如下:[X,Y]=meshgrid(a)Z=f(X,Y)mesh(X,Y,Z)2.三维图形的其它形式contour曲面的等高线图pie3三维饼图surf在矩形区域内显示三维带阴影曲面图quiver矢量图或速度图surfnorm计算与显示三维曲面的法线第四章Matlab应用一、多项式运算创建、求值、求根、特征多项式、求导二、极限limit(F,x,a,‘right’)x趋向于a时F的极限三、导数diff(S,v,n)四、积分1.符号积分a.不定积分int(S,v)b.定积分int(S,v,a,b)2.数值积分a.一元函数quad(fun,a,b)自适应Simpson法trapz(X,Y)梯形法b.二元函数dblquad(fun,xmin,xmax,ymin,ymax)在矩形区域[xmin,xmax,ymin,ymax]上计算二元函数z=f(x,y)的二重积分quad2ggen(fun,xlower,xupper,ylower,yupper)在任意区域[xlower,xupper,ylower,yupper]上计算二元函数z=f(x,y)的二重积分五.拟合和插值1.多项式拟合:polyfit(x,y,n)2.插值:a.interp1(X,Y,xi,method)一维数据插值b.interp2(X,Y,Z,xi,yi,method)二维数据插值method可取下列值:linear线性插值spline三次样条插值cubic三次插值例:已知1900年到2010年每隔十年的数据如下:75.99591.972105.711123.203131.669150.697179.323203.212226.505249.633256.344267.893用插值法求1995年的数据。六、方程(组)求解1.方程(组)的符号解solve(eq)求方程的符号解solve(eq1,eq2,…eqn)求方程组的符号解例:solve('x^2+3x-6')solve('-x^2*y+3*x-6','x+y^2-1')2.方程(组)的数值解fzero(fun,x0)用数值方法求方程根七、积分变换1.Fourier积分变换F=fourier(f)对符号单值函数f中的缺省变量x(由命令findsym确定)计算Fourier变换形式例:symsxf=sin(x)*exp(-x.^2)F=fourier(f)注:用eval函数计算得出的表达式f=ifourier(F)逆Fourier积分变换Y=fft(X)快速Fourier变换2.Laplace变换L=laplace(F)输出参量L=L(s)为有缺省符号自变量t的标量符号对象F的Laplace变换例:symstf1=sqrt(t);L1=laplace(f)F=ilaplace(L)逆Laplace变换3.Z变换F=ztrans(f)对缺省自变量为n的单值函数f计算z-变换八、求解微分方程(组)1.常微分方程(组)符号解dsolve(eq1,eq2,…)缺省独立变量为t例:dsolve(‘Dy=1+y^2’,’y(0)=1’)dsolve('D3u=u','u(0)=1','Du(0)=-1','D2u(0)=pi')2.常微分方程(组)数值解ode45、ode23、ode113、ode15s、ode23s、de23t、ode23tb3.偏微分方程数值解①assempde单的Poission方程(一类特殊的椭圆型方程),能求解的方程形如:0u1uG2}1yx)y,x{(G22②hyperbolic仅能求解如下形式的双曲型方程:0tu0u0zuyuxutu0t0t22222222}1z,y,x0)z,y,x{(G③parabolic仅能求解如下形式的抛物型方程:0u0zuyuxutuG222222}1z,y,x0)z,y,x{(G十、极值问题(优化工具箱)方程数值解1.无条件极值问题fminunc(fun,x0,options))12424()(min22122211xxxxxexfxx例:2.条件极值问题fmincon(fun,x0,options)01005.1212121xxxxxx在上例中限定:fsolve(fun,x0)用数值方法求方程根例:求下列方程的根21x21x21ex2xexx2解:先建立方程函数文件,并保存为myfun.mfunctionF=myfun(x)F=[2*x(1)-x(2)-exp(-x(1));-x(1)+2*x(2)-exp(-x(2))];然后调用优化程序x0=[-5;-5];%初始点[x,fval]=fsolve(@myfun,x0,optimset('fsolve'))第五章Matlab的外部接口本章主要包括两部分内容:在VC中调用Matlab在Matlab中调用C程序用C语言编写Matlab的MEX程序1.用mcc将.m文件翻译为cpp源文件,然后调用2.在VC中直接调用Matlab的C++MathLibrary3.利用Matcom(MIDEVA)一、编程环境1.开发时必需的文件%Matlab%\extern整个目录是开发的必需目录%Matlab%\extern\include\*.h目录%Matlab%\extern\include\cpp\*.hpp目录%Matlab%\extern\lib\win32\*.lib目录%Matlab%\extern\lib\win32\microsoft\msvc60\*.lib目录2.VC6的设置○设置include搜索目录加入c/c++math和c/c++graphics的头文件Tools-Options-Directories-Includefiles中加入:%Matlab%\extern\include\cpp\和%Matlab%\extern\include\○定义预处理宏MSVC、MSWINDProject-Setting-C/C++页中的Category-Preprocessor中加入MSVC、MSWIND○加入lib文件Project-AddtoProject-Files…中加入:%Matlab%\extern\lib\win32\microsoft\msvc60\*.lib以及%Matlab%\extern\lib\win32\libmatpm.lib○设置运行时动态链结库Project-Setting-C/C++页中的Category-CodeGeneration中选择MultithreadedDLL。3.运行时(发布)所需文件%MATLAB%\extern\lib\win32\mglinstaller.exe所生成的*.dllMatlab运算符C++运算符C++函数++plus()--minus()**mtimes()//mrdivide()\无mldivide()^^mpower().*无times()./无rdivide().\无ldivide().^无power()‘无ctranspose()C++MathLibrary中的函数传递DECLARE_FEVAL_TABLEFEVAL_ENTRY(myfun)END_FEVAL_TABLE