Применение Fortran-библиотек линейной алгебры в среде Delphi

Заголовочные модули, написанные на языке Object Pascal, обеспечивающие простое подключение функций и процедур Fortran-библиотек численного решения задач линейной алгебры. Появление скрытых, трудно обнаруживаемых алгоритмических ошибок в среде Delphi.

Рубрика Программирование, компьютеры и кибернетика
Вид статья
Язык русский
Дата добавления 06.03.2019
Размер файла 75,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http: //www. allbest. ru/

Поволжский государственный технологический университет 424038, Россия, республика Марий Эл, г. Йошкар-Ола, ул. Ленинский Просреки, 3, оф. к.3

Применение Fortran-библиотек линейной алгебры в среде Delphi

Малашкевич Ирина Ардалионовна

доцент, кафедра информационно-вычислительных систем,

malashkevichia@volgatech.net

Малашкевич Василий Борисович

кандидат технических наук

доцент, кафедра информационно-вычислительных систем,

MalashkevichVB@volgatech.net

Аннотация

В работе представлен компонент и заголовочные модули, написанные на языке Object Pascal, обеспечивающие простое подключение функций и процедур таких библиотек численного решения задач линейной алгебры как BLAS, LAPACK, ARPACK и др., написанных на языке FORTRAN. Использование этих библиотек в современных языках программирования, например в C++ или Object Pascal, сталкивается с существенными проблемами, связанными с методами передачи параметров в подпрограммы, а также со способом представления массивов в оперативной памяти. Более серьезной проблемой является нумерация элементов с 1, принятая в FORTRAN. В Object Pascal учет этого условия может потребовать тщательного анализа и модификации алгоритма решения задачи. Это существенно увеличивает трудоемкость программирования и ведет к появлению скрытых, трудно обнаруживаемых алгоритмических ошибок. Для обеспечения прозрачного обращения к подпрограммам FORTRAN-библиотек из программ на языке Object Pascal среды Delphi разработаны два класса объектов для представления одномерных массивов TVector и двумерных массивов - TMatrix.

Ключевые слова: fortran, библиотеки, линейная алгебра, delphi, Object Pascal, TVector, TMatrix, программирование, алгоритм, подпрограмма

delphi алгоритмический алгебра библиотека

Abstract

Malashkevich Irina Ardalionovna

Associate Professor, Department of Information Systems, Volga State University of Technology

424038, Russia, respublika Marii El, g. Ioshkar-Ola, ul. Leninskii prospect, 3 Malashkevich Vasilii Borisovich

PhD in Technical Science

424000, Respublika Marii El, g. Ioshkar-Ola, pl. Lenina, dom 3.

The article presents the components and header modules written in Object Pascal, allowing to easy include libraries with such functions and procedures for numerical solution of linear-algebra as BLAS, LAPACK, ARPACK etc. written in FORTRAN. Using these libraries in modern programming languages such as C ++ or Object Pascal is hard due to significant problems associated with the methods of passing parameters to subroutines, as well as to the method of representation of an array in memory. Another serious problem is the numbering of the elements that start from 1 in FORTRAN. In Object Pascal considering this condition may require careful analysis and the modification of the algorithm for solving the problem. This greatly increases the complexity of programming and leads to hidden, difficult to detect algorithmic errors. To provide transparent access the routines of FORTRAN-libraries while programming in Object Pascal in Delphi environment the authors developed two classes of objects for representing one-dimensional arrays TVector and two-dimensional arrays TMatrix.

Keywords: programming, TMatrix, TVector, Object Pascal, delphi, linear algebra, library, fortran, algorithm, subroutine

Библиотеки подпрограмм BLAS, LAPACK, ARPACK [1,2], написанные на языке Fortran77, содержит обширный набор подпрограмм для решения наиболее часто встречающихся задач линейной алгебры. Эти библиотека позволяет решать системы линейных уравнений, линейные задачи наименьших квадратов, находить собственные значения и вектора матриц, их сингулярные значения. Также возможно решение сопутствующих задач, таких как факторизация матриц или вычисление числа обусловленности. Подпрограммы LAPACK и ARPACK интенсивно используют пакет BLAS (Basic Linear Algebra Set), обеспечивающий выполнение элементарных операций, таких как сложение и умножение векторов и матриц, вычисление скалярного произведения и т.п. Все подпрограммы указанных пакетов применяют эффективные алгоритмы вычислений, тщательно протестированные и оптимизированные для достижения максимальной производительности. Они имеют версии для вычислений с единичной и двойной точностью и распространяются как в исходных кодах, так и формате dll-файлов.

