爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 24060|回复: 43

[源代码] 高斯消元法求解线性齐次方程组

[复制链接]

新浪微博达人勋

 成长值: 19710
发表于 2011-10-21 23:20:23 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 兰溪之水 于 2011-10-23 13:10 编辑

在别人的基础上扩展加强,修正的,高斯消元法求解线性齐次方程组!!!!!
  1. module LinearAlgebra
  2. implicit none
  3. contains
  4. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  5. !!!!!!!!                     !!!!!!!!!
  6. !!!!!!!! Gauss_Jordan法 !!!!!!!!!
  7. !!!!!!!! !!!!!!!!!
  8. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  9. subroutine Gauss_Jordan(A,S,ANS)
  10. implicit none
  11. real :: A(:,:)
  12. real :: S(:)
  13. real :: ANS(:)
  14. real, allocatable :: B(:,:)
  15. integer :: i, N
  16. N = size(A,1)
  17. allocate(B(N,N))
  18. ! 保存原先的矩阵A,及数组S
  19. B=A
  20. ANS=S
  21. ! 把B化成对角矩阵
  22. call Upper(B,ANS,N) ! 把B化成上三角矩阵
  23. call Lower(B,ANS,N) ! 把B化成下三角矩阵

  24. ! 求解
  25. forall(i=1:N)
  26. ANS(i)=ANS(i)/B(i,i)
  27. end forall
  28. return
  29. end subroutine Gauss_Jordan
  30. ! 输出等式子程序
  31. subroutine output(M,S)
  32. implicit none
  33. real :: M(:,:), S(:)
  34. integer :: N,i,j
  35. N = size(M,1)
  36. ! write中加上advance="no",可以中止断行发生,使下一次的
  37. ! write接续在同一行当中.
  38. do i=1,N
  39. write(*,"(1x,f5.2,a1)", advance="NO") M(i,1),'A'
  40. do j=2,N
  41. if ( M(i,j) < 0 ) then
  42. write(*,"('-',f5.2,a1)",advance="NO") -M(i,j),char(64+j)
  43. else
  44. write(*,"('+',f5.2,a1)",advance="NO") M(i,j),char(64+j)
  45. end if
  46. end do
  47. write(*,"('=',f8.4)") S(i)
  48. end do
  49. return
  50. end subroutine output
  51. ! 求上三角矩阵的子程序
  52. subroutine Upper(M,S,N)
  53. implicit none
  54. integer :: N
  55. real :: M(N,N)
  56. real :: S(N)
  57. integer :: I,J
  58. real :: E
  59. do I=1,N-1
  60. do J=I+1,N
  61. E=M(J,I)/M(I,I)
  62. M(J,I:N)=M(J,I:N)-M(I,I:N)*E
  63. S(J)=S(J)-S(I)*E
  64. end do
  65. end do
  66. return
  67. end subroutine Upper
  68. ! 求下三角矩阵的子程序
  69. subroutine Lower(M,S,N)
  70. implicit none
  71. integer :: N
  72. real :: M(N,N)
  73. real :: S(N)
  74. integer :: I,J
  75. real :: E
  76. do I=N,2,-1
  77. do J=I-1,1,-1
  78. E=M(J,I)/M(I,I)
  79. M(J,1:N)=M(J,1:N)-M(I,1:N)*E
  80. S(J)=S(J)-S(I)*E
  81. end do
  82. end do
  83. return
  84. end subroutine Lower
  85. end module
  86. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  87. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  88. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  89. !!!!!!!!! !!!!!!!!!
  90. !!!!!!!!! 求解齐次线性方程组 !!!!!!!!!
  91. !!!!!!!!! !!!!!!!!!
  92. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  93. program main
  94. use LinearAlgebra
  95. implicit none
  96. integer:: N ! Size of Matrix
  97. real, allocatable :: A(:,:),S(:),ans(:)
  98. integer :: i
  99. write(*,*)"请输入要求方程组的元数:"
  100. read(*,*) N
  101. allocate(A(N,N))
  102. do i=1,N
  103. write(*,"(A6,I2,A30)")"输入第",i,"条方程变量的系数(用空格隔开):"
  104. read(*,*) A(i,:)
  105. end do
  106. allocate(S(N))
  107. write(*,"(A6,I2,A36)")"输入第",i,"条方程等号右边常数系数(用空格隔开):"
  108. read(*,*) S
  109. allocate(ans(N))

  110. write(*,*) 'Equation:'
  111. call output(A,S)
  112. call Gauss_Jordan(A,S,ANS)
  113. write(*,*) 'Ans:'
  114. do i=1,N
  115. write(*,"(1x,a1,'=',F8.4)") char(64+i),ANS(i)
  116. end do
  117. stop
  118. end program

复制代码

评分

参与人数 2金钱 +19 贡献 +5 收起 理由
尽头的尽头 + 9 + 2
mofangbao + 10 + 3

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2011-10-22 11:15:32 | 显示全部楼层
哈哈 不会是被我逼迫出来的吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-10-22 12:19:43 | 显示全部楼层
哈哈哈,这个是不是和那个追赶法有点类似,貌似以前小研究过,但愿不如兰溪版主这么高深
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 19710
发表于 2011-10-22 12:36:15 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 19710
发表于 2011-10-22 12:36:52 | 显示全部楼层
mofangbao 发表于 2011-10-22 11:15
哈哈 不会是被我逼迫出来的吧

呃。。。算是吧,最近在调整状态啊~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-10-22 12:39:48 | 显示全部楼层
兰溪之水 发表于 2011-10-22 12:36
好吧,但愿。。。

,写错字鸟,是“但是”
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-10-22 12:50:36 | 显示全部楼层
兰溪给力啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 19710
发表于 2011-10-22 13:05:04 | 显示全部楼层
尽头的尽头 发表于 2011-10-22 12:50
兰溪给力啊

因为我站在巨人的头上~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-10-22 15:09:35 | 显示全部楼层
兰溪之水 发表于 2011-10-22 13:05
因为我站在巨人的头上~

兰溪谦虚了,哈哈
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-16 22:16:25 | 显示全部楼层
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表