MathCAD

       

Задача о купце и сукне: решение Зиберова


Попытаемся, подражая Чехову, устами репетитора Зиберова растолковать ученику Пете «матричное» решение нашей задачи в среде Mathcad.

– Это задача, собственно говоря, алгебраическая, – говорит он. – Ее с иксом и игреком решить можно. Впрочем, можно и так решить (Внимание! Текст Чехова кончился). С одним иксом. Для этого перепишем задачу в матричном виде: A×X=B. Матрица A – это квадратная матрица порядка 2 (с двумя строками и двумя столбцами), хранящая коэффициенты при неизвестных системы двух линейных алгебраических уравнений, вектор X – вектор неизвестных системы, а вектор B – вектор свободных членов. Итак (см. рис. 1.7), я в среде Mathcad пишу A:. Машина приписала знак равно так, чтобы получился оператор присваивания («A:= g»), и ждет, какое значение я введу в переменную A. Ввожу я не число и не переменную, а матрицу, для чего нажимаю на кнопки с изображением матрицы на панелях инструментов Mathcad (Math и Matrix). После этого на экране дисплея возникает окно работы с матрицами Insert Matrix.

В этом окне два поля и четыре кнопки. В первом поле пользователь задает число строк (Rows) создаваемой матрицы, а во втором – число столбцов (Columns). По умолчанию в этих полях записаны тройки: считается, что квадратная матрица порядка 3 – самая распространенная. Но наша матрица А имеет порядок 2, поэтому тройки в полях окна работы с матрицами нужно заменить на двойки. На каждой из кнопок окна работы с матрицами есть надписи: OK (Создать матрицу и закрыть окно), Insert (Вставить), Delete (Удалить) и Canc el (отмена). Матрицу мы создаем, поэтому щелкаем по кнопке OK. Две остальные кнопки предназначены для изменения размеров ранее созданных матриц: заданное в полях число столбцов и/или строк вставляется (удаляется) правее и ниже отмеченного курсором элемента уже созданной матрицы.

После щелчка по кнопке OK справа от выражения А:= появляется каре четырех вакантных мест для ввода информации, обрамленное скобками. Заполняем вакансии числами 1, 1, 5 и 3 и приступаем к формированию вектора В. Набираем В:= и снова вызываем окно работы с матрицами[8]. Во втором поле меняем двойку на единицу, щелкаем по кнопке OK и получаем заготовку для ввода информации в вектор В. Заполняем вакантные места числами 138 («аршинаж» сукна) и 540 (его стоимость). Все! Матрица и вектор коэффициентов системы линейных алгебраических уравнений заполнены, значит основная работа сделана. Остается только найти решение системы и заполнить им матрицу X. Для этого инвертированную (обратную, возведенную в минус первую степень) матрицу A перемножаем на вектор B, а ответ заносим в вектор X. Если мы теперь введем с клавиатуры Х=, то машина выдаст нам ответ – числа 63 и 75 в скобках, что еще раз подчеркивает их матричный характер. (Внимание! Подражание Чехову закончилось).


Через окно Insert Matrix можно ввести матрицу, у которой число элементов не может превышать ста. Считается, что большее число элементов матрицы неразумно вводить вручную. Объемные матрицы вводятся в Mathcad-документ тремя способами:
1. Элементы матрицы хранятся файлом на диске и вводятся в матрицу функцией READPRN.
2.      Две матрицы сливаются в одну функциями stack (матрицы ставятся одна на одну) или augment (матрицы ставятся бок о бок).
3.     

Двумя циклами формируется объемная вспомогательная матрица (M1), хранящая единицу или что-то другое, а потом ее содержимое копируется в создаваемую матрицу M и редактируется:
На рис. 1.7 правее Mathcad-выражений помещены комментарии, показывающие, как задача о купце и сукне решается с помощью языка BASIC, имеющего «матричные» операторы, начинающиеся с ключевого слова Mat. В языках программирования векторам и матрицам соответствуют массивы, хранящие переменные с индексом, которые подсказывают нам второй вариант «матричного» решения задачи о купце и сукне (пункт 2 на рис 1.7) без обращения к окну работы с матрицами, а через ввод индекса переменной: Аi , j, Bi и Хi. Индекс к имени переменной добавляется либо нажатием на кнопку Хn панели Matrix, либо на клавишу «[» (открывающаяся квадратная скобка). Запомнить эту клавишу просто: на языках Pascal и C в квадратные скобки помещаются индексы переменных A[i, j], B[i], Х[i] и т.д. Можно отметить еще одну особенность второго варианта «матричного» решения задачи Удодова: отказ от умножения инвертированной матрицы А на вектор В, а использование вместо этого встроенной функции lsolve, возвращающей решение (to solve – решать) системы линейных (l – эль) алгебраических уравнений.
В среде Mathcad 8 появились дополнительные возможности решения систем алгебраических уравнений конструкцией Given-Find, проиллюстрированные на рис. 1.8. Система уравнений, решаемая на рис. 1.8, имеет два корня, которые хорошо видны на графике (см. пункт 1, как он строится ¾ см. ниже главку «Великолепная семерка Mathcad»). Функция Find возвращает одно решение вблизи точки начального приближения. Но если начальное приближение дать не в виде скаляра, как на рис. 1.6, а в виде вектора (см. пункт 2 на рис. 1.8), то ответ будет содержать все корни системы. Элементы вектора Ответ ¾ уже не скалярные величины, а новые векторы.
Кроме того, в среде Mathcad 8 появилась возможность переменные системы алгебраических уравнений объединить в вектор. Этот прием проиллюстрирован в пункте 3 на рис. 1.8. В среде Mathcad 8 нет необходимости делать число уравнений большим или равным числу неизвестных системы.
Еще одно новшество Mathcad 8: если поместить курсор мыши на функцию Find и нажать правую кнопку мыши, то выпадает так называемое контекстное меню, в котором реализована возможность выбора метода решения системы алгебраических уравнений (см. конец рис. 1.8). Система Mathcad 8 по умолчанию сама выбирает метод решения (AutoSelect). Но пользователь при необходимости может скорректировать метод и детали расчета. В среде Mathcad 8 Pro можно решить систему, состоящую из 200 нелинейных алгебраических уравнений[9].

Содержание раздела