litceysel.ru 1 2 ... 7 8

Mathcad 8: первые впечатления


Валерий Очков

Пакет Mathcad — это математическая программа. Поэтому разговор о новинках Mathcad 8 мы начнем, естественно, с анализа дополнительных вычислительных возможностей.

В Mathcad 8 введены функции, позволяющие решать разного рода оптимизационные задачи.

Вспомним, как в среде Mathcad 7 и в средах более ранних версий Mathcad ищется минимум функции (рис.1). Задается вид анализируемой функции (у нас это тестовая функция Пауэла с четырьмя аргументами), затем вводится первое приближение, пишется ключевое слово given (дано) и вызывается функция minerr (минимальная ошибка), между которыми записываются булевы выражения (на рис.1 оно одно).



Рис.1

Функция minerr возвращает значения своих аргументов, при которых левые и правые части выражений (выражения), зажатых между given и minerr отличаются по модулю минимально.

Данный способ оптимизации имеет существенный недостаток — пользователь должен хотя бы приблизительно знать минимальное значение анализируемой функции. У функции Пауэла минимум равен нулю1 при нулевых значениях аргументов2.

Реализации Mathcad ниже восьмой версии требовали, чтобы число выражений, зажатых между ключевым словом given и функцией minerr, было не меньшим, чем число неизвестных. Из-за этого приходилось засорять протокол решения задачи всякой чепухой вроде «1 = 1», «2 1» и т. д. В среде Mathcad 8 этот недостаток устранен. Но появился новый казус, соответствующий принципу — «наши недостатки — это продолжение наших достоинств»: между ключевым словом given и функцией, возвращающей решение задачи, можно совсем ничего не писать. Спрашивается, зачем в этом случае вообще нужно ключевое слово given?!

В среду Mathcad 8 введены две новые функции minimize и maximize, позволяющие решать оптимизационные задачи без вышеописанных на рис.1 ухищрений. На рис.2 (который является продолжением рис.1 и берет оттуда вид функции Пауэла и начальное приближение к минимуму) показана работа функции minimize.




Рис.2

В среде Mathcad 8 щелчок правой кнопкой мыши3 по имени «решающих» функций (minimize - cм. рис.2, maximize, minerr и find) вызывает дополнительное меню со списком трех возможных методов численного решения задачи (метод Левенберга-Маркворта, метод Ньютона и градиентный метод) и их деталей (Options). Две последние позиции меню работают и в более ранних версиях Mathcad: Disable Evaluation — отключение оператора и Optimize — поиск решения через аналитические преобразования (через поиск аналитического решения).

В среде Mathcad 8 пользователю предоставлена возможность выбора численного метода и при решении других задач. Так, если щелкнуть правой кнопкой мыши по оператору определенного интеграла (рис.3), то «выпадает» список методов численного интегрирования. При этом система Mathcad сама может выбрать (переключатель Smart Select — «сообразительный» выбор) метод, дающий оптимальное соотношение точности и скорости вычисления.



Рис.3

Но вернемся к задаче оптимизации на рис.2. Чехов утверждал, что если в первом акте пьесы на стене висит ружье, то в последнем акте оно должно выстрелить. Если в протоколе на рис.2 «висит» ключевое слово given, то в протоколе на рис.4 оно «стреляет»: там показано, что может быть «дано» в условиях задачи.



Рис.4

На рис.4 решается одна из разновидностей задач линейного программирования — транспортная задача: необходимо ежедневно с первого склада перевозить в два магазина 50 телевизоров4, а со второго склада — 70. При этом первый магазин продает за день 40 телевизоров, а второй — 80. Известны затраты на перевозку телевизоров со складов в магазины (четыре константы: 1200 у.е. при перевозке одного телевизора с первого склада в первый магазин, 1600 — с первого склада во второй магазин, 800 — со второго склада в первый магазин и 1000 — со второго склада во второй магазин).


Спрашивается, как нужно организовать перевозки (найти значения переменных x1, x2, x3 и x4), чтобы затраты были минимальны. На рис.4 дан ответ. Парадокс задачи в том, что по самому дешевому маршруту (со второго склада в первый магазин) ничего не возится (x3 = 0). Этим парадоксом может воспользоваться владелец автотранспортного предприятия, изменив план перевозок и максимизировав свою прибыль (рис.5 уже с функцией maximize).