Вместе с тем использование этих библиотек в современных языках программирования, например в C++ или Object Pascal, сталкивается с существенными проблемами, связанными с методами передачи параметров в подпрограммы, а также со способом представления массивов в оперативной памяти. Подпрограммы BLAS, LAPACK, ARPACK воспринимают все векторные параметры подпрограмм как адреса соответствующих объектов. Кроме того все массивы в языке FORTRAN в качестве номера первого элемента используют индекс 1, тогда как динамические массивы C++ и Object Pascal принимают в качестве номера первого элемента массива индекс 0. Передача параметров по адресу (ссылке), принятая в FORTRAN, имеет простой аналог в языке Object Pascal и не является серьезной проблемой. Достаточно объявить вызываемые функции библиотеки LAPACK в стиле, например

var dsaupd_: function(var ido: Integer; var bmat: Char;

var n: Integer; var which: Char; var nev: Integer;

var tol: TData; resid: PData; var ncv: Integer;

v: PData; var ldv: integer; iparam: PInteger;

ipntr: PInteger; workd, workl: PData;

var lworkl: Integer; var info: Integer ) : integer cdecl;

Более серьезной проблемой является нумерация элементов с 1, принятая в FORTRAN. В Object Pascal учет этого условия может потребовать тщательного анализа и модификации алгоритма решения задачи. Это существенно увеличивает трудоемкость программирования и ведет к появлению скрытых, трудно обнаруживаемых алгоритмических ошибок.

Наибольшие затруднения представляют вызовы подпрограмм FORTRAN-библиотек, связанные с обработкой матриц. Проблемой здесь является метод сохранения матриц по столбцам, принятый в языке FORTRAN, тогда как в Object Pascal массивы хранятся в памяти по строкам (Рис.1). Поэтому прямая передача адреса начального элемента в подпрограмму LAPACK из программы Object Pascal приведет к обработке транспонированной матрицы, либо к ошибке обращения к памяти для неквадратных матриц.

Рис.1 Методы размещения массива в оперативной памяти в FORTRAN и Object Pascal

Для преодоления указанных трудностей и обеспечения прозрачного обращения к подпрограммам FORTRAN-библиотек из программ на языке Object Pascal среды Delphi были разработаны два класса объектов для представления одномерных массивов TVector и двумерных массивов - TMatrix. Определения классов имею вид:

TMode = (mDELPHI=0, mFORTRAN); //Режим работы массива

TVector = class

private

fMode : TMode; // mDELPHI V[0..Size-1]; mFORTRAN V[1..Size]

fSize: Integer; //Кол-во элементов

fFirstItem: PDouble;

protected

function GetPointer(i: integer): PDouble;

procedure SetByPointer(i:integer; p : PDouble);

function GetValid(i:integer):Boolean;

function GetValue(i:integer):Double;

procedure SetValue(i:integer; v:Double);

procedure SetSize(const N:integer);

public

constructor SetLen (ASize: integer; AMode : TMode = mDELPHI);

destructor Destroy; override;

procedure Clear;

procedure Assign(Source: TVector);

function FirstIndex: Integer;

function LastIndex:Integer;

procedure SetZero;

property Mode : TMode read fMode write fMode;

property Size : Integer read fSize write SetSize;

property Item[i:integer] : Double read GetValue write SetValue; default;

property Ptr[i:integer] : PDouble read GetPointer write SetByPointer;

property FirstItem: PDouble read fFirstItem;

end;

TMatrix = class(TVector)

private

fRowCount: integer;

fColCount: integer;

protected

function GetPointer(ARow, ACol:integer) : PDouble;

procedure SetPtr(ARow, ACol:integer; p : PDouble);

function GetValid(ARow, ACol:integer):Boolean;

function GetValue(ARow, ACol:integer):Double;

procedure SetValue(ARow, ACol:integer; v:Double);

procedure SetCell(ARow, ACol:integer; v:Double; IsValid:Boolean);

public

constructor SetLen(ARows, ACols:integer; AMode:TMode=mDELPHI);

procedure Assign(Source: TMatrix);

property Item[ARow, ACol: integer]:Double read GetValue

write SetValue; default;

property Ptr[ARow, ACol: integer]:PDouble read GetPointer write SetPtr;

