网站大量收购独家精品文档,联系QQ:2885784924

实验3解线性方程组的直接方法.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验3解线性方程组的直接方法

实验3 解线性方程组的直接方法 实验目的: 1、 掌握解线性方程组的几种基本常用的直接法,并能比较它们各自的优缺点; 2、 能熟练地对方阵A进行三角分解; 3、 会用追赶法求解三对角方程组。 实验内容: 编写GAUSS消去法及列主元解法、三角分解、追赶法的通用程序,自己选择实例验证。 恰定方程组由 n个未知数 ,n 个方程构成 ,对 AX = b 在线性代数教科书中 ,最常用的方程解法有: (1)利用cramer 公式求解法;   (2)利用矩阵求逆解法 ,即 AX = b; (3)利用gauss消去法;      (4)利用 LU 分解法求解. 一般来说 ,对于维数不高、条件数不大的矩阵 ,上面4 种解法所得的结果差别不大.前两种解法的真正意义是在其理论上 ,而不是实际的数值计算.而 Gauss消去法 ,其本质上利用 LU 分解 ,在MATLAB 中 ,出于对算法稳定性的考虑 ,行列式及逆矩阵的计算大都在 LU 分解的基础上进行.因此 ,在MATLAB 中 ,求解这类方程组时可直接采用表达式:X = A \ b. 定理3  (LU 分解)若 n阶矩阵 A 可逆且顺序主子式不为零 ,则 A 可以分解为一个单位下 三角阵L 和一个上三角阵U 的积A = LU ,并且这种分解是唯一的. 由于 AX = LUX = b 记 UX= Y ,则 LY= b ,从而由 LY = b 求得 Y = L \ b ,再由 UX =Y 求 X = U \ Y ,X = U \ (L \ b) MATLAB 中 ,用[L ,U ]=lu (A)函数求得 L ,U ,再用 X = U \ (L \ b)求得解. 如果矩阵 A 是对称正定矩阵 ,可采用 Cholesky分解法 ,矩阵的 Cholesky分解定理为: 如果 A 是对称正定矩阵 ,则(至少)存在一个实的下三角矩阵 L 使得 A = LL’ 此外 ,我们可以限定矩阵 L 的对角元素全部为正 ,那么 ,对应的分解 A = LL’ 是唯一的. 在MATLAB 中 ,用 L =chol(A)函数求得 L ,再用 X = L \ (L’\ b)求得解. Guass法(LU 分解)和cholesky法的基础都是把线性方程组的矩阵分解为下三角矩阵和上三角矩阵的乘积 ,但对于对称正定矩阵的情形 ,cholesky 比 Gauss 法更加简便. 我们也可以使用 注意:在求解方程时 ,尽量不要用 inv(A) * b 命令 ,因为逆矩阵 A 计算精度容易受到舍入误差的影响 ,而应采用 A \ b 的解法.因为后者的计算速度比前者快、精度高 ,尤其当矩阵 A 的维数比较大时.另外 ,除法命令的适用性较强 ,对于非方阵的 A ,也能给出最小二乘解 列主元高斯消去法计算步骤 将方程组用增广矩阵表示。 步骤1:消元过程,对 选主元,找使得 如果,则矩阵奇异,程序结束;否则执行(3)。 如果,则交换第行与第行对应元素位置,,。 消元,对,计算对,计算 步骤 2:回代过程: 若则矩阵奇异,程序结束;否则执行(2)。 对,计算 实验内容: 编写高斯列选主元素法的通用程序 Gauss列主元法: function [X,det]=myGauss(A) %列主元 sign=1; [n,m]=size(A); if n~=m-1 error break end for k=1:n-1 [l,m]=max(abs(A(k:n,k))); if A(k+m-1,k)==0 error break end if m~=1 T=A(k,:); A(k,:)=A(k+m-1,:); A(k+m-1,:)=T; sign=-sign; end for i=k+1:1:n A(i,:)=A(i,:)-A(k,:)*A(i,k)/A(k,k); end if A(n,n)==0 error break else X(n)=A(n,n+1)/A(n,n); end for k=n-1:-1:1 X(k)=(A(k,n+1)-dot(A(k,k+1:n),X(k+1:n)))/A(k,k); end end det=A(1,1); for i=

文档评论(0)

qwd513620855 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档