6.4.3. Типовые матричные операции пакета расширения Matlab
Большинство функций пакета Matlab (не путайте с системой MATLAB, имя которой надо записывать прописными буквами) реализуют самые обычные матричные операции, что и иллюстрируют приведенные ниже примеры (файл matlabi).
Зададим матрицу М в формате Maple:
> maplematrix_a:=array(1..3,1.-3, [[6,4,2], [7,8,1], [3,7,3]]);
Ниже даны примеры транспонирования матрицы, ее инвертирования, вычисления детерминанта и собственных значений матрицы:
> Matlab[transpose](maplematrix_а);
> Matlab[inv](maplematrix_a);
> Matlab[det](maplematrix_a);
> Matlab[eig](maplematrix_a);
Можно проверить, является ли матрица квадратной:
> Matlab[square](maplematrix_a);
а также вычислить размер матрицы:
> Matlab[dimensions](maplematrix_a);
Можно также проверить, является ли данная матрица матрицей системы MATLAB:
> Matlab[defined]('maplematrix_a');
Здесь надо иметь в виду, что форматы матриц в системах Maple и MATLAB различны. Выполним LU- преобразование матрицы:
> Matlab[lu](maplematrix_a,output='L');
Таким образом, видно, что Maple в данном случае реализует типовые матричные операции, но средствами системы MATLAB. Загрузка последней происходит автоматически при загрузке пакета MATLAB. Если система MATLAB не установлена на вашем компьютере, то доступ к функциям пакета Matlab будет отсутствовать, a Maple при попытке использования данных функций будет выдавать сообщения об ошибках.
6.5. Линейная оптимизация и линейное программирование
6.5.1. Постановка задачи линейного программирования
В общем случае задача линейного программирования может быть сформулирована следующим образом: найти максимум или минимум
при ограничениях
Для решения задач линейного программирования разработано большое количество различных методов. При анализе моделей с двумя или тремя переменными часто используются графические построения на плоскости или в пространстве. Среди универсальных методов решения наиболее распространен
При этом методе задается некоторое начальное приближение, удовлетворяющее всем ограничениям задачи, но не обязательно оптимальное. Оптимальность результата достигается последовательным улучшением исходного варианта за определенное число шагов (итераций). Направление перехода от одной итерации к другой выбирается на основе критерия оптимальности целевой функции задачи.
Реализовывать симплекс-метод вручную — громоздко и сложно. Системы компьютерной математики имеют средства решения задач оптимизации, в том числе и симплекс-методом. Рассмотрим примеры решения несколько типичных задач линейного программирования с помощью таких средств системы Maple 9.5.
6.5.2. Обзор средств пакета simplex
В пакете simplex системы Maple имеется небольшой, но достаточно представительный набор функций и определений для решения задач линейной оптимизации и программирования:
> with(simplex);
Warning, the protected names maximize and minimize have been redefined
and unprotected
Приведем краткое назначение этих функций:
• basis возврат списка основных переменных для множества линейных уравнений;
• convexhull — вычисление выпуклой оболочки для набора точек;
• cterm — задание констант для системы уравнений или неравенств;
• define_zero — определение наименьшего значения, принимаемого за ноль (по умолчанию увязано со значением системной переменной Digits);
• display — вывод системы уравнений или неравенств в матричной форме;
• dual — выдача сопряженных выражений;
• equality — параметр для функции convert, указывающая на эквивалентность;
• feasible — выяснение возможности решения заданной задачи:
• maximize — вычисление максимума функции;
• minimize — вычисление минимума функции;
• pivot — создание новой системы уравнений с заданным главным элементом;
• pivoteqn — выдача подсистемы уравнений для заданного главного элемента;
• pivotvar — выдача переменных с положительными коэффициентами в целевой функции;
• ratio — выдача отношений для определения наиболее жесткого ограничения;
• setup — задание системы линейных уравнений;
• standardize — приведение заданной системы уравнений или неравенств к стандартной форме неравенств типа «меньше или равно».