Рис.5

Транспортная задача, приведенная на рис.4 и 55, кочует из одного учебника по математике для экономистов6 в другой. Вышеотмеченный парадокс замечают все авторы, обращая внимание на ценность математического подхода к решению задачи вместо обыденного, интуитивного (сначала перевезем сколько можно угля по дешевому маршруту, а потом примемся за остаток). Но парадокс задачи и в другом: эта задача сводится к решению одного единственного уравнения:

x1 + x3 = 40,

которое можно вывести и вручную, и с помощью средств символьной математики Mathcad (рис.6): x1=40, x3=0 — затраты на перевозки минимальны; x1=0, x3=40 — максимальны.



Рис.6

На рис.7 предоставлен протокол решения «чистокровной» задачи линейного программирования: требуется спланировать выпуск стульев первого типа (искомая переменная N1) по цене 8 у.е. и второго типа (N2) по цене 12 у.е., ориентируясь на ограничения по ресурсам: 440 погонных метров досок, 65 кв. м обивочной ткани и 320 человеко-часов трудовых резервов. У нас две целевые функции: F1 — общая число стульев и F2 — их стоимость. Задача решается по первой целевой функции (п.1 на рис.7) с помощью встроенной в Mathcad 8 функции maximize (ответ N1=110, N2=40) и по второй целевой функции графически (N1=60, N2=80 — см. п.2 на рис.7, где область существования решений оконтурена красными линиями, а максимум целевой функции — синей).




Рис.7

Механизм формирования графиков на рис.7 скрыт от посторонних взоров7. В Mathcad-документе любую область можно выделить, а затем запереть ее (Locking) для защиты от несанкционированного доступа. В Mathcad 8 выделенную область можно, кроме того, «захлопнуть» (Collapse), что и сделано в документе на рис.7 (см. черту ).

Технология решения в среде Mathcad оптимизационных задач (без ограничений — см. рис.2 и с ограничениями — рис.4, 5 и 7) очень схожа с технологией принятой, в среде электронных таблиц Excel (рис.8, где решается наша транспортная задача). И там и там необходимо сформировать целевую функцию, которую следует либо максимизировать, либо минимизировать, либо сделать равной заданной величине. Отмечаются переменные, влияющие на целевую функцию, и формируются ограничения. Отличия в деталях — в среде Excel, например, можно переменные менять целочисленно или дискретно. В задачах, решение которых отображено на рис.4, 5 и 7, коэффициенты подобраны так, чтобы ответ не получался целочисленным. В общем же случае могут выдаваться и доли телевизора или стула...



Рис.8

В среде Mathcad 8 появились дополнительные возможности при реализации систем алгебраических уравнений конструкцией given...find. Теперь переменные системы могут быть элементами вектора. Кроме того, если у системы несколько решений (корней), то начальное приближение можно задать вектором с n элементами, фиксирующими n корней системы (рис.9 — принцип «одним махом семерых побивахом»).


Рис.9


Теперь между given...find можно вставлять до 50 булевых выражений, а не 32 как в среде Mathcad 7. Вычисления теперь ведутся и по двоичной системе (суффикс b), а не только по десятеричной, восьмеричной (o) и шестнадцатеричной (h):



