1、第六章 数学实验与数学建模学习目标1.掌握利用Matlab软件进行了相关的数学运算的方法.2.以软件辅助来完成数学实验.3.了解数学建模思想方法,能够对一些简单问题建立数学模型求解分析.教学要求能力模块能力要求相关知识点运算能力要求学生知道数学中运算所对应的相关Matlab基本函数及其用法,并能够运用相关函数完成数学的基本运算。(1)数学的相关知识(2)Matlab软件的语法(3)相关函数的用法实验能力要求学生能够以软件作为辅助工具,按要求完成相关实验线性代数中的相关数学理论与思想方法建模能力要求学生了解数学建模的思想方法,具备一定的数学建模能力一些基本的数学建模的方法Matlab是Mathw
2、orks公司推出的用于数值计算的交互式软件系统,具有强大的数值分析、矩阵运算、信号处理、图形显示和建模仿真功能. Matlab是“Matrix Laboratory”的缩写,意思是“矩阵实验室”,其强大的数据处理能力和丰富的工具箱使它的编程极为简单, 因此,它成为科学家和工程技术人员解决实际问题的首选计算工具软件。本章的第一节主要介绍Matlab软件的简单使用方法,从第二节到第六节在讲解Matlab用于解决高等数学和线性代数中的相关计算的函数基础上, 通过一些简单的数学实验例题,让学生体会如何用Matlab辅助解决数学问题. 最后,通过一些与线性代数相关的数学建模实例,让学生掌握数学建模的简单
3、方法,学会利用Matlab软件辅助解决实际问题,以培养学生良好的数学意识和数学素质.6.1 Matlab环境及使用方法6.1.1 Matlab窗口管理Matlab启动后显示三个窗口,如图6.1所示。左上窗口为工作区间窗口,显示用户定义的变量及其属性类型及变量长度。工作区间窗口也可显示为当前目录窗口,显示Matlab所使用的当前目录及该目录下的全部文件名。左下窗口为历史窗口,显示每个工作周期(指Matlab启动至退出的工作时间间隔)在命令窗口输入的全部命令,这些命令还可重新获取应用。右侧窗口为Matlab命令窗口,可在里面输入相关运算命令,完成相应计算。三个窗口中的记录除非通过菜单下的清除操作,
4、否则将一直保存。图6.1Matlab运行期间(即程序退出之前),除非调用Clear函数,否则Matlab会在内存中保存全部变量值,包括命令输入的变量以及执行程序文件所引入的变量。清除工作空间变量值也可以通过下拉菜单中的Clear Workspace命令实现。Clear函数可以清除内存中的所有变量。Matlab命令窗口输入的信息会保持在窗口中,并可通过通过滚动条重新访问。一旦信息量超出其滚动内容容量,则最早输入的信息将会丢失。可以通过在命令窗口中输入clc命令来清除命令窗口中的内容,也可以通过下拉菜单中的Clear Command Window子菜单清除,但这个操作仅清除命令窗口中的内容,但不能
5、删除变量,要删除变量,只能通过clear.为在命令窗口中能够更加清晰地显示字母及数字,Matlab提供了format函数的几种功能。其中format short e是系统默认的设置,显示5位数字, format long e显示格式转换为16位数字加3位指数位的显示格式. format compact命令将剔除显示中多余的空行或空格. 这此属性值也可通过单击菜单的子菜单,弹出的设置窗口后选择Command Window项进行设置(如图6.2).图6.2使用Matlab过程中有两个有用的组合键“c”(Crtl+c)用于终止程序或函数的执行,也可用于退出暂停的程序或函数;“p”(Ctrl+p)用于
6、将最近键入的信息显示在Matlab命令窗口中,按Enter键可再次执行该命令,连续按两次“p”,可调用上两次的输入信息,以此类推.6.1.2 Matlab的基本语法Matlab允许用户创建的变量名不可超过63个字符,多余部分将被忽略掉.变量名要求以大写或小写字母开头,后面跟大小写字母,数字或下划线。字符间不允许有空格. 变量名区分大小写,例变量名A1与a1表示不同变量. 此外,不能使用希腊字母,或者上下标字符作为变量名,但可以拼写希腊字母,或在下标字符前加入下划线表示变量. 例如,可写为lamda_1. Matlab在命令窗口运行时,要求首先在“”提示符后定义一个或多个变量,并进行赋值,然后表
7、达式才能够使用变量。赋值运算符为“=”,输入变量名和等号后,按Enter表示结束.例如要实现,则要在命令窗口中进行以下信息交互: a=2 用户输入a = 系统响应 2注:表达式后加分号(;)可省略系统响应信息的显示.Matlab允许在一行中输入多个表达式,表达式间以逗号或分号进行分隔,行尾以Enter键结束.用逗号分隔时系统会回显输入的值,如果用分号分隔表达式,不会输出响应信息. 例如按如下格式输入信息: a=2;b=2.5,c=3;系统显示为:b = 2.5000此时变量a和b的值不显示,但内存中存在. 标量的加、减、乘、除和幂运算分别用+,- ,*,/,表示,默认的运算次序为:幂运算为最高
8、,其次为乘除,最后为加减。同时在表达式中可用圆括号来确定运算次序。 例6-1计算当,时的值. 输入: a=2;b=3;c=6;t=(3/(1+2*a*b)c 结果:t = 1.5103e-004Matlab软件中包含了大量的函数,表6.1、表6.2、表6.3、表6.4给出了一些常用的函数及其功能说明.表6.1 常用初等函数的Matlab表示数学函数Matlab表示exp(x)sqrt(x)log(x)log10(x)abs(x)sign(x)表6.2 三角函数和双曲函数的Matlab表示三角函数双曲函数数学函数原函数反函数原函数反函数正弦sin(x)asin(x)sinh(x)asinh(x)
9、余弦cos(x)acos(x)cosh(x)acosh(x)正切tan(x)atan(x)tanh(x)atanh(x)余切cot(x)acot(x)coth(x)acoth(x)正割sec(x)asec(x)sech(x)asech(x)余割csc(x)acsc(x)csch(x)acsch(x)表6.3 Matlab复数运算函数Matlab函数功能Complex(a,b)表示复数abs(z)取复数的模conj(z)取复数的共扼复数real(z)取复数的实部imag(z)取复数的虚部表6.4 小数转换为整数的Matlab函数Matlab函数功能fix(x)舍去小数部分round(x)四舍五入
10、ceil(x)取上整floor(x)取下整Matlab软件中还有一些内置的常量,如表6.5所示表6.5 部分常量的Matlab表示数学常量Matlab表示piinf虚数单位i(或j)一些特殊字符在Matlab中有特殊的功能,如表6.6所示表6.6 特殊字符及其功能说明符号名称功能.句号(a)小数点(b)向量或矩阵的一种操作类型。例如,逗号(a)参数分隔符(b)几个表达式在同一行时放在每个表达式之后;分号(a)放在表达式末尾不显示计算结果(b)在创建矩阵的语句中指示一行的结束,例如:冒号(a)创建向量表达式分隔符,例如:(b)对矩阵而言,表示第列所有元素;表示第行所有元素( )圆括号(a)矩阵中
11、某一元素的下标指示,如表示矩阵行列的元素(b)算术表达式分隔符,如(c)函数参数分隔符,如sin(x) 方括号创建一组数值、向量、矩阵或字符串(字母型) 大括号创建单元矩阵或结构%百分号注释分隔符. 用于指示注释的开始,MATLAB编译器会忽略其右边的内容。但用于一对引号内部定义字符串时除外,如:a=pl=14% of the totle引号(a)Expression表明Expression为字符串(字母型)(b)表示向量或矩阵的转置空格作为数据创建语句的分隔符,如;或者作为字符串语句的一个字符有了上述基本知识后,我们就可以利用Matlab进行一些简单的运算了.例6-2 计算输入: sin(p
12、i/3)+asin(1)-exp(2)*log(7)结果:ans = -11.9416注:命令窗口作为计算器应用且未将计算结果分配给表达式时,Matlab默认将计算结果分配给变量名ans.6.1.3 Matlab的编辑器为了避免在命令窗口中输入多个表达式或重复输入一组表达式,且输入的表达式在执行完后能够进行修改, Matlab定义了程序文件:包含一组命令的文件,文件中每一命令行的执行都同在命令窗口里的执行一样.程序文件可由Matlab编辑器创建,编辑器的启动可由下拉菜单中子菜单下的来完成,窗口如图6.3所示.图6.3使用Matlab编辑器创建的程序文件,点击图6.3所示的Run图标,可执行文件
13、. 但在执行前首先要保存,保存可用下拉菜单中的子菜单,文件扩展名“.m”将自动添加到文件名末尾. 文件名的命名规则与变量名的命名规则相同.例6-3 编写一个m文件,用来计算下面的表达式其中,求m文件如下:R=30;r=12;S=50;theta=asin(R-r)/S);L=2*S*cos(theta)+pi*(R+r)+2*theta*(R-r)运算结果: L = 238.4998Matlab编辑器的另外一个重要的功能是用来定义函数. 函数具有模块化、结构化和重用性的特点,是Matlab程序的重要组成部分,下面我们给出Matlab定义函数的方法.Matlab定义函数格式如下:Function
14、 OutputVariables=FunctionName(InputVariables)%CommentsExpression(s)其中,OutputVariables是输出变量,变量之间用逗号隔开;InputVariables是输入变量,变量之间用逗号隔开;Function是保留字;FunctionName是函数名称,命名规则与变量命名规则一致;函数文件可以存储在任何已定义或即将定义的路径下,但文件名必须是FunctionName.m; %Comments是函数程序的注释部分,为了增强程序的可读性;Expression(s)是实现函数功能的主体程序,由一行或多行Matlab语句组合完成,函
15、数的定义是在Matlab的编辑器中完成的.注:当函数只是为了实现某一特定功能,而不涉及参数传递时,OutputVariables或InputVariables是可以省略的.例6-4 定义函数,并求当时的函数值.定义函数程序如下(在编辑器中输入):function value1=hanshu1(x,y) value1=x2+sin(x*y);保存为hanshu1.m在命令窗口中输入如下信息: hanshu1(5,pi/2)结果:ans = 266.2 高等数学与Matlab Matlab的符号运算工具箱包含了微积分运算、解微分方程等几个方面的工具,本节我们主要介绍利用Matlab软件辅助解决高等
16、数学中的相关计算问题.6.2.1 求函数极限求函数极限是高等数学中的重要计算,它在数学模型的分析和预测中起着重要的作用,Matlab提供了求极限的符号函数limit来完成这项工作,其调用格式和功能如表6.7所示.表6.7 limit函数使用说明格式功能l=limit(S,x,a)求符号函数,当时的极限l=limit(S,x,a,right)求符号函数,当时的右极限l=limit(S,x,a,left)求符号函数,当时的左极限注:对于符号函数S,也可以是普通的Matlab内置或自定义函数. 下面通过实例来说明这一函数用法:例6-5 求输入: syms x r_value=limit(exp(x)
17、,x,+inf), l_value=limit(exp(x),x,-inf)结果:r_value =infl_value =0注:“syms x”语句是用来创建符号变量.例6-6 求输入: syms x l_value=limit(exp(1/x),x,0,left),value=limit(exp(1/x),x,0)结果:l_value =0value =NaN 注:NaN在Matlab里面表示数值(结果)不存在. 6.2.2 求导运算求函数的导数和微分是高等数学中的基本计算,也是解决实际问题过程中的常用的一种方法,Matlab提供了专门求导数的符号函数diff,能够帮助解决求导数和微分的问
18、题.diff的调用格式和功能如表6.8所示表6.8 diff函数使用说明格式功能d=diff(S,x)求符号函数关于变量的一阶导数(偏导数)d=diff(S,x,n)求符号函数关于变量的阶导数(偏导数)注:对于符号函数S,也可以是普通的Matlab内置或自定义函数.下面我们通过两个实例来说明这函数的用法:例6-7 求导数,求偏导数输入: df1=diff(sin(x),x),df2=diff(sin(x*y),x),.df3=diff(sin(x*y),x,3)结果:df1 =cos(x)df2 =cos(x*y)*ydf3 =-cos(x*y)*y3或输入: syms x y df1=dif
19、f(sin(x),x),df2=diff(sin(x*y),x),.df3=diff(sin(x*y),x,3)也可得到相同的结果,后面类似问题两种输入方法均可,不再赘述.例6-8 求函数对变量的一阶、二阶偏导.在例6-4定义的函数基础上,我们在命令窗口中输入如下信息: syms x y df1=diff(hanshu1(x,y),x),df2=diff(hanshu1(x,y),x,2)结果:df1 =2*x+cos(x*y)*ydf2 =2-sin(x*y)*y2多元函数的雅克比矩阵是一个非常重要的概念,多元函数的积分、矩阵微积分及坐标转换等都要用到它,在Matlab中用jacobian函
20、数求雅克比矩阵,其调用格式如下:j=jacobian(F,V)其中是函数向量,是自变量向量.例6-9 计算函数向量关于自变量的雅克比矩阵.在命令窗口中输入下列命令: syms x y z t; f=x2 sin(x*y*z) exp(t); v=x y z t; j=jacobian(f,v)输出结果为:j = 2*x, 0, 0, 0 cos(x*y*z)*y*z, cos(x*y*z)*x*z, cos(x*y*z)*x*y, 0 0, 0, 0, exp(t)注:关于向量、矩阵的表示及相关运算,我们将在下一节作详细介绍,这里主要介绍一下jacobian函数的用法. 6.2.3 积分运算M
21、atlab提供了两类计算积分的函数,一类是符号积分函数,一类是数值积分函数.下面我们先介绍符号积分函数int,其调用格式和功能如表6.9所示:表6.9 int函数使用说明格式功能int(F)求符号表达式求关于自变量的不定积分int(F,s)求符号表达式求关于自变量的不定积分int(F,a,b)求符号表达式当自变量从到的定积分int(F,s,a,b)求符号表达式当自变量从到的定积分下面我们通过实例来说明函数的用法:例6-10 计算和输入: syms x y f1=int(y*sin(x),x),f2= int(int(x*y,y,0,sqrt(1-x2),x,0,1)结果:f1 =-y*cos(
22、x)f2 =1/8下面我们来介绍数值积分函数quad,dblquad,triplequad的用法表6.10 数值积分函数使用说明格式功能quad(F,a,b)从到计算符号函数的数值积分dblquad(F,x1,x2,y1,y2)计算符号函数在区域上的二重数值积分triplequad(F,x1,x2,y1,y2,z1,z2)计算符号函数在区域上的三重数值积分注:关于上述三个函数更详细的用法请参考软件提供的帮助.例6-11 计算和输入:f1=dblquad(sqrt(y)*sin(x),-1,1,0,2),. f2=triplequad(y*sin(x)+z*cos(x),0,pi,0,1,-1,
23、1)结果:f1 = -4.4306e-018f2 = 2.0000 6.2.4 微分方程的求解Matlab提供了两类求解微分方程的函数,一类是求微分方程的符号解,一类是求微分方程的数值.本部分主要介绍利用dsolve求微分方程的符号解,其调用格式如表6.11.表6.11 dsolve函数使用说明格式功能dsolve(equation)求方程equation通解,自变量默认为dsolve(equation,condition)求方程equation满足初始条件condition的特解,自变量默认为dsolve(equation,x)求方程equation通解,自变量为dsolve(equatio
24、n,condition,x)求方程equation满足初始条件condition的特解,自变量为说明:(1)equation代表常微分方程式,且用Dy表示,用D2y表示,以此类推. Condition为初始条件.(2)函数dsolve可用来求常微分方程、方程组的解.例6-12 求方程的通解.输入: dsolve(Dy=(y+x3)/x)结果:ans =-x3+exp(1/x*t)*C1这显然是个错误的结果,程序将看作是自变量,而是常量了.正确输入如下:dsolve(Dy=(y+x3)/x,x)结果:ans =1/2*x3+x*C1例6-13 求方程满足的特解.输入:solve(D2y-2*Dy
25、-3*y=3*x*exp(2*x),y(0)=0,Dy(0)=1,x)结果:ans =-1/3*exp(2*x)*(3*x+2)-1/3*exp(-x)+exp(3*x)求常微分方程数值解方面,Matlab提供了比较丰富的函数,其中常用的为ode45和ode32,两个函数都运用了基本的龙格-库塔(Runge-Kutta)数值积分法的变形,其基本调用格式如下:t,Y=ode45(diffeq,t0 tn,y0,options,arg1,arg2,.)其中,第一个参数diffeq是一个m文件的名字,该文件用来计算微分议程的右端表达式;t0,tn定义了求解总区间,如果t0未知,则假设其为0;y0为初
26、始条件;options为函数ode45参数;而参数arg1,arg2,.是传给用户自己定义的diffeq程序的.ode32用法与ode45相同. 求常微分方程的数值解问题现阶段我们遇到不是很多,所以在这里不作详细讲解,如果用到可查阅Matlab帮助文件.6.3 线性代数与Matlab前面我们的例子中的变量都是标量,而Matlab的强大之处在于它是以数组作为变量来进行运算的,这将使我们处理大量的数据变得十分方便,本节我们将重点介绍如何定义和使用Matlab中的矩阵变量来进行简单的计算. 6.3.1 向量的创建及对元素的操作行向量在Matlab表示为:,列向量在Matlab中表示为,其中的可以是数
27、值、字符串、预先定义的变量或表达式.向量的创建可以是直接按格式输入元素,也可以用Matlab函数完成,这里面有两个常用的创建向量的命令分别是冒号(:)和linspace,其调用格式如下(1)其中表示向量的起始值,表示步长,表示向可能结束值,若向量的元素为个,则它们满足 . (2) =linspace() 它表示在区间上等距离的取个数,作为向量的值, 系统默认为100.例如输入如下信息:x1=0.2:2:12,x2=linspace(0.2,12,6)结果:x1 = 0.2000 2.2000 4.2000 6.2000 8.2000 10.2000x2 = 0.2000 2.5600 4.92
28、00 7.2800 9.6400 12.0000对于向量及其元素的操作见表6.12所示表6.12 向量及其元素操作格式功能n=length(x)返回向量元素个数x求向量的转置x(i)取向量的第个元素x(i)=a取向量的第个元素赋值为x(end)取向量的最后一个元素y=x(i,j,k)取的第,元素构成新的向量xnew,index=sort(x)xnew是升序排列后的向量,index是xnew中元素在中的位置构成的向量index=find(condition)将向量中满足condition条件的元素下标做成向量indexxmax,kmax=max(x)xmax表示向量的最大值,kmax表示最大值位
29、置xmin,kmin=min(x)功能与max类似f(x)对向量中每个元素求函数值sum(x)求向量的所有元素之和cumsum(x)返回以向量的元素的部分和数列为元素的向量norm(x)求向量的范数mean(x)求向量的平均值std(x)求向量的标准差在对向量及其元素的操作过程中,上述命令总是组合使用.例6-14 在区间上等间距取8个值,做成行向量,求(1)求各点处正弦值,取出其中最大值,并指明位置(2)取出所有大于0的正弦值,将其加上1后,做成一个新的列向量.为一更好的完成上述工作,我们将其做成一个m文件,程序如下:x=linspace(0,2*pi,8) %取向量xy=sin(x) %对x
30、中的每一个元素计算sin值,新向量赋值给向量yymax,kmax=max(y) %求y中的最大值index=find(y0) %将y中大于0的元素下标做成一个向量y1=y(index)+1 %利用下标向量index将y中小于0的元素取出加1y1=y1 %将行向量转置为列向量,重新赋值给y1保存程序后运行,结果为: x = 0 0.8976 1.7952 2.6928 3.5904 4.4880 5.3856 6.2832y = 0 0.7818 0.9749 0.4339 -0.4339 -0.9749 -0.7818 -0.0000ymax = 0.9749kmax = 3index = 2
31、 3 4y1 = 1.7818 1.9749 1.4339y1 = 1.7818 1.9749 1.4339 6.3.2 矩阵的创建及对元素的操作一个3行4列的矩阵在Matlab表示为=a11,a12,a13,a14;a21,a22,a23,a24; a31,a32,a33,a34;a41,a42,a43,a44或 =a11,a12,a13,a14; a21,a22,a23,a24; a31,a32,a33,a34; a41,a42,a43,a44其中可以是数值、字符串、预先定义的变量或表达式,上述格式中的逗号可以用空格代替.简而言之,矩阵在Matlab中表示为用 括起来的一组元素,同一行元素
32、之间用逗号(,)或空隔分隔,行与行之间用分号(;)分隔.矩阵的创建可以是直接按格式输入元素,也可以用Matlab函数完成,表6.13给出了创建特殊矩阵的函数表6.13 创建特殊矩阵函数格式功能ones(m,n)创建阶所有元素都是1的矩阵zeros(m,n)创建阶所有元素都是0的矩阵diag(a)创建阶对角阵,对角线上元素为向量的元素eye(n)创建阶单位矩阵magic(n)创建阶魔方阵repmat(x,m,n)创建阶所有元素都是的矩阵U,V=meshgrid(s,t)由两个行向量,构建两个维数相同的矩阵和注:repmat参数中的可以是标量、向量或矩阵.为了能更好的说明meshgrid的功能,我
33、们给出下面一个简单的例子:如果,则命令:X,Y=meshgrid(x,y)将返回的两个的矩阵: ,这个函数在做三维图形时会有十分有用.向量可以看作是列(行)矩阵,而矩阵的每一列(行)也可以看作是一个向量,所以我们也可以通过向量的组合来创建矩阵,比如下面的命令就可以创建一个新的矩阵:输入: A=2:3:15;linspace(10,21,5);ones(1,5) 结果:A = 2.0000 5.0000 8.0000 11.0000 14.0000 10.0000 12.7500 15.5000 18.2500 21.0000 1.0000 1.0000 1.0000 1.0000 1.0000
34、对于矩阵及其元素的操作见表6.14所示表6.14 矩阵及其元素操作格式功能A(i,j)取出矩阵的第行与第列交叉点元素A(i,j)=a赋值操作A(i,: )取出矩阵的第行所有元素,构成一个行向量A( :,j)取出矩阵的第列所有元素,构成一个列向量A(i1,i2,j1,j2,j3)取出矩阵的行和行,与列和列和列交叉点的元素,构成的一个子矩阵sort(A)按升序排列矩阵列元素max(A)求矩阵中每一列的最大值min(A)求矩阵中每一列的最小值sum(A)将矩阵的各列元素相加,返回一个长度等于列数的行向量m,n=size(A)返回矩阵的行数和列数f(A)对的每个元素求函数值注:A(i,J=或A(:,j
35、)=,则表示删除第行或第列.例6-15 给定矩阵,完成如下工作(1)将矩阵的第4列全部赋值为0元素.(2)求矩阵的最大值.(3)取A的第1,3行和2,3列交叉点元素,取自然对数后,构成新的矩阵.我们将其做成一个m文件,程序如下:A=1,2,3,4;5,6,7,6;9,10,11,12; %创建矩阵AA(:,4)=0 %A的第4列全部赋值为0maxvalue=max(max(A) %求矩阵A的最大值B1=A(1,3,2,3) %B1为A的第1,3行,第2,4列元素构成的矩阵B=log(B1) %B中的每个元素取自然对数保存后,运行结果如下:A = 1 2 3 0 5 6 7 0 9 10 11
36、0maxvalue = 11B1 = 2 3 10 11B = 0.6931 1.0986 2.3026 2.3979 6.3.3 矩阵的运算矩阵的运算主要分成两类,矩阵的点运算和线性代数中的矩阵运算. 同时需要指明的是,因为向量可以看成是特殊的矩阵,所以本部分所讲的关于矩阵的各种运算,同样适用于向量. 下面我们分别将两类运算做一介绍.在Matlab中,矩阵的点(.)运算是指对同阶矩阵中逐个元素进行的算术运算,分别为点乘(.*)、点除(./)和点幂(.).下面我们以两个矩阵来分别说明其功能.令,同时则这里需要说明的是对于点乘,如果且为标量,则点可以省略,即,类似的,如果且为标量,则;对于点除,
37、如果且为标量,则点可以省略,即,但是如果且为标量,则点不可以省略,;对于点幂运算,不论是还是取标量,点都不可以省略,即和 .例6-16 求在区间区间内,等距离取6个值时,表达式的值. 其中,.M文件的程序代码如下:a=0.3;b=1.2;c=pi/3;x=linspace(0,2,6);y=exp(-a*x).*cos(b*x+c)./(x+c)结果:y = 0.4775 0.0267 -0.1800 -0.2463 -0.2302 -0.1718例6-17 利用向量元素操作函数中的sum和cumsum,求表达式的值,及其部分和数列对应向量.输入: n=1:5; an=n.n,%计算级数一般项
38、 s=sum(an),%求表达式值 sn=cumsum(an)%求部分和 结果:an = 1 4 27 256 3125s = 3413sn = 1 5 32 288 3413在线性代数中矩阵的运算包括:加、减、乘、转置、求逆等,其基础理论在前面都做详细的介绍,这里不再赘述。Matlab对于矩阵的这些运算都能够实现,表6.15给出相关函数及其使用说明.表6.15 矩阵数学运算的函数格式功能C=ABC表示矩阵与的和(差)C=A*BC表示矩阵左乘矩阵 det(A)求方阵的行列式inv(A)或A(-1)求矩阵的逆矩阵P,lamda=eig(A)lamda返回的是矩阵的特征值,是特征值对应的单位特征向
39、量构成的正交矩阵rank(A)确定矩阵线性无关的行或列的值(矩阵的秩)A返回矩阵的转置Ak返回矩阵的次幂trace(A)返回矩阵的迹poly(A)返回的是矩阵的特征多项式(系数向量)rref(A)将化成阶梯形行最简形式(与等价)orth(A)将非奇异矩阵正交化规范化flipud(A)将矩阵按列旋转180fliplr(A)将矩阵按行旋转180注:如果矩阵和是行向量和列向量,则表示内积,也可以用C=dot(A,B)表示.例6-18 化二次型用正交变换化为标准形,并写出变换矩阵.因为二次型矩阵,所以先用Matlab求特征值和正交矩阵如下: A=1 1 3;1 2 1;3 1 5;. Q,lamda=
40、eig(A)结果:Q = 0.8835 -0.0253 0.4677 -0.1667 -0.9501 0.2636 -0.4377 0.3108 0.8437lamda = -0.6749 0 0 0 1.6994 0 0 0 6.9754所以二次型的标准形为,变换矩阵为. 求的逆矩阵为: inv(Q) 结果为: ans = 0.8835 -0.1667 -0.4377 -0.0253 -0.9501 0.3108 0.4677 0.2636 0.8437 进一步我们可以验证正交变换的一个性质:. 同时,我们可得到. 通过下面的命令,我们还可以验证正交矩阵将矩阵对角化为矩阵lamda: Q*A
41、*Q 其结果是矩阵lamda. 注:因为Matlab进行的是数值计算,所以给出的解为数值解,而我们在教材上计算得出的解基本上都是解析解,故两者之间有一些区别. 6.3.4 方程组求解Matlab对于非齐次线性方程组的求解有如下两种方法:法1:X=Ab 或 X=inv(A)*b法2:C=A,b %写出增广矩阵 D=rref(C) %D的最后一列元素就是所求的解例6-19 求方程组的解.法1程序如下:输入: A=0 -1 -1 1;1 1 1 1;2 4 1 -2;3 1 -2 2;. b=0;6;-1;3;. X=Ab结果:X = 2.0000 -1.0000 3.0000 2.0000法2程序如下: C=A,b;D=rref(C)