fname=程序设计实践.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
fname=程序设计实践

其中的aij是变量xj在第i行的系数,b1,b2…,bm等等是已知的常数,而x1,x2,…,xn等等则是要求的未知数。 用线性代数来描述的话,则线性方程组可以写成: AX=B 这里的A 是m×n 矩阵,为方程组的系数矩阵,X是由n未知数构成的列向量, 是列向量,B 是含有m 个常数列向量。 现在要解决的问题是在已知矩阵 A m×n和向量 B m×1的情况求得未知向量 X的值。 如果有一组数x1、x2、……xn使得方程组两边的等号都成立,那么这组数就叫做方程组的解。一个线性方程组的所有的解的集合会被简称为解集。根据解的存在情况,线性方程组可以分为三类: 有唯一解的恰定方程组。 解不存在的超定方程组。 有无穷多解的欠定方程组(也被通俗地称为不定方程组)。 下面按照线性代数的形式,分别用前面所说的三种方法,用FORTRAN语言来实现线性方程的求解。 5.2.1 高斯消去法 高斯消去法实际上就是我们俗称的加减消元法高斯和约当得名它是线性代数中的一个算法,用于决定线性方程组的解,决定矩阵的秩,以及决定可逆方矩阵的逆。当用于一个矩阵时,高斯消去产生“行消去梯形形式” 为了描述方便,在每个变量上加一个上标(i),代表高斯消去法的第i步矩阵中各个数据的值。原始方程组中i=0,因此,增广矩阵Z改写为: 假设m≤n,高斯消去法计算过程如下: (1)从a11开始,通过矩阵的初等变换,将第一列的其他元素变为0; (2)再从新的a22开始重复(1)的过程; (3)以此类推,最多通过m步,最终将增广矩阵变为如下形式: 其中,主对角线左面的值都为0。 (4)从amm开始,到a22利用矩阵的初等变换,将增广矩阵中第m列到第二列其他元素变为0; (5)每行除以主对角线上的元素,即将对角线上的元素变为1; (6)B列数据即为方程组的解。 当m=n且方程组有唯一解时,高斯消去法能很好的求出方程的解。 2.程序代码 (1)高斯消去法模块: 其中:A(N,N)系数矩阵 b(N)右向量 N方程维数 x 方程的根 module gauss contains subroutine solve(A,b,x,N) implicit real*8(a-z) integer::i,k,N real*8::A(N,N),b(N),x(N) real*8::Aup(N,N),bup(N) !Ab为增广矩阵 [Ab] real*8::Ab(N,N+1) Ab(1:N,1:N)=A Ab(:,N+1)=b ! 这段是 高斯消去法的核心部分 do k=1,N-1 do i=k+1,N temp=Ab(i,k)/Ab(k,k) Ab(i,:)=Ab(i,:)-temp*Ab(k,:) end do end do ! 经过上一步,增广矩阵已经化为每行主对角线左面的数据都为0的形式。 Aup(:,:)=Ab(1:N,1:N) bup(:)=Ab(:,N+1) !调用用上三角方程组的回带方法 call uptri(Aup,bup,x,n) end subroutine solve subroutine uptri(A,b,x,N) implicit real*8(a-z) integer::i,j,N real*8::A(N,N),b(N),x(N) x(N)=b(N)/A(N,N) !回带部分 do i=n-1,1,-1 x(i)=b(i) do j=i+1,N x(i)=x(i)-a(i,j)*x(j) end do x(i)=x(i)/A(i,i) end do end subroutine uptri end module gauss !主程序 program main use gauss implicit real*8(a-z) integer,parameter:: N=4 integer::i,j real*8::A(N,N),b(N),x(N) !系数矩阵数据存放在h:\fs\fin.txt中。 open(unit=11,file=h:\fs\fin.txt) !结果存放在h:\jg\fout.txt中 open(unit=12,file=h:\jg\fout.txt) read(11,*) !读入A矩阵 read(11,*)((A(i,j),j=1,N),i=1,N) !读入B向量 read(11,*) b call solve(A,b,x,N) write(12,101)x 101 format(T5,高斯消去法计算结果,/,T4,x=,4(/F12.8)) print*,b !在屏幕上显示方程的跟。 end program main 3.运算实例 5.2.2

文档评论(0)

haihang2017 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档