Я уже отмечал в [1-2], что пакет Mathcad в своем развитии перенимает полезные качества электронных таблиц. В частности, в окне Insert Function (Вставить Функцию) встроенные функции разбиты на категории:


  • функции Бесселя (Bessel);

  • функции комплексных чисел (Complex Numbers);

  • функции решения дифференциальных уравнений и систем (задача Коши, краевая задача, уравнения в частных производных — Differential Equation Solving);

  • функции типа выражения (Expression Type);

  • функции работы с файлами (File Access);

  • функции преобразований Фурье (Fourier Transform);

  • гиперболические функции (Hyperbolic);

  • функции обработки образов (Image Processing);

  • функции интерполяции и экстраполяции (Interpolation and Prediction);

  • логарифмические и экспоненциальные функции (Log and Exponential);

  • функции теории чисел и комбинаторики (Numbers Theory/Combinatorics);

  • функции, реализующие численные методы (Numerical Recipes):

  • функции ступенек и условия (Piecewise Continuous);

  • функции плотности вероятности (Probably Density);

  • функции распределения вероятности (Probably Distribution);

  • функции случайных чисел (Random Numbers);

  • функции регрессии и сглаживания (Regression and Smoothing);

  • функции обработки сигналов (Signal Processing);

  • функции решения алгебраических уравнений и систем, а также оптимизации (Solving);
  • функции сортировки (Sorting);


  • специальные функции (Special);

  • статистические функции (Statistics);

  • текстовые функции (String);

  • тригонометрические функции (Trigonometric);

  • функции округления и работы с частью числа (Truncation and Round-Off);

  • функции работы с векторами и матрицами (Vector and Matrix);

  • функции волнового преобразования (Wavelet Transform).

Это существенно облегчает поиск нужной из почти трехсот встроенных. Но, по-прежнему, нет категории «Функции пользователя»8.



Рис.10

Новых встроенных функций в Mathcad 8 стало на 28 больше. Часть из них расширяют математический аппарат пакета (например gmean, которая возвращает среднее геометрическое элементов векторов); другая часть позволяет сидящему за компьютером навести порядок в своих переменных. Функция IsString, к примеру, возвращает 1, если ее аргумент текстовая переменная, и 0 в противном случае. Кроме того, в Mathcad 8 вставлены функции, которые раньше входили в отдельные электронные учебники Image Processing, Numerical Recipes и Signal Processing.

Пакет Mathcad 8 «набрался хорошего» не только от Excel (и это мы еще отметим), но и от Word. Так, например, в панели инструментов появились кнопки , позволяющие нумеровать или маркировать списки в комментариях. В Mathcad 8 улучшилась такая специфическая функция текстовых процессоров как поиск и замена. Теперь эти операции можно проводить отдельно в комментариях или в формулах. Появилась возможность подстраивать набор кнопок на панелях инструментов.

Существенным изменением в среде Mathcad 8 подверглась технология работы с трехмерной графикой (рис.11). Тут также чувствуется сильное влияние Excel.




Рис.11

Во-первых, теперь ориентацию поверхности в виртуальном пространстве (вращение вокруг оси z и наклон к зрителю) можно менять не только через соответствующее диалоговое окно, но и через непосредственный контакт курсора мыши с поверхностью. Нажимается и держится левая кнопка мыши, мышь елозит по коврику, а поверхность «елозит» по экрану дисплея. Те же действия, произведенные с прижатой клавишей Shift, позволяют анимировать график. Щелчок по правой кнопке мыши вызывает обновленное и, можно сказать, существенно обогащенное меню работы с трехмерной графикой (рис.11). Рассказывать обо всех новшествах работы с трехмерной графикой у автора нет возможности9. Пока можно читателя только заинтриговать, отметив также важные детали:


  • отдельные участки поверхности теперь можно увеличивать (Zoom); раньше такое действие было допустимо только для декартового графика;

  • Марк Твен говорил, что отдельные немецкие слова так длинны, что их можно рассматривать в перспективе: положить голову на страницу и смотреть вдоль строки — слово в конце сходится как рельсы у горизонта; объемные поверхности в среде Mathcad 8 можно строить с учетом законов прямой и обратной10 перспективы (Perspective View);

  • поверхность можно освещать (Lighting), повышая тем самым эффективность ее обзора.

В окне свойств трехмерного графика (см. рис.11) теперь уже семь вкладок, что доводит богатство его форматирования до уровня Excel и даже MatLab11.

Литература:

  1. “Mathcad 7 Pro: что нового”. КомпьютерПресс, 8’97

  2. “Советы тем, кто работает с Mathcad”. КомпьютерПресс, 3 и 8’98

Автор выражает глубокую признательность сотрудникам MathSoft, Inc. Стивену Финчу (Steven Finch) и Робу Дули (Rob Dooley) за предоставленную возможность прослеживания развития пакета Mathcad.


следующая страница >>