Проекты Логинова Дмитрия | ||||||||||
|
Справочная система
Внимание! Справка относится к старой версии Matrix. Справки по Matrix32 на данный момент не существует. И пока самый верный способ изучить его - смотреть файл Matrix32.pas, а также другие библиотеки, работающие на движке Matrix32. Они доступны на страницах закачки и имеют в качестве префикса слово "matrix". Читайте комментарии, они раскрывают смысл каждой функции. Думаю, вы справитесь. Если нет, то изучайте Delphi. Удачи! ВведениеMatriX - пожалуй самое мощное средство, разработанное для Delphi для работы с 2-мерными массивами - матрицами. Несмотря на технологическую простоту и прозрачность данной разработки, MatriX обладает очень быстрым вычислительным ядром и имеет полное право называться системой матричных вычислений. Matrix - это программный модуль, разрабатываемый с целью облегчения труда программистов, работающих в Delphi. Программист получает в свое распоряжение удобное средство для оперирования 2-мерными массивами вещественных чисел, позволяющее выполнять над ними различные операции. Благодаря Matrix программист может:
Что касается требований к ресурсам компьютера, то системе безразлично то, какая ОС установлена, сколько в наличие оперативной памяти и какой частоты процессор. Единственное, что необходимо учитывать программисту - каждый элемент массива занимает в памяти 8 байт. Много это или мало - зависит от конкретной задачи. В системе Matlab элементы массивов занимают столько же памяти, однако сама среда Matlab намного требовательнее к ресурсам компьютера. Главной идеей в данной разработке является то, что основным объектом является рабочая область, а не массив (массив вообще объектом не считается - это просто некоторая область памяти, выделенная под хранение данных). Массивы создаются в рамках рабочей области, причем их число может быть неограниченным. Рабочая область содержит все необходимые методы для работы с массивами. Количество рабочих областей также не ограничивается (это объект класса TWorkspace, и таких объектов можно создать сколько угодно). Поскольку рабочая область - объект изолированный, то можно в различных рабочих областях создавать массивы с одними и теми же именами. Т.е., вы можете создать в конкретной рабочей области массив не задумываясь о том, что массив с таким же именем может присутствовать в другой рабочей области. Благодаря этому, у вас есть возможность программировать собственные подпрограммы. Если вы работали с Матлабом, то должны знать, что большинство подпрограмм для этой системы хранится в виде m-файлов. Вот простой пример m-функции, реализующей сложение двух переданных массивов и возвращающей массив минимального и максимального значения: function C = summa(A, B)
Sum = A + B;
C = minmax(Sum);
Данная функция должна храниться в файле с именем summa.m. Эта идея реализована и в нашей разработке, только вместо m-функций используются обычные подпрограммы, использующие (или создающие свою) рабочую область. Вот пример такой подпрограммы (аналог примера с m-функцией): procedure Summa(Ws: TWorkspace; ArA, ArB, ArC: string); begin with TWorkspace.Create('Функция Summa()', Ws) do begin LoadArray(ArA, 'A'); // Загружаем массив А LoadArray(ArB, 'B'); // Загружаем массив B CalcFunc2('A', 'B', 'Sum', fncSum); // C = A + B GetMinMax('Sum', 'C', dimRows); ReturnArray('C', ArC); // Возвращаем результат end; end; При одинаковых входных массивах эта подпрограмма даст тот же результат, что и m-функция. Единственный недостаток нашей подпрограммы в том, что приходится явно загружать массив в рабочую область (LoadArray()) и явно возвращать результат работы подпрограммы (ReturnArray()). Просто в Матлабе это делает компилятор, а в Delphi компилятор этого делать еще не умеет :). В нашей подпрограмме рабочая область создается с помощью кода with TWorkspace.Create('Функция Summa()', Ws) do...
Эта рабочая область является дочерней от рабочей области Ws. Об этом свидетельствует наличие необязательного параметра ParentWorkspace. Если при создании рабочей области этого параметра не указывать, то в этом случае рабочая область будет главной (т.е. она не имеет родителя). Таким образом, рабочие области создаются каскадно: Главная рабочая область / | \ / | \ / | \ РО-1 РО-2 ... РО-N / | \ / \ / \ / | \ / \ / \ / | \ ... ... ... ... / | \ / | \ / | \ РО-1-1 ... РО-1-M / \ / \ / \ / \ ... ... ... ... Рабочие области, созданные каскадно, удаляются тоже каскадно. Если удалить рабочую область РО-1, то будут удалены все рабочие области РО-1-1 ... РО-1-М, а также дочерние для них рабочие области. Если в какой-либо рабочей области (например, РО-1-М) возникло исключение, то будут удалены все рабочие области, вплоть до главной. Главная рабочая область удалена не будет (на то она и главная :). Потенциально система Matrix может имеет очень широкий диапазон применений. Вот некоторые варианты применений:
| |||||||||
Логинов Дмитрий © 2005-2015 |