jacobi迭代fortran
时间: 2023-09-03 13:12:02 浏览: 159
下面是Jacobi迭代的Fortran代码示例:
```
program jacobi
implicit none
integer, parameter :: n = 100 ! 矩阵大小
integer :: i, j, k, iter ! 迭代次数
real, parameter :: tol = 1e-6 ! 精度
real :: a(n,n), b(n), x(n), x_new(n), sum ! 矩阵和向量
! 初始化矩阵和向量
do i = 1, n
b(i) = 1.0
do j = 1, n
if (i == j) then
a(i,j) = 2.0
else if (abs(i-j) == 1) then
a(i,j) = -1.0
else
a(i,j) = 0.0
end if
end do
end do
! Jacobi迭代
iter = 0
do while (iter < 1000) ! 设置最大迭代次数,避免死循环
iter = iter + 1
x_new = x
do i = 1, n
sum = 0.0
do j = 1, n
if (i /= j) then
sum = sum + a(i,j)*x(j)
end if
end do
x_new(i) = (b(i) - sum) / a(i,i)
end do
! 判断是否收敛
if (maxval(abs(x_new-x)) < tol) then
exit
end if
x = x_new
end do
! 输出结果
open(unit=10, file='jacobi_output.txt')
do i = 1, n
write(10,*) x(i)
end do
close(unit=10)
end program jacobi
```