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

                    k=j

                endif

                write(3, 111) h

                h=0

                goto 80

            endif

            i=1

            j=j+1

            goto 70

        endif

      close(3)

      return

100   print *, 'Can not open Result.csv file.'

      return

111   format(E10.4, ';',$)

      end

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

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

Отчёт

по лабораторной работе №3

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

Выполнил: Тихоненко В.В.

Группа: ПМ-63

Проверил: Рояк М.Э., Рояк С.Х.

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


Входная матрица генерируется следующим образам: на диагонали стоят 1, далее каждая следующая строка ленты равна номеру, начиная от диагонали, т.е. вторая строка заполнена цифрами 2, третья – 3 и т.д.

Вектор входной организован так: на i-той позиции стоит число i.

0.1000E+01

0.2000E+01

0.3000E+01

0.4000E+01

Ниже для примера приведена матрица и вектор.

0.1000E+01

0.2000E+01

0.3000E+01

0.4000E+01

0.2000E+01

0.1000E+01

0.2000E+01

0.3000E+01

0.3000E+01

0.2000E+01

0.1000E+01

0.2000E+01

0.4000E+01

0.3000E+01

0.2000E+01

0.1000E+01

 Ответ такого перемножения

0.3000E+02

0.2200E+02

0.1800E+02

0.2000E+02

Тест на выделение памяти:

Входная матрица - единичная размерности 666666 (всего памяти программа способна выделить 2000000) Для данной матрицы используется памяти: 666666*3=1999998. Программа работает около 7 сек. Ответ равен входному вектору, т.е. правильный.

Входная матрица - единичная размерности 666667. Для данной матрицы используется памяти: 666667*3=2000001 программа не создаёт матрицу, так как памяти не хватает. Сообщение об ошибки - Error. Input other numbers.

Входная матрица – ленточного семеричного формата с шириной полу ленты 2 и размерности 500000. Памяти выделяется 500000*4=2000000. Программа работает около 6 сек. Ответ проверен на первых 10 величинах – ответ правильный.

0.5000E+01

0.1000E+02

0.1500E+02

0.2000E+02

0.2500E+02

0.3000E+02

0.3500E+02

0.4000E+02

0.4500E+02

0.5000E+02

Тест на быстродействие:

Сгенерирована матрица размерности: 1413х1413, памяти выделилось: 1999395.

Время работы около 6 сек. Ответ не поддаётся на проверку правильности.

Тесты на проверку входных данных:

Попытка сгенерировать матрицу с размером ленты большим чем размерность матрицы, закончилась неудачно.  Error. Input other numbers.

Попытка задать некоторую матрицу с отрицательной размерностью, или матрицу с отрицательной ширенной ленты так же неудачна. Error. Input other numbers.

Если попытаться вручную изменить бинарный файл, например с матрицей, программа предлагает исправить ошибку в debagging Microsoft Visual Studio хотя в программе

read(1,rec=k,err=11) a((j-1)*maxi+i)

11  print *, 'Error in Matrix.bin file.'

Эту ошибку я не исправлял. Но если использовать программу, которая читает данные из текстового файла и переделывает их в бинарный файл, и подать её на вход файл с буквой вместо какой либо цифры, то программа выдаст сообщение Error in file.

Если подать этой программе во входной файл отрицательное значение размера матрицы, или ширины ленты, то она создаст бинарный файл без возражений, но программа умножения матрицы на вектор выдаст сообщение Error in maxi, maxj.