1、 毕业论文 开题报告 信息与计算科学 MATLAB 在线性代数中的应用 一、选题的背景、意义 1.选题的背景 线性代数是大学理、工、经管、医、农等学科所有专业必修的一门重要数学基础课。它作为离散性数学在工科数学中的代表,随着计算机科学日新月异的发展,许多非线性问题高精度地线性化与大型线性问题的可计算性正在加快逐步实现,因此无论从理论上还是从应用上看,线性代数的地位更趋重要。 1 MATLAB 软件是目前教学与科研中最具影响力、最有 活力、最具可靠性的数学软件 2 。它起源于矩阵运算, MATLAB 名字由 MATrix和 LABoratory两词的前三个字母组合而成。 3 作为高度集成的计算机
2、语言,它携带几十个软件包,提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面设计,与其他语言的接口也非常便捷。在欧美的大学里,诸如应用统计分析、自动控制、数字信号处理、模拟与数字通信、时间序列分析、动态系统仿真等课程都把 MATLAB作为教学内容。 4 2.选题的意义 线性代数作为代数的一个主要分支,以向量空间与线性变换作为研究对象,就其在数学、物理学以及经济学等分支的应用来说,线性代数的离散化思想具有非常特殊的作用,因此也成为我国大学生必修的公共基础课之一。此外,线性代数思想特别使用于计算机编程,它以坐标法和向量法作为主要的研究工具,通过矩阵和向量性质研究多变量之间的线性关系
3、,因此, MATLAB与线性代数的紧密结合有着非常广阔的前景。 6,5 二、研究的基本内容与拟解决的主要问题 线性代数是一门应用性很强,但又在理论上进行了高度抽象的数学学科。一方面,中学生就学过了二元一次代数方程的解法,代入法和消去法大概每个人都会记忆一辈子,这就是做简单的线性代数。当把方程的阶次提高到了三元一次以上时,它不但要求较高级的抽象思维能力,而且也要求用十分烦琐的计算步骤才能解决问题。对于数学家,他们重视前者,这无可厚非;但对于大多数工科学生,他们更需要的是能应用它的理论,指导完成实际的计算。事实上,线性代数的那种单调、机械、枯燥的运算,只是由于计算机的出现才赋予了在应用方面的生命力
4、。 7 20世纪 80年代,出现了个人计算机并迅速普及。新的硬件也带动了新的软件,出现了新颖的科学计算语言,也称为数学软件,因为它具有高效、可视化和推理能力等特点。 8 计算机技术的发展已经对人们的物质生活和文化生活产生了十分巨大的影响,其最显著的功能就是高速度地进行大量计算,这种告诉计算使得许多过去无法求解的问题成为可能,因而科学计算已成为与理论研究、科学实验并列的科学研究的三大手段。 9 MATLAB 是“ 矩阵实验室”( Matrix Laboratory)的缩写,它是一种以矩阵运算为基础的交互式程序语言,当然它特别适合于线性代数,并能更广泛地适应科学和工程计算及绘图的需求。与其他计算机
5、语言相比, MATLAB 的特点是简捷和智能化,适应科技专业人员的思维方式和书写习惯,使得编程和调试效率大大提高。它用解释方式工作,键入程序立即得出结果,人机交互性能好,易于调试并为科技人员所乐于接受。特别是它可适应多种平台,并且随计算机硬软件的更新及时升级。 11,10 MATLAB的基本数据单元 是矩阵,所有的变量都可用矩阵来表示,向量是行数为 1或列数为 1的矩阵,而标量则是 1行 1列的特例矩阵,在编程时不必像其他语言一样为矩阵定义维数和大小。用 MATLAB 求解一个问题比编写 Fortran、 C或 Basic语言程序求解所用的时间要少得多。此外,它的数学表达式和运算结果也几乎和数
6、学解析的表现形式完全相同。 13,12 2.1 MATLAB 环境下矩阵的建立 MATLAB环境下,线性代数的计算有以下几方面内容。 ( 1) 矩阵的创建 ( 输入 ) 在 MATLAB 中 , 输入矩阵时每一行 元素 用分号分隔 , 格式为 : a, b, c;d, e, f;g, h, i 。 ( 2) 求方阵的行列式 求行列式是通过 det 函数求解。 例 1 求下列矩阵的行列式 19249047858990649852146810A解 程序为 A=10,8,6,4,1;2,5,8,9,4;6,0,9,9,8;5,8,7,4,0;9,4,2,9,1; D=det(A) 结果为 D=5.9
7、720e+003=5972 ( 3) 求逆矩阵 用 inv 来实现 , 要注意大小写字母的区别。 例 2 设4431941351156303A ,试求其逆阵 1AV 解 按上述方法写成 MATLAB程序 A=3,0,3,-6;5,-1,-1,-5;-3,1,4,-9;1,-3,4,-4; V=inv(A) 结果为 0 3 0 3.01 5 1 5.02 4 2 4.02 4 2 4.01 0 1 0.01 7 1 7.04 7 4 7.05 8 5 9.02 5 2 5.00 7 0 7.03 1 3 1.05 3 5 4.00 4 0 4.01 3 1 3.00 1 0 1.00 2 3 2
8、 3V 8 ( 4) 矩阵的基本运算 可算加法“ +”、减法“ -”、乘法“ *” , 及数乘等。 14 那么,我们先来看如下的一个矩阵3102111aaA ,问常数 a 满足什么条件时,矩阵 A可逆,并求其逆矩阵;特别给出当矩阵 A的行列式等于 -6时的逆矩阵。 解这样的带有符号变量的计算问题用手工方法是很难完成的。现编程如下: %判断符号矩阵何时可逆,并求其逆。 clear all syms a %符号变量说明 disp( 输入的矩阵是: ) A=1 1 -1;a 2 0;-1 a 3 %符号矩阵输入 D=det(A); Disp( 当参数 a 不等于 ) p=solve(D) %求符号矩
9、阵行列式值函数的零点 disp( 时其有逆阵: ) B=inv(A) %求符号逆矩阵 q=solve(D+6); %求行列式等于指定值 -6时的参数 a 的值 L=length(q); For i=1:L disp( 当参数 a 等于 ) subs(q(i) %将参数 a 的值 q 转换为实数形式 disp( 时矩阵的行列式等于指定值( -6),其逆矩阵为: ) B=sym(subs(B,a,subs(q(i) %求 a 等于 )(iq 时的逆矩阵,并以简化形式输出 End 程序执行结果是: 输入的矩阵是: A 3,10,2,1,1,1aa 当参数 a 不等于 p 14时,其有逆阵 B )2*
10、34/()2(),2*34/()1(),2*34/()22()2*34/(),2*34/(2),2*34/(*3)2*34/(2),2*34/()3(),2*34/(6aaaaaaaaaaaaaaaaaaaaaaaa 当参数 a 等于 ans 5 时矩阵的行 列式等于指定值( -6),其逆矩阵为: B 6/7,3/2,2/96/5,3/1,2/53/1,3/1,1 当参数 a 等于 ans 2 时矩阵的行列式等于指定值( -6),其逆矩阵为 B 6/7,3/2,2/96/5,3/1,2/53/1,3/1,1 7 2.2 Matlab 环境下克莱姆法则的应用 线性方程组可以 分成两类 , 一类是
11、未知量个数与方程的个数相等 , 另一类是未知量个数与方程的个数不等 , 对于前一类特殊的线性方程组 , 我们可以采用克莱姆法则( Cramer) . 13 如果线性方程组的系数矩阵 nnnnnnnnnnbxaxaxabxaxaxabxaxaxa22112222212111212111(I) nnnnaaaaD1111 那么有设线性方程组( I)的系数行列式 0D ,则( I)有唯一解,且解可用行 列式表示为 DDxDDxDDx nn , 2211其中 ),2,1( njD j 是把系数行列式 D中第 j 列元素方程组( I)右端相应的常数项代替而得到的 n阶行列式,即 nnjnnjnnnjjn
12、jjjaabaaaabaaaabaaD1,1,121,221,22111,111,111从而若 pnkjiPbPa kij ),2,1,(, 为某个数域,则解 nxxx , 21 均属于 P 。 1 那么用 MATLAB来求解满足 Cramer法则条件的方程组 03641230842143214314321431xxxxxxxxxxxxxx解程序如下: %求解满足 Cramer法则条件的 A=1 0 -1 1;2 -1 4 8;3 0 2 1;4 1 6 3 %输入系数矩阵 b=1 0 -1 0 %输入常数列向量 m,n=size(A); b=b(:);k=size(b,1); if m=n|
13、m=k %检查输入正确性 disp( 您输入的系数矩阵或常数列向量有错误! ) return else disp( 系数行列式的值为: ) D=det(A) %计算并输入系数行列式的值 If D=0 Disp( 输入的系数行列式不满足 Cramer法则的条件! ) Else For j=1:n B=A;B(:,j)=b;Dj(j)=det(B);end %求用常 数列替换后的行列式的值 disp( 用常数列 b替换系数行列式中的第 j列所得到的行列式的值分别为: ) Dj disp( 原方程组 AX=b 有唯一解,解是: ) X=Dj./D %输出原方程组的(唯一)解 end end 程序执行
14、的结果是: A 3614120384121101b 0101 系数行列式的值为: 57D 用常数列 b 替换系数行列式中的第 j 列所得到的行列式的值分别为: 34321 2 69 Dj 原方程组 bAX 有惟一解,解是: 5965.05614.02105.21579.0 X 7 对于方程个数与未知量个数不等的情况我们来 看以下题目 例 3 用编程方法求解下列齐次线性方程组 02520332034202543543215432154321xxxxxxxxxxxxxxxxxx解 编程 %求齐次线性方程组 AX=0的基础向量 clear all A=1 2 1 1 1;2 4 3 1 1;-1 -
15、2 1 3 -3;0 0 2 5 -2; %输入系数矩阵 m,n=size(A); if A=0 disp( 输入的系数矩阵为零矩阵! ) return else disp( 齐次线性方程组的系数矩阵是: ) A R,s=rref(A); %调用初等变换子函数 disp( 经过初等变换,系数矩阵 A化为如下简化阶梯形: ) R disp( 线性代数组 AX=0只有惟一零解! ) r=length(s) if r=n else %- %从矩阵 R构成基础解向量 t=0; for i=1:r h(i)=s(i); %确定解向量 x的分量次序 end for j=1:n k=0; for i=1:r
16、 if j=s(i) k=1;break;end end if k=0 t=t+1; h(r+t)=j ; %确定解向量 x的分量次序 B(:, t) =(-1).*R(:,j); end end B(r+1:n,1:n-r)=eye(n-r,n-r); for i=1:n C(h(i),:)=B(i,:); %按变量原次序构成基础解向量 end %- disp( 线性方程组 AX=0的基础解向量为 : ) X=C end end 程序结果为 A= 1 2 1 1 1 2 4 3 1 1 -1 -2 1 3 -3 0 0 2 5 -2 经过初等行变换,系数矩阵 A化为如下简化阶梯形: R= 1
17、 2 0 0 2 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 0 系数矩阵 A的秩为 r= 3 线性方程组 AX=0的基础解(列)向量为: X= -2 -2 1 0 0 1 0 0 0 1 7 三、研究的方法与技术路线、研究难点,预期达到的目标 1.研究内容 ( 1)了解线性代数理论和 MATLAB软件产生的背景及意义,知道两者的基本发展历程。 ( 2)对线性代数问题和 MATLAB 软件应用有深刻 认识,掌握解决线性代数问题的基本方法,了解线性代数研究的基本问题。 ( 3)清楚线性代数理论在 MATLAB 环境下的应用在今后的发展方向及进一步研究需要的知识。 2.研究方法及技术路线