计算机数学语言MATLAB应用培训“三个代表”:MATLAB,Mathematica,MapleMATLAB:数值运算、程序设计、各领域的工具箱Mathematica、Maple:解析运算、符号运算、公式推导、纯数学领域三个代表性计算机数学语言MATLAB1984v.1TheMathWorksIncMATrixLABoratory1980CleveMoler,NewMexicoUniversity在数值计算和数据分析方面的应用在电子学、控制理论和物理学等工程和科学学科方面的教学与研究在经济学、化学和生物学等有计算问题的所有其他领域中的教学与研究一.Matlab基础知识Matlab启动两个简单的计算例子(1)输入矩阵计算A*B(2)求的算术运算结果主要界面:指令窗、工作空间、历史指令窗如何获取在线帮助——help命令及demo命令可以通过图书馆、上网获取大量有关Matlab的知识退出命令:exit或quit987654321A23)]47(212[978326BMATLAB语言的变量名规则(1)由一个字母引导,后面可以为其他字符(2)区分大小写AbcABc(3)有效MYvar12,MY_Var12和MyVar12_(4)错误的变量名12MyVar,_MyVar12MATLAB的保留常量:eps,i,j,pi,NaN,Inf,i=sqrt(-1)Matlab的内部函数都是小写字母的,如正弦函数sin,不能写成SIN、Sin等形式。运算符和表达式(按优先级排列)1)^幂2)*乘/右除(正常除)\左除3)+加-减表达式a/(b+c)被读作如果使用左除a\(b+c),Matlab把它译成cbaacbMatlab的部分预定义数学函数二.数组的输入及运算数组的创建和寻访常用方法:冒号生成法,格式为Y=a:inc:b,inc是步长,可以取正负,还可以省略,默认为1;Y=rand(1,5)%产生(1*5)的均匀分布随机数组Y=0.95010.23110.60680.48600.8913Y(3)ans=0.6068Y([125])ans=0.95010.23110.8913Y(1:3)ans=0.95010.23110.6068Y(3:end)ans=0.60680.48600.8913Y(3:-1:1)ans=0.60680.23110.9501Y(find(x0.5))ans=0.95010.60680.8913数组的运算两个数组的运算是将对应元素作运算得到一个新的数组。一个数与一个数组的运算是该数逐个与数组元素作运算得到一个新的数组。数组运算符有+,-,.*,./,.\,.^三.矩阵的输入及运算矩阵的创建和寻访A=[11,12,13;14,15,16]A=111213141516A(2,3)ans=16A(1,3)=10A=111210141516矩阵的运算矩阵运算符有+,-,*,/,\,^,’X=AB-1=A/B(右除)X=A-1B=A\B(左除)求逆阵:X=inv(A)求行列式:d=det(A)求矩阵的秩:n=rank(A)求矩阵特征值与特征向量:d=eig(A)[v,d]=eig(A)矩阵的分解LU分解:又称三角分解,将矩阵A分解为下三角矩阵L和上三角矩阵U的乘积,即A=LU。[L,U]=lu(A)Cholesky分解:如果A为对称阵,则可以将A分解成A=D’D。D=chol(A)QR分解:将矩阵A分解为一个正交阵Q与一个上三角阵R的乘积,即A=QR。[Q,R]=qr(A)生成特殊矩阵的部分函数:生成特殊矩阵的部分函数:四.MATLAB语言流程控制循环结构for结构while结构【例】用循环求解【例】用循环求解求最小的m【例】用循环求解求最小的m转移结构开关结构和C语言的区别当开关表达式的值等于某表达式,执行该语句后结束该结构,不用break;同时满足若干个条件之一,则用单元形式otherwise语句,不是default;程序的执行结果和各个case顺序无关;case语句中条件不能重复,否则列在后面的条件将不能执行。五.MATLAB函数的编写MATLAB语言函数的基本结构(M文件)M文件其实就是批命令文件,可以代替在Matlab提示符下输入的一大串命令。利用M文件可以自己定义函数并很方便地像调用内部函数一样对其进行调用。【例】用循环求解求最小的m【例】函数的递归调用:阶乘六.二维图形绘制二维图形绘制基本语句构造向量:【例】【例】绘制二维函数的一般步骤:1.产生自变量采样向量并计算出函数值向量;t=pi*(0:100)/100;y=sin(t).*sin(9*t);2.选定图形窗及子图位置;figure(1);%指定1号图形窗subplot(2,2,3);%指定3号子图3.调用线性、颜色等指令;plot(t,y,‘b-’)%用蓝色实线画曲线4.设置轴的范围与刻度、坐标分格线;axis([0,pi,-1,1]);%设置轴的范围gridon%画坐标分格线5.图形注释;title(‘调制波形’)%图名xlabel(‘t’);ylabel(‘y’)%轴名text(2,0.5,‘y=sin(t)sin(9t)’)%文字说明其他二维图形绘制语句【例】绘制极坐标曲线【例】用不同曲线绘制函数表示正弦曲线隐函数绘制及应用隐函数七.三维图形绘制三维曲线绘制【例】参数方程三维曲面绘制如果已知二元函数z=f(x,y),则可以绘制出该函数的三维曲面图。先用meshgrid()函数来生成网格矩阵数据x和y.【例】Butterworth滤波器%色标尺多项式拟合八.由已知数据拟合数学模型【例】polyval()函数用来计算多项式的值【例】函数线性组合的曲线拟合方法该方程的最小二乘解为:其中【例】1)(1xfxexf32)(xexxf43)2cos()(24)(xxf由以上方程可知:写成矩阵的形式:)](),(),(),([4321xfxfxfxfA离散点与曲线位置的比较:多元线性拟合对于二元线性函数22110xaxaay1.10.18.6.5.2.1x4.11.19.4.3.1.2x24.27.23.28.26.17.yXAYYXYXA\1写成矩阵形式为:可以得到x1=[.2,.5,.6,.8,1.0,1.1]’;x2=[.1,.3,.4,.9,1.1,1.4]’;y=[.17,.26,.28,.23,.27,.24]’;X=[ones(size(y)),x1,x2];A=X\y即可得到拟合多项式的系数九.一维数据的插值问题一维插值问题的求解【例】已知的数据点来自函数根据生成的数据进行插值处理,得出较平滑的曲线直接生成数据。%根据函数取若干个离散点二维网格数据的插值问题【例】一○.Matlab常用功能函数求函数的导数和高阶导数【例】不定积分的推导【例】用diff()函数求其一阶导数,再积分,检验是否可以得出一致的结果。simplify(y0)对原函数求4阶导数,再对结果进行4次积分数值积分问题单变量数值积分问题求解y=quadl(Fun,a,b)——速度和精度远高于quad()函数,建议使用。【例】求解4220I【例】(结果有问题)一元函数作图一一.函数与方程作图fplot(‘函数名’,[Xmin,Xmax])【例】一元方程的图解法二元方程的图解法【例】多项式型方程的求解【例】【例】求函数的零点【例】求以下函数的零点求函数的零点必须先估计一下X0的大小,所以可以先把函数的图形先描绘出来看一下。【例】求函数sin(x)和2x-2的交集,也就是求方程sinx=2x-2的解。先定义函数s=sinx-2.*x+2,再计算函数s的零点。求函数的极值点求一元函数的极小值:求多元函数的极小值:[x,fval]=fminbnd(fun,x1,x2)——求函数在区间(x1,x2)中极小值的指令最简格式[X,fval]=fminsearch(fun,X0)——求函数在自变量向量为X0附近的极小值的指令最简格式求的极小值点。ff=inline('100*(x(2)-x(1)^2)^2+(1-x(1))^2','x');X0=[-1.2,1];[X,val]=fminsearch(ff,X0)222)1()(100),(xxyyxf【例】一二.有约束最优化问题的计算机求解线性规划问题的计算机求解二次型规划的求解一般非线性规划问题的求解线性规划问题的计算机求解【例】以上的目标函数可以用其系数向量f=[-2,-1,-4,-3,-1]’表示。不等式约束有两条,即:1154324120A6254B【例】二次型规划的求解【例】=24232221)4()3()2()1(xxxx308642432124232221xxxxxxxx4321432143218642200002000020000221xxxxxxxxxxxx----+一般非线性规划问题的求解F为给目标函数写的M函数或inline函数,x0为初始搜索点,CF为给非线性约束函数写的M函数。【例】c为不等式约束的数学描述,ceq为非线性等式约束,如果某个约束不存在,则应该将其值赋为空矩阵。一三.微分方程问题的计算机求解常系数线性微分方程的解析解方法微分方程问题的数值解法常系数线性微分方程解析解的数学描述常系数线性微分方程的解析解方法常系数线性微分方程的求解工具【例】【例】【例】微分方程问题的数值解法微分方程问题算法概述MATLAB可直接对一阶显式微分方程组进行数值求解Fun是用M函数或inline函数描述的微分方程;t0为设定的仿真初始时刻,tf为仿真终止时刻;x0表示初值问题的初始状态变量。四阶五级Runge-Kutta-Felhberg算法ode—常微分方程【例】【例】微分方程转换:单个高阶常微分方程处理方法【例】因为该方程不是由Matlab直接可解的一阶显式微分方程组给出的,所以需要对该方程进行变换。选择状态变量yx1yx21221221)1(xxxxxx则原方程可以变换成: