Изучение псевдодинамического распределения памяти на языке ФОРТРАН. Изучение форматов хранения матриц большой размерности (Лабораторная работа № 3)

Страницы работы

Содержание работы

Министерство образования и науки РФ

Новосибирский Государственный Технический Университет

Кафедра Прикладной математики

Лабораторная работа №3

по дисциплине

программирование вычислений

вариант №16.1

Преподаватель: Рояк С.Е.

Факультет: ФПМИ

Группа: ПМ-73

Студентка: Грибач Д.

Новосибирск 2009г.


1.Цель работы

            Изучение псевдодинамического распределения памяти на языке ФОРТРАН. Изучение форматов хранения матриц большой размерности. Оптимизация программ по точности, скорости, памяти. Изучение погрешности вычисления скалярного произведения. Изучение способов отладки. Изучение способов формирования  тестов для вычислительных программ. Изучение файлов прямого доступа.

2. Условие задачи

Умножение разреженной симметричной матрицы на вектор.

3.Используемые формулы

          Массивы, необходимые для хранения квадратной матрицы в разреженном симметричном формате:

ia(n+1)

целый массив, хранит указатели начала строк и столбцов в массивах ja, al и au

m=ia(n+1)-1

количество внедиагональных элементов нижнего и верхнего треугольников

ja(m)

номера столбцов (строк) внедиагональных элементов нижнего (верхнего) треугольника матрицы

al(m)

внедиагональные элементы нижнего (по строкам) и верхнего (по столбцам) треугольника матрицы

di(n)

Диагональные элементы матрицы

В программе в массиве данных Rmem последовательно хранятся массивы ia, ja, al, di, b, c, где b(n) – вектор, на который умножается матрица, c(n) – вектор-результат умножения.

mem - размерность программного массива Rmem исходных данных определена методом тестирования и равна 108

Структурамассива Rmem

1                   n+1                       n+m                n+m*2-1           n*2+m*2-1          n*3+m*2-1            n*4+m*2-1

ia

ja

al

di

b

c

4.Структура программы

programmain - головная программа: осуществляет вызовы подпрограмм и выделение памяти

subroutineInput1 (Imem, n, m) - подпрограмма ввода целочисленных данных из файла: Imem - часть массива Rmem для хранения ia, ja, n - размерность матрицы и вектора, m - последний элемент массива ia

subroutineInput2 (Rmem, n, m) - подпрограмма ввода вещественных данных из файла: Rmem - часть массива Rmem для хранения al, di, b, n - размерность матрицы и вектора, m - последний элемент массива ia

subroutineMult (n, m, ia, ja, al, di, b, c) - подпрограмма перемножения матрицы в разреженном формате на вектор: n - размерность матрицы и вектора, m - последний элемент массива ia, c - вектор, результат умножения, ia, ja, al, di, b - исходные данные

subroutine Output (n, Rmem) - подпрограмма вывода результирующего вектора в файл: n - размерность вектора, Rmem - часть массива Rmem для хранения результата

subroutineCheck1 (n, nb, mem) - подпрограмма проверки исходных данных на корректность (существование матрицы и вектора, возможнось их перемножения): n - размерность матрицы, nb - размерность вектора, mem - максимальный доступный размер массивов

subroutineCheck2 (n, m, mem) - подпрограмма проверки исходных данных на корректность (не превышают ли исходные данные и результат доступный размер памяти): n - размерность матрицы, nb - размерность вектора, mem - максимальный доступный размер массивов

Взаимодействие подпрограмм

5. Текст программы

!-----------------------------------------------------------------------------

!Головная программа: осуществляет вызовы подпрограмм и выделение памяти

!-----------------------------------------------------------------------------

      program main

      parameter (mem=100000000)

      dimension Rmem(mem)

      call Input1 (Rmem(1), n, m)

      call Input2 (Rmem(n+m+1), n, m)

      call Mult (n, m, Rmem(1), Rmem(n+2), Rmem(m+n+1), Rmem(2*m+n)

     *, Rmem(2*m+2*n), Rmem(2*m+3*n))

      call Output (n, Rmem(2*m+3*n))

      end

!----------------------------------------------------------------------------

!Подпрограмма ввода целочисленных данных из файла:

!Imem - часть массива Rmem для хранения ia, ja,

!n - размерность матрицы и вектора, m - последний элемент массива ia

!----------------------------------------------------------------------------

      subroutine Input1 (Imem, n, m)

      dimension Imem(*)

      open (1, file='F:\l3\Test2\nm.txt', status='old')

      open (3, file='F:\l3\Test1\ia.txt', status='old')

      open (4, file='F:\l3\Test1\ja.txt', status='old')

      open (10, file='F:\l3\Test2\nb.txt', status='old')

      read (1, *) n

      read (10, *) nb

      call Check1 (n, nb, mem)

      read (3, *) (Imem(i), i=1, n+1) !ia

      m=Imem(n+1)

      call Check2 (n, m, mem)

      read (4, *) (Imem(i), i=i, i+m-2) !ja

      close (1)

      close (3)

      close (4)

      end

!----------------------------------------------------------------------------

!Подпрограмма ввода вещественных данных из файла:

!Rmem - часть массива Rmem для хранения al, di, b

Похожие материалы

Информация о работе