Возрастающая с каждым годом сложность вычислительных задач требует применения соответствующих инструментов для их решения. Одним из таких инструментов является вычислительная система Matrix32. Это невизуальная библиотека, предоставляющая программисту широкий набор классов для решения вычислительных задач. Программист, работающий с Matrix32, оперирует объектами следующих типов:
Matrix32 ориентирован на разработчиков математических библиотек. Программисту такой библиотеки при разработке математических функций можно не беспокоится о том, массив какого типа будет передан в функцию для обработки. Будь то массив элементов Byte, или же массив элементов Extended - для всех случаев достаточно программирование одной математической функции. Допустим, вы разработали функцию для решения системы линейный алгебраических уравнений и назвали ее SLAU.
Если вы реализуете функцию SLAU без использования системы Matrix32, то в этом случае вы лишаете пользователя вашей функции гибкости, заставляя его передавать в функцию только массивы того формата, который эта функция поддерживает. Вы можете написать перегруженные варианты функции SLAU, однако гибкости это ей не придаст.
Данный подход обязывает пользователя использовать типы, объявленные в вашей библиотеке (в данном случае это TDynExtendedMatrix и TDynExtendedVector). Даже если пользователь не планирует использования типа Extended, ему придется с этим типом работать, иначе он не сможет воспользоваться возможностями, предоставляемыми ему вашей функцией. Пользователю было бы достаточно, если бы ваша функция обрабатывата массивы байтов, однако ему приходится мириться с неоправданными расходами памяти на хранение элементов в формате Extended.
Как было сказано, Matrix32 позволяет пользователю передавать в функцию SLAU массивы с любым типом элементов. Это делает вашу функцию максимально гибкой, и в то же время снимает проблему неоправданного расхода памяти (пользователь сам решает, в каком формате ему нужно хранить элементы того или иного массива).
Вот простой пример того, как пользователь может использовать функцию SLAU, основанную на библиотеке Matrix32:
Надеюсь, что мне удалось заинтересовать читателя, и теперь система Matrix32 обретет нового пользователя.
_BCDAlign | |
AvailMemory | Определяет объем доступной памяти. |
BCDSub | |
BCDSum | |
BCDToString | Конвертирует число формата TBCDNumber в строковое представление |
CheckForMatrixTypes | Проверяет объекты на принадлежность к типам MatrixTypes. |
CmplxDoubleToSingle | Конвертирует комплексное число формата TDoubleComplex в TSingleComplex |
CmplxExtendedToDouble | Конвертирует комплексное число формата TExtendedComplex в TDoubleComplex |
CmplxExtendedToSingle | Конвертирует комплексное число формата TExtendedComplex в TSingleComplex |
CmplxSingleToDouble | Конвертирует комплексное число формата TSingleComplex в TDoubleComplex |
CmplxSingleToExtended | Конвертирует комплексное число формата TSingleComplex в TExtendedComplex |
ComplexFromString | Конвертирует строку Value в комплексное число TExtendedComplex. |
ComplexGetAbs | |
ComplexGetAbsSqr | |
ComplexGetAsPolar | |
ComplexIsEqual | Определяет, равны ли комплексные числа между собой |
ComplexIsZero | Определяет, является ли комплексное число нулевым |
ComplexNaN | Возвращает NaN в действительной и мнимой части |
ConvertToDynIntArray | Конвертирует открытый массив чисел Integer в динамический массив TDynIntArray |
DefragBinaryFile | Выполняет дефрагментацию двоичного файла AFileName. |
DeleteRepeatingSpaces | Удаляет повторяющиеся пробелы. |
DeleteRepeatingSymbols | Удаляет повторяющиеся символы. |
DimValuesToString | Преобразует значения размеров массива в текстовый вид. |
DoubleComplex | Формирует из вещественной и мнимой части комплексное число |
ExtendedComplex | Формирует из вещественной и мнимой части комплексное число |
FindMatrixInFileStream | Выполняет поиск объекта в потоке TFileStream, имеющем заголовочную зону. |
FindMatrixInStream | Отыскивает в потоке, начиная с текущей позиции, объект с заданным именем. |
FloatComplex | Формирует из вещественной и мнимой части комплексное число |
FloatToString | Переводит число в строку. |
fncAbs | Возвращает модуль числа Value (отбрасывает минус) |
fncCmplxConj | Инвертирует знак мнимой части комплексного числа |
fncCmplxCos | Вычисляет косинус комплексного числа Value |
fncCmplxCot | Вычисляет котангенс комплексного числа Value |
fncCmplxCsc | Вычисляет косеканс комплексного числа Value |
fncCmplxExp | Вычисляет экспоненту комплексного числа Value |
fncCmplxImag | Возвращает мнимую часть комплексного числа. |
fncCmplxImagToReal | Копирует мнимую часть числа Value в действительную часть результата Result. |
fncCmplxInverse | |
fncCmplxLn | Вычисляет натуральный логарифм комплексного числа Value |
fncCmplxLog10 | Вычисляет десятичный логарифм комплексного числа Value |
fncCmplxLog2 | Вычисляет логарифм по основанию 2 комплексного числа Value |
fncCmplxNeg | Инвертирует знак действительной и мнимой части комплексного числа |
fncCmplxReal | Возвращает действительную часть комплексного числа Value |
fncCmplxSec | Вычисляет секанс комплексного числа Value |
fncCmplxSin | Вычисляет синус комплексного числа Value |
fncCmplxSqr | Возводит комплексное число Value в квадрат |
fncCmplxSqrt | Извлекает квадратный корень комплексного числа Value |
fncCmplxTan | Вычисляет тангенс комплексного числа Value |
fncCos | Вычисляет косинус значения Value |
fncExp | Вычисляет экспоненту значения Value |
fncFrac | Возвращает дробную часть значения Value |
fncInt | Выполняет округление значения Value |
fncNone | Функция - заглушка (возвращает переданное значение Value) |
fncNot | Выполняет инверсию значения Value. |
fncRound | Выполняет округление значения Value |
fncSin | Вычисляет синус значения Value |
fncSqr | Возводит значение Value в квадрат |
fncSqrt | Вычисляет квадратный корень значения Value |
fncTrunc | Выполняет округление значения Value в сторону нуля |
GenerateHash | Гененирует хэш текстовой строки для ускорения операции поиска. |
GenMatrixName | Генерирует уникальное имя для объекта TMatrix. |
IsEqualArrays | Определяет, все ли указанные массивы имеют одинаковый размер и одинаковое содержимое |
IsEqualArraysSize | Определяет, равны ли размеры массивов между собой. |
IsSameMatrixClass | Проверяет, относятся ли указанные объекты к одному классу. |
IsSameMatrixTypes | Проверяет объекты на принадлежность к типам MatrixTypes. |
MatrixCorrectExceptMsg | Добавляет в текст исключения ExceptObject дополнительную информацию. |
MatrixCreateExceptObj | Создает объект исключения класса AClass с сообщением AText. |
MatrixExistsInFile | Определяет, есть ли в указанном файле объект с заданным именем. |
MatrixFreeAndNil | Обнуляет ссылку, после чего уничтожает объект TMatrix. |
MatrixNameIsValid | Определяет, допустимое ли имя у массива. |
MatrixReCreateExceptObj | Пересоздает объект исключения заново, добавляя в текст исключения дополнительную отладочную информацию. |
opAnd | Выполняет над операндами Value1 и Value2 бинарную операцию AND |
opBitAndI | Выполняет поразрядную операцию AND (Result := Value1 and Value2) |
opBitOrI | Выполняет поразрядную операцию OR (Result := Value1 or Value2) |
opBitShiftI | Выполняет арифметический сдвиг числа Value1 на Value2 разрядов. |
opBitXorI | Выполняет поразрядную операцию XOR (Result := Value1 xor Value2) |
opCmplxCopyRealParts | Формирует комплексное число из действительных частей Value1 и Value2 |
opCmplxDiv | Выполняет деление комплексных чисел Value1 и Value2 |
opCmplxDivBoth | Выполняет деление действительной и мнимой части числа Value1 на вещественную часть числа Value2 |
opCmplxInvDiv | |
opCmplxMul | Выполняет умножение комплексных чисел Value1 и Value2 |
opCmplxPower | Возводит комплексное число Value1 в степень Value2 |
opCmplxSub | Выполняет вычитание комплексных чисел Value1 и Value2 |
opCmplxSum | Выполняет сложение комплексных чисел Value1 и Value2 |
opDiv | Выполняет деление дробных чисел |
opDivI | Выполняет деление целых чисел |
opDivI64 | Выполняет деление длинных целых чисел Int64 |
opEQ | Сравнивает между собой числа Value1 и Value2. |
opGE | Сравнивает между собой числа Value1 и Value2. |
opGT | Сравнивает между собой числа Value1 и Value2. |
opLE | Сравнивает между собой числа Value1 и Value2. |
opLT | Сравнивает между собой числа Value1 и Value2. |
opMul | Выполняет умножение дробных чисел |
opMulI | Выполняет умножение целых чисел |
opMulI64 | Выполняет умножение длинных целых чисел Int64 |
opNE | Сравнивает между собой числа Value1 и Value2. |
opOr | Выполняет над операндами Value1 и Value2 бинарную операцию OR |
opPower | Возводит дробное число Value1 в степень Value2 |
opSub | Выполняет вычитание дробных чисел |
opSubI | Выполняет вычитание целых чисел |
opSubI64 | Выполняет вычитание длинных целых чисел Int64 |
opSum | Выполняет сложение дробных чисел |
opSumI | Выполняет сложение целых чисел |
opSumI64 | Выполняет сложение длинных целых чисел Int64 |
opTruncDiv | Выполняет деление дробных чисел с округлением в сторону нуля |
opXor | Выполняет над операндами Value1 и Value2 бинарную операцию XOR |
ParseMatrixRow | Разбивает строку ARow на числа и помещает их в динамический массив. |
RaiseMatrixError | Генерирует исключение класса AClass с сообщением AText. |
ReadMatrixNameFromStream | Считывает строку TMatrixName из потока TStream |
RegisterMatrixClass | Регистрирует класс TMatrixClass. |
ReRaiseMatrixError | Выполняет регенерацию исключения. |
SingleComplex | Формирует из вещественной и мнимой части комплексное число |
StringToBCD | Конвертирует число из строкового представления в формат TBCDNumber. |
StringToBCDDef | Конвертирует число из строкового представления в формат TBCDNumber. |
StringToDimValues | Разбивает строку S на числа и помещает их в динамический массив. |
StringToFloat | Конвертирует строку в число. |
TryStringToBCD | Конвертирует число из строкового представления в формат TBCDNumber. |
WriteMatrixNameToStream | Записывает строку TMatrixName в поток TStream. |
masSIsBadClassForOperation | 'Объект класса '%s' не допустим для выполнения операции' |
matSAbstractError | 'Попытка обращения к запрещенному для объекта методу' |
matSAliasError | 'Задан недопустимый псевдоним класса массива' |
matSArrayIsEmpty | 'Массив пуст' |
matSArrayNotFound | 'Не удалось найти массив с именем '%s'' |
matSArraysNotAgree | 'Размеры массивов не согласованы' |
matSBadBINFile | 'Файл не соответствует формату системы Matrix32' |
matSBadInputData | 'Недопустимые входные данные' |
matSBadName | 'Указано недопустимое имя массива '%s'' |
matSBadNameForBinFile | 'Невозможно загрузить или сохранить объект в файл, так как имя объекта не указано' |
matSBaseWorkspace | 'Основная рабочая область' |
matSBCDErrorString | 'Строка '%s' не содержит корректного двоично-десятичного значения' |
matSBCDOverFlow | 'Двоично-десятичное число не вместилось в разрядную сетку' |
matSBCDTooBigNumber | 'Двоично-десятичное число '%s' слишком большое' |
matSBinaryHeader | 'Matrix32 binaries version 2.0...' |
matSCanNotChangeSize | 'Невозможно изменить размеры массива' |
matSCanNotRenameFile | 'Не удалось переименовать файл '%s' в '%s'' |
matSCanNotWriteCell | 'Невозможно изменить элемент массива ячеек, переданного по ссылке' |
matSCatchStack | 'Цепь распространения ошибки:' |
matSClassNotFound | 'Класс '%s' не зарегистрирован' |
matSDifferentType | 'Массивы имеют разные размерности' |
matSDimensionError | 'Задано недопустимое значение размерности массива' |
matSDimIntervError | 'Указанный интервал выходит за рамки значения размерности' |
matSDimNotValid | 'Недопустимая размерность массива' |
matSElemReadError | 'Ошибка чтения элемента массива' |
matSElemWriteError | 'Ошибка записи элемента массива' |
matSErrorCreateArray | 'Невозможно создать массив с указанными размерами' |
matSExceptionClass | 'Класс исключения: ' |
matSFunctionError | 'При работе функции произошла ошибка' |
matSInvalidComplex | '''%s'' не является комплексным числом' |
matSInvalidFloat | '''%s'' не является числом с плавающей точкой' |
matSInvalidNumericSymbol | 'Символ ''%s'' не допустим для числовой последовательности' |
matSIsCopyByRef | 'Нельзя изменять структуру массива, переданного по ссылке' |
matSIsNotMatrix | 'Операция применима только для 2-мерных массивов' |
matSIsNotSquareArray | 'Массив должен быть квадратной матрицей' |
matSIsRefToSelf | 'Попытка установить указатель на себя' |
matSIsRefToWorkspace | 'Попытка присвоить ссылку на объект 'Рабочая область'' |
matSMatrixChildrenCount | 'Число дочерних объектов: %d' |
matSMatrixClassName | 'Класс объекта: %s = class(%s)' |
matSMatrixDimensions | 'Размеры массива (%d-D): %s' |
matSMatrixElemCount | 'Количество элементов массива: %d' |
matSMatrixElemSize | 'Размер элемента: %d байт(а)' |
matSMatrixFieldsCount | 'Число полей записи: %d' |
matSMatrixListIsSmall | 'В списке массивов указано слишком мало элементов' |
matSMatrixName | 'Имя объекта: ' |
matSMatrixObjectInformation | 'Информация об объекте TMatrix:' |
matSMatrixRangeOutOfStream | 'Невозможно прочитать данные из потока TStream, так как указатель '+'на конец объекта указывает за пределы потока' |
matSMatrixUsedMemory | 'Занимаемая память: %d байт(а)' |
matSMustHaveSameType | 'Массивы должны быть однотипными' |
matSNoDimension | 'Указанной размерности не существует' |
matSNotCellType | 'Операция применима только для массивов ячеек' |
matSNotDynamicType | 'Операция применима только для динамических массивов' |
matSNotNumericType | 'Операция применима только для числовых массивов' |
matSNotObjectType | 'Операция применима только для объектных массивов' |
matSNotRecordType | 'Операция применима только для массивов записей' |
matSOriginalErrorMsg | 'Сообщение об ошибке:' |
matSOutOfMemory | 'Недостаточно памяти для выполнения операции' |
matSRecordFieldIsNil | 'Поля с именем '%s' не существует!' |
matSRecordIndexNotExists | 'Поля с индексом '%d' не существует!' |
matSRefIsNotMatrix | 'Ссылка '$%p' не соответствует существующему объекту TMatrix' |
matSTryAccessToElem | 'Попытка обратиться к элементу с координатами (%s)' |
matSUnknownType | 'Тип объекта не поддерживается' |
matSWorkspace | 'Рабочая область' |
matSWrongCoords | 'Ошибка доступа к элементу массива. Указаны недопустимые координаты элемента. ' |