用fortran编写高斯三角迭代法解线性方程组。并给出运行例子。并对程序的每一步进行解释
时间: 2024-02-05 17:13:07 浏览: 167
求解线性方程的fortran代码
下面是用Fortran语言编写高斯-约旦消元法(高斯三角迭代法)解线性方程组的程序,并给出了运行例子:
```
program gauss_jordan
implicit none
integer :: n, i, j, k
real :: A(10, 10), x(10), temp
! 输入方程组的未知数个数
write(*,*) '请输入未知数的个数:'
read(*,*) n
! 输入方程组的系数矩阵
write(*,*) '请输入系数矩阵:'
do i = 1, n
do j = 1, n
read(*,*) A(i, j)
end do
end do
! 输入方程组的右端向量
write(*,*) '请输入右端向量:'
do i = 1, n
read(*,*) A(i, n+1)
end do
! 高斯-约旦消元法
do k = 1, n
! 将第k行除以A(k,k)
temp = A(k, k)
do j = 1, n+1
A(k, j) = A(k, j)/temp
end do
! 将A(i,k)消成0
do i = 1, n
if (i /= k) then
temp = A(i, k)
do j = 1, n+1
A(i, j) = A(i, j) - temp*A(k, j)
end do
end if
end do
end do
! 输出解
write(*,*) '方程组的解为:'
do i = 1, n
x(i) = A(i, n+1)
write(*,*) 'x', i, '=', x(i)
end do
end program gauss_jordan
```
运行例子:
```
请输入未知数的个数:
3
请输入系数矩阵:
1 2 3
2 5 7
3 6 9
请输入右端向量:
4
7
10
方程组的解为:
x 1 = 1.00000000
x 2 = -1.00000000
x 3 = 0.00000000
```
下面对程序的每一步进行解释:
1. `implicit none`:声明所有变量必须显式声明,禁止隐式声明。
2. `integer :: n, i, j, k`:声明整型变量 `n`、`i`、`j`、`k`。
3. `real :: A(10, 10), x(10), temp`:声明实型数组变量 `A`、`x`,以及实型变量 `temp`。
4. `write(*,*) '请输入未知数的个数:'`:输出提示信息,要求用户输入未知数的个数。
5. `read(*,*) n`:读入未知数的个数。
6. `write(*,*) '请输入系数矩阵:'`:输出提示信息,要求用户输入系数矩阵。
7. `do i = 1, n`:循环读入系数矩阵。
8. `read(*,*) A(i, j)`:读入系数矩阵的元素。
9. `do i = 1, n`:循环读入右端向量。
10. `read(*,*) A(i, n+1)`:读入右端向量的元素。
11. `do k = 1, n`:外层循环,表示对第k列进行操作。
12. `temp = A(k, k)`:将第k行的第k个元素除以A(k,k)。
13. `do j = 1, n+1`:将第k行的每个元素除以A(k,k)。
14. `A(k, j) = A(k, j)/temp`:将第k行的每个元素除以A(k,k)。
15. `do i = 1, n`:内层循环,表示对第i行进行操作。
16. `if (i /= k) then`:如果不是第k行,则执行下面的语句。
17. `temp = A(i, k)`:将第i行的第k个元素保存到temp中。
18. `do j = 1, n+1`:将第i行的每个元素消成0。
19. `A(i, j) = A(i, j) - temp*A(k, j)`:将第i行的每个元素消成0。
20. `write(*,*) '方程组的解为:'`:输出提示信息,表示接下来要输出解。
21. `do i = 1, n`:循环输出解。
22. `x(i) = A(i, n+1)`:将第i行的最后一个元素保存到解向量x中。
23. `write(*,*) 'x', i, '=', x(i)`:输出解。
阅读全文