property Rows: integer read fRowCount;

property Cols: integer read fColCount;

function FirstRow: Integer;

function FirstCol: Integer;

function LastRow: Integer;

function LastCol: Integer;

property Valid[ARow, ACol:integer]:Boolean read GetValid;

end;

Оба класса имеют конструктор SetLen, который обеспечивает выделение памяти для хранения массивов. Физически массив всегда представляется как одномерный, причем для двумерных массивов данные располагаются по столбцам, как это принято в FORTARN. Элементы массивов во внутренней памяти всегда нумеруются с 0-го индекса, однако обращаться к ним следует с учетом режима индексации, заданного свойством Mode. При Mode= mFORTRAN индексом первого элемента является 1. В этом режиме также принято извлечение и запись элементов двумерного массива в стиле FORTRAN - по столбцам. В режиме Mode=mDELPHI обращение к элементам массива выполняется, как это принято в Object Pascal. При этом для учета способа хранения элементов во внутреннем массиве используется соответствующий способ расчета индексов.

В качестве примера использования предложенных классов приводится выдержка из программы на языке Object Pascal для решения проблемы собственных значений методом Арнольди [2] с применением пакетов BLAS, LAPACK и ARPACK.

//Объявления используемых модулей

uses Utils, BLAS, LAPACK, ARPACK, Vector, Matrix;

//Объявления массивов

var v, d : TMatrix; workl, workd, resid, ax : TVector;

//Создание массивов в стиле FORTRAN

workl := TVector.SetLen(maxncv*(maxncv+8),mFORTRAN);

workd := TVector.SetLen(3*maxn,mFORTRAN);

v := TMatrix.SetLen(ldv,maxncv,mFORTRAN);

d := TMatrix.SetLen(maxncv,2,mFORTRAN);

//Вызов подпрограммы из пакета ARPACK

dseupd_( rvec, howmny, @select(1), d.Ptr(1,1), v.Ptr(1,1), ldv, sigma,

bmat, n, which(1), nev, tol, resid.Ptr(1), ncv, v.Ptr(1,1), ldv,

iparam.Ptr(1), ipntr.Ptr(1), workd.Ptr(1), workl.Ptr(1), lworkl, ierr );

//Приведение массива к стилю Delphi

d.Mode := mDELPHI;

for j:=0 to nconv-1 do

for j:=0 to 1 do

… d[j, i] …

Разработанные классы объектов решают все перечисленные проблемы и обеспечивают прозрачный доступ к подпрограммам математических библиотек BLAS, LAPACK и ARPACK из программ на языке Object Pascal.

Библиография

1. www.netlib.org/lapack

2. http://www.caam.rice.edu/software/ARPACK/

References (transliterated)

1. www.netlib.org/lapack

2. http://www.caam.rice.edu/software/ARPACK/

Размещено на Allbest.ru

...

