Контрольная работа по "Программированию"
Автор: Arvydev • Ноябрь 18, 2023 • Контрольная работа • 8,805 Слов (36 Страниц) • 113 Просмотры
Постановка задачи
[pic 1]
Текст программы на Фортране 2008 для транслятора gfortran
program lab4
implicit none
real, allocatable :: C (:,:), CT (:,:), D (:)
integer :: i, j, n, iter
integer, allocatable :: NVAL (:)
real :: delta
integer :: ndim
integer, allocatable :: IPVT (:)
real, allocatable :: A (:,:), WORK (:), X1 (:), X2 (:)
real :: cond1, cond2
NVAL = [4, 6, 8, 10, 12]
do iter = 1, size(NVAL)
n = NVAL(iter)
ndim = n
print '(/"*** N = ",I0," ***")', n
C = reshape ([((1./(i+j-1), i=1,n), j=1,n)], [n,n])
CT = transpose (C)
D = sum (C, dim=2)
allocate (WORK(n), IPVT(n))
A = C
X1 = D
call print_mat ("исходное C ", A)
call print_vec ("исходное D ", X1)
call decomp (ndim, n, A, cond1, IPVT, WORK)
call solve (ndim, n, A, X1, IPVT)
A = matmul(CT,C)
X2 = matmul(CT,D)
call print_mat ("симметризованное C", A)
call print_vec ("симметризованное D", X2)
call decomp (ndim, n, A, cond2, IPVT, WORK)
call solve (ndim, n, A, X2, IPVT)
call print_vec ("X1", X1)
call print_vec ("X2", X2)
delta = sum(abs(X1-X2))/sum(abs(X1))
print '("COND1=",E13.6," COND2=",E13.6,", DELTA=",E13.6)', &
cond1, cond2, delta
if (cond1+1. == cond1) print '("Вырождение исходной СЛАУ.")'
if (cond2+1. == cond2) print '("Вырождение симметризованной СЛАУ.")'
deallocate (WORK, IPVT)
end do
contains
subroutine print_vec (name, v)
real :: v (:)
character (*) :: name
print '("Вектор ",A,": "*(F10.6,1X))', name, v
end subroutine print_vec
subroutine print_mat (name, m)
real :: m (:,:)
integer :: i
character (*) :: name
print '("Матрица ",A,": ")', name
do i=lbound(m,1),ubound(m,1)
print '(*(F10.6,1X))', m(i,:)
end do
end subroutine print_mat
end program lab4
Результат работы программы с параметрами компиляции по умолчанию (одинарная точность)
*** N = 4 ***
Матрица исходное C :
1.000000 0.500000 0.333333 0.250000
0.500000 0.333333 0.250000 0.200000
0.333333 0.250000 0.200000 0.166667
0.250000 0.200000 0.166667 0.142857
Вектор исходное D : 2.083333 1.283333 0.950000 0.759524
Матрица симметризованное C:
1.423611 0.800000 0.566667 0.441270
0.800000 0.463611 0.333333 0.261905
0.566667 0.333333 0.241389 0.190476
0.441270 0.261905 0.190476 0.150686
Вектор симметризованное D: 3.231548 1.858849 1.331865 1.044337
Вектор X1: 1.000005 0.999936 1.000163 0.999891
Вектор X2: 0.942675 1.644610 -0.550853 2.007859
COND1= 0.215232E+05 COND2= 0.176472E+09, DELTA= 0.815248E+00
Вырождение симметризованной СЛАУ.
*** N = 6 ***
Матрица исходное C :
1.000000 0.500000 0.333333 0.250000 0.200000 0.166667
0.500000 0.333333 0.250000 0.200000 0.166667 0.142857
0.333333 0.250000 0.200000 0.166667 0.142857 0.125000
0.250000 0.200000 0.166667 0.142857 0.125000 0.111111
0.200000 0.166667 0.142857 0.125000 0.111111 0.100000
0.166667 0.142857 0.125000 0.111111 0.100000 0.090909
Вектор исходное D : 2.450000 1.592857 1.217857 0.995635 0.845635 0.736544
Матрица симметризованное C:
1.491389 0.857143 0.616071 0.484788 0.401091 0.342691
0.857143 0.511797 0.375000 0.298611 0.249074 0.214078
0.616071 0.375000 0.277422 0.222222 0.186111 0.160438
0.484788 0.298611 0.222222 0.178657 0.150000 0.129545
0.401091 0.249074 0.186111 0.150000 0.126157 0.109091
0.342691 0.214078 0.160438 0.129545 0.109091 0.094421
Вектор симметризованное D: 4.193175 2.505704 1.837265 1.463824 1.221524 1.050265
Вектор X1: 1.000400 0.989180 1.070632 0.820951 1.193821 0.924784
Вектор X2: 0.950112 1.876060 -2.824760 7.451787 -3.456433 1.990706
COND1= 0.222399E+08 COND2= 0.222685E+10, DELTA= 0.286337E+01
Вырождение симметризованной СЛАУ.
*** N = 8 ***
Матрица исходное C :
1.000000 0.500000 0.333333 0.250000 0.200000 0.166667 0.142857 0.125000
0.500000 0.333333 0.250000 0.200000 0.166667 0.142857 0.125000 0.111111
0.333333 0.250000 0.200000 0.166667 0.142857 0.125000 0.111111 0.100000
0.250000 0.200000 0.166667 0.142857 0.125000 0.111111 0.100000 0.090909
...