Главная страница

Реализация LU разложения с помощью функций IMSL. ОТЧЕТ БИРЮКОВКО КОМПАКТНЫЙ. Отчет на тему


Скачать 182.56 Kb.
НазваниеОтчет на тему
АнкорРеализация LU разложения с помощью функций IMSL
Дата12.05.2022
Размер182.56 Kb.
Формат файлаdocx
Имя файлаОТЧЕТ БИРЮКОВКО КОМПАКТНЫЙ.docx
ТипОтчет
#525125
страница4 из 5
1   2   3   4   5

Расчет требуемой памяти



При обращении к литературе, содержащей сведения о библиотеке IMSL, в качестве примера в подпрограммах LSLRB, LFCRB, LFTRB используется прямоугольная матрица A размерностью 3х4, т. е. общее количество элементов в ней — 12. В целях экономии времени расширим матрицу до размеров 7х8.

В постановке задачи исследования производительности ПК накладывается ограничение на используемую RAM-память компьютера (300-400 Мб), поэтому для увеличения используемой процессом памяти необходимо пойти по пути создания буферной матрицы.

Буферный массив p представляет собой матрицу размерностью (Q,8), где Q — количество строк, которое необходимо рассчитать, чтобы выполнить заявленный критерий по используемой памяти. Расчет количества строк проводился отталкиваясь от условия, что объем используемой памяти должен быть равен:

300Мб < Memory < 400Мб
Для вычисления количества элементов буферной матрицы исследуем нижний и верхний предел ограничения (расчет одинарной точности).

  1. 300 Мб.

Переведем заданный объем из Мб в байты:

300*1024 *1024 = 314572800 байт (14)



Поскольку в режиме одинарной точности исследуемая матрица имеет тип real (задано пользователем), а в Fortran на 1 элемент приходится 4 байта памяти, рассчитаем общее количество элементов матрицы:



314572800 / 4 = 78643200 элементов (15)


Таким образом, (78643200 / 8 = 9830400) матрица должна иметь размерность (9830400х8).

  1. 400 Мб.


Проведя аналогичные действия, получим количество элементов: 104857600. Размерность такой матрицы — (13107200х8).

В данном расчете была задан массив (10 500 000 х 8), что согласуется с условием на ограничение памяти. При таком количестве элементов объем занимаемой процессом памяти — 320,4 Мб. ((10 500 000*8*8) / (1024*1024)) = 320.4Мб.

Для двойной точности эта цифра в 2 раза больше, т. е. 640,8 Мб.


  1. Листинг программы одинарной точности



program one

INTEGER IPATH, LDA, LDFAC, N, NLCA, NUCA, IPATH2, LDFAC2, NLCA2, NUCA2, NOUT, IPATH3, NLCA3, NUCA3,i, j ,k

PARAMETER (IPATH=1, LDA=7, LDFAC=4, N=8, NLCA=5, NUCA=5, IPATH2=1, LDFAC2=4, NLCA2=5, NUCA2=5, IPATH3=1, NLCA3=5, NUCA3=5)

INTEGER IPVT(N), IPVT2(N)

REAL A(LDA,N), B(N,4),AINV(N,N) , RJ(N), RES(N), X(N,2), X3(N)

REAL FAC2(LDFAC,N), RCOND, B3(N), FAC(LDFAC,N), p(10500000,8),z(N,4)

REAL T, Timef
EXTERNAL LFTRB, LFSRB, WRRRN, LFCRB, LFIRB, SSET, UMACH, LSLRB
T=Timef()
do i=1,10500000

do j=1,8

p(i,j) = i+j

END DO

END DO
do i = 1,10500000,7

do j = 1,8,1

A(1,j)=p(i,j)

A(2,j)=p(i+1,j)

A(3,j)=p(i+2,j)

A(4,j)=p(i+3,j)

A(5,j)=p(i+4,j)

A(6,j)=p(i+5,j)

A(7,j)=p(i+6,j)

END DO

!Зададим правую часть системы линейных уравнений
DO k=1,N

DO j=1,4

z=j+k

B(k,j)=z

END DO

END DO

! Решение исходного уравнения

CALL LFTRB (N, A, LDA, NLCA, NUCA, FAC, LDFAC, IPVT)

! Решение для правых сторон

DO 10 J=1, 4

CALL LFSRB (N, FAC, LDFAC, NLCA, NUCA, IPVT, B(1,J), IPATH, X(1,J))

10 CONTINUE
! Вывод результатов
! CALL WRRRN ('X', N, 2, X, N, 0)

! Решение исходного уравнения

CALL LFCRB (N, A, LDA, NLCA2, NUCA2, FAC2, LDFAC2, IPVT2, RCOND)

! Вывод оценки числа обусловленности

! CALL UMACH (2, NOUT)

! WRITE (NOUT,99999) RCOND, 1.0E0/RCOND

! Настройка столбцов идентификаторов
CALL SSET (N, 0.0E0, RJ, 1)

DO 20 J=1, N

RJ(J) = 1.0E0

CALL LFIRB (N, A, LDA, NLCA2, NUCA2, FAC2, LDFAC2, IPVT2, RJ, IPATH2, AINV(1,J), RES)

RJ(J) = 0.0E0

20 CONTINUE

! Вывод результатов

! CALL WRRRN ('AINV', N, N, AINV, N, 0)

! 99999 FORMAT (' RCOND = ',F5.3,/,' L1 Condition number = ',F6.3)

! Решение исходного уравнения
CALL LSLRB (N, A, LDA, NLCA3, NUCA3, B, IPATH3, X)

! Вывод результатов
! CALL WRRRN ('X', 1, N, X, 1, 0)

END DO

T=Timef()
PRINT *,' TIME: ',T
end program one

  1. 1   2   3   4   5


написать администратору сайта