Подобные документы

  • Характеристика вычислительной системы и инструментов разработки. Программирование на языке Pascal в среде Turbo Pascal и на языке Object Pascal в среде Delphi. Использование процедур, функций, массивов, бинарного поиска. Создание базы данных в виде файла.

    отчет по практике [2,1 M], добавлен 02.05.2014

  • Интегрированная среда разработки Delphi и элементы, входящие в ее состав. Математическая модель, алгоритм решения и его свойства. Описание операторов, процедур, функций и методов. Создание приложений по аналитической геометрии и теоретической механике.

    курсовая работа [1,8 M], добавлен 26.05.2010

  • Особенности и тонкости программирования в среде Delphi. Специфика перехода от алгоритмического решения к непосредственной программной реализации на языке Object Pascal с использованием всех необходимых средств данного языка. Анализ полученных результатов.

    реферат [246,2 K], добавлен 17.11.2012

  • Создание Windows-приложения на алгоритмическом языке Object Pascal в среде визуального программирования Delphi, которое, как планируется, будет обеспечивать решение специализированных задач по формированию, обработке на ЭВМ и выводу информации.

    курсовая работа [967,6 K], добавлен 20.05.2008

  • Описания объектов, свойств, методов, формы и основных модулей текста программы в среде Delphi. Создание Windows-приложения на алгоритмическом языке Object Pascal в среде визуального программирования. Анализ результатов тестирования программного продукта.

    курсовая работа [2,4 M], добавлен 27.08.2012

  • Основные приёмы и возможности алгоритмических языков программирования Fortran. Табуляция функции на языке Fortran, ее графический вид и блок-схема алгоритма. Выполнение расчетов на алгоритмическом языке Фортран. Текст (листинг) Fortran-программы.

    курсовая работа [31,9 K], добавлен 15.02.2011

  • Основные понятия и структура обработчика на языке Pascal. Элективные курсы по информатике в системе профильного обучения. Элективный курс "Программирование в среде Delphi". Методические материалы по изучению программирования на языке Object Pascal.

    методичка [55,4 K], добавлен 08.12.2010

  • Методы грамматического разбора. Разработка структуры учебного транслятора на базовом языке программирования Object Pascal в среде объектно-ориентированного визуального программирования Borland DELPHI 6.0 с использованием операционной системы Windows XP.

    курсовая работа [493,8 K], добавлен 12.05.2013

  • Степень переносимости исходного кода между различными платформами. Первый язык программирования высокого уровня, имеющий транслятор. Программа Fortran, ее версии, отличия от других программ. Составление программ на языке программирования Fortran.

    курсовая работа [45,5 K], добавлен 04.06.2014

  • Программирование вычислительных процессов на языке FORTRAN для обеспечения взаимодействия системы "Человек-Производство-Природа". Использование массивов для составления циклов подсчета уровня экологического загрязнения, затрат на переработку отходов.

    курсовая работа [2,0 M], добавлен 30.05.2014

  • Проектирование программного модуля в среде программирования Borland Delphi 7.0. Схемы алгоритмов решения задач по темам "Символьные переменные и строки", "Массивы", "Работа с файлами", "Создание анимации". Реализация программного модуля, код программы.

    отчет по практике [961,6 K], добавлен 21.04.2012

  • Основні відомості про історію розвитку мови Object Pascal, середовища Delphi, їх основні технології та застосування для роботи з файлами. Опис основних особливостей мови, основних елементів програмної мови. Принципи об'єктно-орієнтованого програмування.

    курсовая работа [471,5 K], добавлен 12.04.2010

  • Анализ методики использования многомерных массивов в среде Delphi. Общее понятие массивов, их реализация, достоинства, недостатки. Массивы в Object Pascal. Описание функциональной структуры приложения: модуль MatrixOperations, модуль fileIO, модуль form.

    курсовая работа [1,3 M], добавлен 28.09.2010

  • Элементы языка Object Pascal: идентификаторы, константы, переменные, выражения. Структура проекта Delphi. Операторы и метки. Типы данных языка OPascal. Статические и динамические массивы. Записи с вариантными полями. Совместимость и преобразование типов.

    курс лекций [385,4 K], добавлен 18.02.2012

  • Разработка автоматизированной информационной системы для обеспечения учета образовательных учреждений в среде Delphi на языке программирования Pascal. Создание базы данных и интерфейса для работы с АИС. Сущности и атрибуты логической модели данных.

    курсовая работа [429,3 K], добавлен 15.05.2014

  • Описание входной и выходной документации. Требования к интерфейсу Windows-приложения и информационной базе. Разработка алгоритмов обработки данных и SQL-запросов к базе данных. Язык программирования Object Pascal и среда Delphi. Используемая СУБД.

    дипломная работа [228,7 K], добавлен 25.11.2007

  • Разработка программы обработки типизированных файлов с кодом на языке Object Pascal, с использованием компонентов Delphi для ввода и вывода данных. Разработка экранных форм и алгоритма программы. Описание программных модулей и инструкция оператору.

    курсовая работа [1,5 M], добавлен 08.02.2011

  • Сущность тестирования и отладки, методика выявления ошибок в программном обеспечении. Практика отладки приложений в среде Delphi, системы управления версиями приложения и отслеживания ошибок. Применение точек остановки и модификация локальных переменных.

    курсовая работа [303,4 K], добавлен 19.01.2016

  • Особенности среды визуального проектирования Borland Delphi 7.0. Этапы разработки программы и составления блок-схемы алгоритмов. Способы вычисления кусочно-заданной функции одной переменной. Рассмотрение компонентов среды Delphi, ее предназначение.

    контрольная работа [703,8 K], добавлен 24.09.2012

  • Теоретические основы применения технологии ADO в среде Delphi. Основные понятия и определения теории баз данных. Компоненты Delphi для создания приложений, оперирующих с базами данных. Общий вид и основные особенности работы приложения "Аптека".

    курсовая работа [1,4 M], добавлен 09.08.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.