Математические задачи в пакете MathCAD 12
Элементы интерфейса редактора формул
1.3.1. Элементы интерфейса редактора формулПеречислим элементы интерфейса редактора Mathcad:
Назначение Mathcad
1.1.1. Назначение MathcadЧто из себя представляет система Mathcad? Следует хорошо представлять себе, что в состав Mathcad входят несколько интегрированных между собой компонентов:
Отличительной чертой Mathcad от большинства других современных математических приложений является его построение по принципу WYSIWYG ("What You See Is What You Get" — "что вы видите, то и получите"). Поэтому он очень прост в использовании, в частности, из-за отсутствия необходимости сначала писать программу, реализующую те или иные математические расчеты, а потом запускать ее на исполнение. Вместо этого достаточно просто вводить математические выражения с помощью встроенного редактора формул, причем в виде, максимально приближенном к общепринятому, и тут же получать результат. Кроме того, можно изготовить на принтере печатную копию документа или создать страницу в Интернете именно в том виде, который этот документ имеет на экране компьютера при работе с Mathcad, либо можно включить документ в структуру электронной книги Mathcad.
Создатели Mathcad сделали все возможное, чтобы пользователь, не обладающий специальными знаниями в программировании (а таких большинство среди ученых и инженеров), мог в полной мере приобщиться к достижениям современной вычислительной науки и компьютерных технологий. Для эффективной работы с редактором Mathcad достаточно базовых навыков пользователя. С другой стороны, профессиональные программисты (к которым относит себя и автор этих строк) могут извлечь из Mathcad намного больше, создавая различные программные решения, существенно расширяющие возможности, непосредственно заложенные в Mathcad.
В соответствии с проблемами реальной жизни, математикам приходится решать одну или несколько из следующих задач:
Со всеми этими (а также некоторыми другими) задачами с успехом справляется Mathcad:
ПРИМЕЧАНИЕ
Начиная с 12-й версии, файлы Mathcad имеют формат ХМСО, являющийся разновидностью текстовой XML-разметки (и следующим шагом по сравнению с форматом MathML, примененным в 2001-й версии). Применение XML-формата оправдано, во-первых, тем, что он становится общеупотребительным для целого ряда приложений и данных самого различного типа. Во-вторых, удобство XML-файлов заключается в возможности использовать для просмотра и манипуляций с Mathcad-документами другие (предусматривающие это) приложения, например, для HTML-экспорта и т. п. Их можно также просматривать и редактировать "вручную", в любом текстовом редакторе.
Таким образом, следует хорошо представлять себе, что в состав Mathcad входит несколько интегрированных между собой компонентов — это мощый текстовый редактор для ввода и правки, как текста, так и формул, вычислительный процессор — для проведения расчетов согласно введенным формулам, и символьный процессор, являющийся, по сути, системой искусственного интеллекта. Сочетание этих компонентов создает удобную вычислительную среду для разнообразных математических расчетов и, одновременно, документирования результатов работы.
Операторы численного и символьного вывода
1.2.1. Операторы численного и символьного выводаДля того чтобы выполнить простые расчеты по формулам, проделайте следующее:
1. Определите место в документе, где должно появиться выражение, щелкнув мышью в соответствующей точке документа.
2. Введите левую часть выражения.
3. Введите знак численного равенства = (клавишей <=>) или символьного равенства -> (сочетанием клавиш
Оставим пока разговор о более надежных способах ввода математических символов и приведем пример простейших расчетов. Для вычисления арккосинуса какого-нибудь числа, например, о, достаточно ввести с клавиатуры выражение acos(0)= или acos(0)->. После того как будет нажата клавиша со знаком равенства (или введен знак символьных вычислений ->), с правой стороны выражения, как по мановению волшебной палочки, появится результат (листинги 1.1 и 1.2 соответственно).
Типы графиков
1.4.1. Типы графиковВ Mathcad встроено несколько различных типов графиков, которые можно разбить на две большие группы.
Деление графиков на типы несколько условно, т. к., управляя установками многочисленных параметров, можно создавать комбинации типов графиков, а также новые типы (например, двумерная гистограмма распределения является разновидностью простого X-Y графика).
Интерфейс пользователя
1.1.2. Интерфейс пользователяПосле того как Mathcad установлен на компьютере и запущен на исполнение, появляется основное окно приложения, показанное на Рисунок 1.1. Оно имеет ту же структуру, что и большинство приложений Windows. Сверху вниз располагаются заголовок окна, строка меню, панели инструментов (стандартная и форматирования) и рабочий лист, или рабочая область, документа (worksheet). Новый документ создается автоматически при запуске Mathcad. В самой нижней части окна находится строка состояния. Таким образом, интерфейс пользователя Mathcad сходен с другими приложениями Windows, и, помня о близости редактора Mathcad к обычным текстовым редакторам, вы интуитивно поймете назначение большинства кнопок на панелях инструментов.
Помимо элементов управления, характерных для типичного текстового редактора, Mathcad снабжен дополнительными средствами для ввода и редактирования математических символов, одним из которых является панель инструментов Math (Математика) (Рисунок 1.1). С помощью этой, а также ряда вспомогательных наборных панелей удобно осуществлять ввод уравнений.
Перечислим составные элементы интерфейса пользователя Mathcad:
Большинство команд можно выполнить как с помощью меню (верхнего или контекстного), так и панелей инструментов или клавиатуры.
Математические выражения и встроенные функции
1.2.2. Математические выражения и встроенные функцииОписанным в предыдущем разделе образом можно проводить более сложные и громоздкие вычисления, пользуясь при этом всем арсеналом функций, которые заложены разработчиками в систему Mathcad и называются поэтому встроенными функциями (в отличие от пользовательских функций, конструируемых непосредственно при разработке Mathcad-программы). Легче всего вводить имена встроенных функций с клавиатуры, как в примере с вычислением арккосинуса, но, чтобы избежать возможных ошибок в их написании, лучше выбрать другой путь (тем более что многие из них весьма сложны и имеют несколько аргументов, так что сложно запомнить имена и параметры всех функций наизусть).
Создание графика
1.4.2. Создание графикаВсе графики создаются совершенно одинаково, с помощью панели инструментов Graph (График), различия обусловлены отображаемыми данными. Чтобы создать график, например, двумерный декартов:
1. Поместите курсор ввода в то место документа, куда требуется вставить график.
2. Если на экране нет панели Graph (График), вызовите ее нажатием кнопки с изображением графиков на панели Math (Математика).
3. Нажмите на панели Graph (График) кнопку X-Y Plot для создания декартового графика (Рисунок 1.22) или другую кнопку для иного желаемого типа графика.
4. В результате в обозначенном месте документа появится пустая область графика с одним или несколькими местозаполнителями (Рисунок 1.22, слева). Введите в местозаполнители имена переменных или функций, которые должны быть изображены на графике. В случае декартова графика это два местозаполнителя данных, откладываемых по осям х и Y.
Ввод формул
1.3.2. Ввод формулБольшую часть окна Mathcad занимает рабочая область документа Mathcad, в которую пользователь вводит математические выражения, текстовые поля и элементы программирования. Ввести математическое выражение можно в любом пустом месте документа Mathcad. Для этого поместите курсор ввода в желаемое место документа, щелкнув в нем мышью, и просто начинайте вводить формулу, нажимая клавиши на клавиатуре. При этом в документе создается математическая область (math region), которая предназначена для хранения формул, интерпретируемых процессором Mathcad. Продемонстрируем последовательность действий на примере ввода выражения х5+х (Рисунок 1.11):
1. Щелкните мышью, обозначив место ввода.
2. Нажмите клавишу <х> — в этом месте вместо курсора ввода появится область с формулой, содержащей один символ х, причем он будет выделен линиями ввода.
3. Введите оператор возведения в степень, нажав клавишу <^> либо выбрав кнопку возведения в степень на панели инструментов Calculator (Калькулятор) — в формуле появится местозаполнитель для введения значения степени, а линии ввода выделят этот местозаполнитель.
4. Последовательно введите остальные символы <5>, <+>, <х>.
Таким образом, поместить формулу в документ можно, просто начиная вводить символы, числа или операторы, например + или /. Во всех этих случаях на месте курсора ввода создается математическая область, иначе называемая регионом, с формулой и линиями ввода. В последнем случае, если пользователь начинает ввод формулы с оператора, в зависимости от его типа автоматически появляются и местозаполнители, без заполнения которых формула не будет восприниматься процессором Mathcad (Рисунок 1.12).
Панели инструментов
1.1.3. Панели инструментовПанели инструментов служат для быстрого (в один щелчок мыши) выполнения наиболее часто применяемых команд. Все действия, которые можно выполнить с помощью панелей инструментов, доступны и через верхнее меню. На Рисунок 1.2 изображено окно Mathcad с основными панелями инструментов (три из них расположены непосредственно под строкой меню), а также дополнительными математическими (или наборными) панелями, о которых речь пойдет ниже. Перечислим основные панели.
Переменные и оператор присваивания
1.2.3. Переменные и оператор присваиванияОписанные пока действия демонстрируют использование Mathcad в качестве обычного калькулятора с расширенным набором функций. Для математика же интерес представляет, как минимум, возможность задания переменных и операций с функциями пользователя. Для того чтобы присвоить некоторой переменной (например, переменной х) определенное значение, необходимо ввести выражение типа х:=1. Этот пример приведен в первой строке листинга 1.3, а в его второй строке осуществляется вычисление значения переменной х при помощи оператора численного вывода (знака равенства).
Как вы видите, присваивание обозначается не знаком равенства, а специальным символом, чтобы подчеркнуть его отличие от операции численного вывода. Оператор присваивания вводится нажатием клавиши-двоеточия <:>, либо при помощи панели Calculator (Калькулятор). Символ равенства "=" говорит о вычислении значения слева направо, а символ ":=" — о присваивании значения справа налево.
Примечание 1
Примечание 1
Тем не менее пользователю позволено изменить внешнюю форму оператора на более привычный для математика символ обычного равенства (что категорически не рекомендуется делать, поскольку сильно ухудшает восприятие Mathcad-программы). Для этого (Рисунок 1.6) следует вызвать нажатием правой кнопки мыши из области оператора присваивания контекстное меню и выбрать в нем пункт Equal (Равно). Кстати, подобным образом можно выбирать написание и некоторых других операторов, допускающих обозначение разными символами (например, оператора умножения).
Примечание 2
Примечание 2
Если попытаться ввести знак численного вывода (обычного равенства) для переменной, впервые встречающейся в документе, он будет автоматически заменен символом присваивания.
Перемещение линий ввода внутри формул
1.3.3. Перемещение линий ввода внутри формулЧтобы изменить формулу, щелкните на ней мышью, поместив таким образом в ее область линии ввода, и перейдите к месту, которое хотите исправить. Перемещайте линии ввода в пределах формулы одним из двух способов:
Если раз за разом нажимать клавишу пробела в формуле, пример которой рассмотрен выше (см. Рисунок 1.11), то линии ввода будут циклически изменять свое положение, как это показано на Рисунок 1.13. Если в ситуации, показанной сверху на этом рисунке, нажать стрелку <<—>, то линии ввода переместятся влево (Рисунок 1.14). При нажатии пробела теперь линии ввода будут попеременно выделять одну из двух частей формулы.
СОВЕТ
Привыкнув к использованию пробела для перемещения внутри формул, можно существенно облегчить себе работу с Mathcad.
XY график двух векторов
1.4.3. X-Y график двух векторовСамый простой и наглядный способ получить декартов график — это сформировать два вектора данных, которые будут отложены вдоль осей х и Y. Последовательность построения графика двух векторов х и у показана на Рисунок 1.23.
Функции пользователя
1.2.4. Функции пользователяПодобно присваиванию числовых значений переменным, можно определить функции пользователя одного или нескольких аргументов, (листинги 1.5 и 1.6). В листинге 1.5 определяется функция f (х), а в листинге 1.6 — функция трех переменных g (а, у,ф).
Изменение формул
1.3.4. Изменение формулРедактируйте формулы в Mathcad так, как подсказывают вам интуиция и опыт работы с другими текстовыми редакторами. Большинство операций правки формул реализованы естественным образом, однако некоторые из них несколько отличаются от общепринятых, что связано с особенностью Mathcad как вычислительной системы. Рассмотрим основные действия по изменению формул.
Вставка оператора
Операторы могут быть унарными (действующими на один операнд, как, например, оператор транспонирования матрицы или смены знака числа), так и бинарными (например + или /, действующими на два операнда). При вставке нового оператора в документ Mathcad определяет, сколько операндов ему требуется. Если в точке вставки оператора один или оба операнда отсутствуют, Mathcad автоматически помещает рядом с оператором один или два местозаполнителя.
ВНИМАНИЕ!
То выражение в формуле, которое выделено линиями ввода в момент вставки оператора, становится его первым операндом.
Последовательность вставки оператора в формулу такова:
1. Поместите линии ввода на часть формулы, которая должна стать первым операндом.
2. Введите оператор, нажав кнопку на панели инструментов или сочетание клавиш.
Примечание 1
Примечание 1
Для того чтобы вставить оператор не после, а перед частью формулы, выделенной линиями ввода, нажмите перед его вводом клавишу , которая передвинет вертикальную линию ввода вперед. Это важно, в частности, для вставки оператора отрицания.
Справочная информация
1.1.4. Справочная информацияВместе с Mathcad поставляется несколько источников справочной информации, доступ к которым осуществляется через меню Help (Справка).
Кроме поименованных, меню Help (Справка) содержит следующие пункты:
Если в какой-либо момент работы с Mathcad вам потребовалась помощь, выберите Help / Mathcad Help, либо нажмите клавишу
ПРИМЕЧАНИЕ
Помимо описанной стандартной справочной системы, построенной в гипертекстовом виде, Mathcad комплектуется также более полным руководством пользователя в формате PDF. Доступ к PDF-версии руководства пользователя осуществляется через главное меню Windows, т. е. кнопку Start (Пуск). Следует отыскать в разделе Programs (Программы) главного меню группу программ компании MathSoft и выбрать пункт Mathcad User Guide.
XY график функции
1.4.4. X-Y график функцииНарисовать график любой скалярной функции f (х) можно двумя способами. Первый заключается в дискретизации значений функции, присвоении этих значений вектору и прорисовке графика вектора. Собственно, так и были получены графики синуса на Рисунок 1.23. Второй, более простой способ, называемый быстрым построением графика, заключается во введении функции в один из местозаполнителей (например, у оси Y), а имени аргумента — в местозаполнитель у другой оси (Рисунок 1.24).
Построение нескольких рядов данных
1.4.5. Построение нескольких рядов данныхНа одном графике может быть отложено до 16 различных зависимостей. Чтобы построить на графике еще одну кривую, необходимо выполнить следующие действия:
1. Поместите линии ввода таким образом, чтобы они целиком захватывали выражение, стоящее в надписи координатной оси Y (Рисунок 1.25).
2. Нажмите клавишу <,>.
Программирование
1.3.5. ПрограммированиеОсновными инструментами работы в Mathcad являются математические выражения, переменные и функции. Нередко записать формулу, использующую ту или иную внутреннюю логику (например, возвращение различных значений в зависимости от условий), в одну строку не удается. Назначение программных модулей как раз и заключается в определении выражений, переменных и функций в несколько строк, часто с применением специфических программных операторов.
Принцип программирования в Mathcad
При помощи элементов программирования можно определять переменные и функции (как показано в листинге 1.19).
Типы чисел
1.2.5. Типы чиселПеречислим основные типы переменных, которые используются в Mathcad.
Действительные числа
Любое выражение, начинающееся с цифры, Mathcad интерпретирует как число. Поэтому для ввода числа просто начните его набирать на клавиатуре (листинг 1.7).
Примечание 1
Примечание 1
Если вы продолжите листинг 1.7 последовательным выводом всех переменных, то с удивлением обнаружите, что некоторые из чисел выглядят по-иному (например, число d=0). Это связано с соответствующей настройкой формата результата численного вывода, которую можно поменять, используя команду Format / Result (Формат / Результат).
Примечание 2
Примечание 2
Можно организовать ввод числа в других системах счисления: двоичной (binary), восьмеричной (octal) или шестнадцатеричной (hexadecimal) (листинг 1.8).
Форматирование графиков
1.4.6. Форматирование графиковВозможности форматирования координатных осей графиков включают в себя управление их внешним видом/диапазоном, шкалой, нумерацией и отображением некоторых значений на осях при помощи маркеров.
Масштаб осей
Когда график создается впервые, Mathcad выбирает представленный диапазон для обеих координатных осей автоматически. Чтобы изменить этот диапазон:
1. Перейдите к редактированию графика, щелкнув в его пределах мышью.
2. График будет выделен, а вблизи каждой из осей появятся два поля с числами, обозначающими границы диапазона. Щелкните мышью в области одного из полей, чтобы редактировать соответствующую границу оси.
3. Пользуясь клавишами управления курсором и клавишами
4. Введите новое значение диапазона.
5. Щелкните за пределами поля, и график будет автоматически перерисован в новых пределах.
Чтобы вернуть автоматический выбор какого-либо диапазона, удалите число из соответствующего поля и щелкните вне его. Граница шкалы будет выбрана Mathcad, исходя из значений данных, представляемых на графике.
Свойства осей
Изменение внешнего вида шкалы, нанесенной на координатную ось, производится с помощью диалогового окна Formatting Currently Selected X-Y Plot (Форматирование выбранного графика), в котором следует перейти на вкладку X-YAxes (Оси X-Y) (Рисунок 1.27). Вызвать диалог можно двойным щелчком мыши в области графика или выполнением команды Format / Graph / X-Y Plot (Формат / График / X-Y График) или выбором в контекстном меню команды Format (Формат).
С помощью флажков и переключателей легко поменять внешний вид каждой из осей. Перечислим доступные опции и поясним их действие:
Примечание 1
Примечание 1
В Mathcad 12 появилась новая возможность для построения графиков в логарифмическом масштабе (см. разд. "Графики в логарифмическом масштабе", ниже).
Ранжированные переменные и матрицы
1.2.6. Ранжированные переменные и матрицыМассивами (arrays) называют упорядоченные последовательности чисел, или элементов массива. Доступ к любому элементу массива возможен по его индексу, т. е. номеру в последовательности чисел (в листинге 1.14 а — это массив, ai — его элемент). Применение массивов чрезвычайно эффективно в математических расчетах.
Размерные переменные
1.2.7. Размерные переменныеВ Mathcad числовые переменные и функции могут обладать размерностью. Сделано это для упрощения инженерных и физических расчетов. В Mathcad встроено большое количество единиц измерения, с помощью которых и создаются размерные переменные.
Чтобы создать размерную переменную, определяющую, например, силу тока в 10 А, введите выражение, присваивающее переменной i значение 10: i:=10, и затем символ умножения <*>, а потом букву "А". Поскольку все символы, обозначающие единицы измерения, зарезервированы и имеют предустановленные значения (связанные с размерностью), то литера А будет распознана Mathcad как Ампер (листинг 1.17, первая строка). Если ранее вы переопределили переменную А, присвоив ей какое-либо значение, то восприниматься как единица силы тока она уже не будет.
Трехмерные графики
1.4.7. Трехмерные графикиКоллекция трехмерных графиков — настоящее чудо, которое Mathcad дарит пользователю. За считанные секунды вы можете создать великолепную презентацию результатов своих расчетов. Рамки данной книги не позволяют описать технику их создания и форматирования подробно, поэтому мы ограничимся лишь вводными замечаниями и простыми примерами, которые помогут ориентироваться в дальнейшем материале. Для этого рассмотрим на простом примере функции z(x,y) и матрицы z (они заданы в листингах 1.22 и 1.23 соответственно) технику построения трехмерных графиков различных типов
Чтобы создать трехмерный график, требуется нажать кнопку с изображением любого из типов трехмерных графиков на панели инструментов Graph (График). В результате появится пустая область графика с тремя осями (Рисунок 1.34) и единственным местозаполнителем в нижнем левом углу. В этот местозаполнитель следует ввести либо имя z функции z(x,y) двух переменных для быстрого построения трехмерного графика (Рисунок 1.35), либо имя матричной переменной z, которая задаст распределение данных zx,Y на плоскости XY (Рисунок 1.36). Еще раз отметим, что для получения графиков (и этих, и последующих) не требуется никакого текста, кроме соответствующего листинга и введения имени соответствующей функции или матрицы в местозаполнитель.
Быстрое построение графика функции
Рисунок 1.24. Быстрое построение графика функции
В результате Mathcad сам создает график функции в пределах значений аргумента, по умолчанию принятых равными от -10 до 10. Разумеется, впоследствии можно поменять диапазон значений аргумента, и график автоматически подстроится под него.
Необходимо заметить, что если переменной аргумента функции было присвоено некоторое значение до построения в документе графика, то вместо быстрого построения графика будет нарисована зависимость функции с учетом этого значения.
Быстрое построение графика линий
Рисунок 1.37. Быстрое построение графика линий уровня (продолжение листинга 1.22)
Быстрое построение графика поверхности
Рисунок 1.35. Быстрое построение графика поверхности функции (продолжение листинга 1.22)
Быстрое построение графика трехмерного
Рисунок 1.39. Быстрое построение графика трехмерного распределения точек (продолжение листинга 1.22)
Быстрое построение трехмерной
Рисунок 1.38. Быстрое построение трехмерной гистограммы (продолжение листинга 1.22)
Декартов график с двумя осями ординат
Рисунок 1.29. Декартов график с двумя осями ординат
Графики в логарифмическом масштабе
Как уже говорилось, для построения графиков в логарифмическом масштабе необходимо установить опцию Log scale (Логарифмический масштаб) в диалоге Formatting Currently Selected X-Y Plot (Форматирование выбранного графика). В целях облегчения труда пользователя по подготовке таких графиков в Mathcad 12 добавлены встроенные функции logspace и logpts.
Функция logspace позволяет создать вектор точек из отстоящих (в логарифмическом масштабе) друг от друга на равное расстояние, который будет использоваться в качестве аргумента. Например, рассмотрим функцию f (х), которая на одном промежутке х меняется быстро, а на другом — медленно. Для того чтобы "красиво" и информативно построить график подобной функции, раньше приходилось создавать вектор х вручную, а теперь, благодаря функции logspace, этот процесс легко автоматизировать (Рисунок 1.30). Вторая функция, logpts, предназначена для генерации вектора, состоящего из нескольких серий точек, расположенных линейно-равномерно в пределах каждой из серий (Рисунок 1.31).
Диалоговое окно Formatting Currently Selected XY Plot
Рисунок 1.27. Диалоговое окно Formatting Currently Selected X-Y Plot
Два графика векторных полей заданных
Рисунок 1.40. Два графика векторных полей, заданных матрицами (продолжение листинга 1.23)
Форматирование кривых на графике
Рисунок 1.32. Форматирование кривых на графике
Маркеры
Маркером на координатных осях отмечаются метки некоторых значений. Маркер представляет собой линию, перпендикулярную оси, снабженную числом или переменной. Чтобы создать маркер:
1. Дважды щелкните на графике.
2. На вкладке X-Y Axes (Оси X-Y) диалога Formatting Currently Selected X-Y Plot (Форматирование выбранного графика), (см. Рисунок 1.27) установите флажок Show markers (Показать маркеры).
3. Нажмите кнопку ОК.
4. В появившийся местозаполнитель введите число или имя переменной, значение которой вы хотите отобразить на оси маркером (Рисунок 1.33, слева).
5. Щелкните вне маркера.
Готовые маркеры показаны на Рисунок 1.33, справа. На каждой из осей допускается установить по два маркера. Если определен лишь один из них, то второй виден не будет.
Функция logpts выдает вектор точек
Рисунок 1.31. Функция logpts выдает вектор точек, расположенных равномерно по декадам
Ряды данных
Чтобы отформатировать стиль построения кривых, представляющих ряды данных, следует перейти к вкладке Trace (Кривые) диалогового окна Formatting Currently Selected X-Y Plot (Форматирование выбранного графика) (Рисунок 1.32). На данной вкладке можно выбрать тип кривых (точки и/или линии), форму и размер маркеров точек, тип и толщину линий, а также задать цвет и легенду для каждой из кривых.
Функция logspace выдает вектор
Рисунок 1.30. Функция logspace выдает вектор равномерно-логарифмически расположенных точек
Приведем описание функций и их аргументов:
График поверхности заданный матрицей
Рисунок 1.36. График поверхности, заданный матрицей (продолжение листинга 1.23)
Форматирование трехмерных графиков выполняется с помощью диалогового окна 3-D Plot Format (Форматирование 3-D графика), которое вызывается двойным щелчком мыши.
Графики
1.4. ГрафикиОдним из наиболее впечатляющих достоинств Mathcad, несомненно, являются развитые возможности построения графиков.
Интерфейс редактирования
Рисунок 1.10. Интерфейс редактирования
Курсоры и местозаполнители, относящиеся к редактированию формул, представлены на Рисунок 1.10.
Изменение положения линий ввода
Рисунок 1.13. Изменение положения линий ввода с помощью пробела (коллаж)
Рисунок 1.14. Изменение положения линий ввода пробелом после сдвига стрелкой <"—> (коллаж)

Таким образом, комбинация клавиш со стрелками и пробела позволяет легко перемещаться внутри формул. Накопив некоторый опыт, вы без труда освоите эту технику. Иногда поместить линии ввода в нужное место формулы с помощью указателя мыши непросто. Поэтому в Mathcad для этого лучше использовать клавиатуру.
Линии сетки на декартовом и полярном
Рисунок 1.28. Линии сетки на декартовом и полярном графиках, вид осей — Crossed
Примечание 2
Примечание 2
Изменить описанные параметры можно и в диалоговом окне Axis Format (Формат оси), которое появляется, если щелкнуть дважды на самой оси.
Вторая ось Y
В Mathcad 12 появилась дополнительная возможность добавления второй оси Y, обладающей собственной шкалой (Рисунок 1.29). Использование двух осей ординат очень удобно, когда на одном и том же графике представляются разнородные данные, не совпадающие по величине (например, данные различной размерности, либо различающиеся на несколько порядков, и т. п.).
Для того чтобы задать опцию рисования второй оси ординат:
1. Вызовите двойным щелчком диалоговое окно Formatting Currently Selected X-Y Plot (Форматирование выбранного графика) и откройте его вкладку X-Y Axes (Оси X-Y) (см. Рисунок 1.27).
2. Установите флажок проверки Enable secondary Y axis (Включить вторую ось Y).
3. Откройте вкладку Secondary Y axis (Вторая ось Y) и настройте в ней желаемые параметры второй оси, точно так же, как вы это делаете для первой оси.
4. Нажмите ОК.
5. В появившиеся местозаполнители возле второй оси ординат введите желаемые имена переменных или выражения, которые вы хотите отложить на данной оси.
6. При желании настройте остальные параметры второй оси Y (пределы, маркеры и т. п.).
Численный расчет простого выражения
Листинг 1.1. Численный расчет простого выражения
Примеры простых вычислений
Листинг 1.10. Примеры простых вычислений с комплексными числами(продолжение листинга 1.9)
Встроенные константы
Некоторые имена в Mathcad зарезервированы под системные переменные, которые называются встроенными константами (built-in constants). Встроенные константы делятся на два типа: математические (math constants), хранящие значения некоторых общеупотребительных специальных математических символов, и системные (system variables), определяющие работу большинства численных алгоритмов, реализованных в Mathcad.
Примечание 5
Примечание 5
При желании можно изменить значение любой из перечисленных констант или использовать их в качестве переменных в расчетах. Разумеется, если присвоить константе новое значение, прежнее станет недоступным.
Математические константы по-разному интерпретируются при численных и символьных вычислениях. Вычислительный процессор просто воспринимает их как некоторые числа (листинг 1.11), а символьный распознает каждое из них, исходя из математического контекста, и способен выдавать математические константы в качестве результата. Перечислим математические константы:
+
+
);
);
+
+
);
,
или <1>
,
);
, эквивалентный 0,01.
Значения математических констант
Листинг 1.11. Значения математических констант
Системные переменные определяют работу численных методов, заложенных во встроенные функции. Их предустановленные значения перечислены в листинге 1.12 (в принципе, допускается их менять в любой части документа). Системные переменные:
Ввод и вывод строк
Листинг 1.13. Ввод и вывод строк
НеЧисло
В версии Mathcad 12 введен новый тип данных, носящий имя NaN — NotANumber (НеЧисло). Он предназначен, главным образом, для идентификации элементов массивов, содержащих пропущенные (по тем или иным причинам) данные. В частности (см. разд. 13.3.3), при импорте матрицы данных из внешнего файла элементам, соответствующим пропускам (пустым местам в файле), будет автоматически присвоено значение NaN. Если какие-либо элементы вектора или матрицы, имеющие тип NaN, будут откладываться на графике, то они станут просто игнорироваться при построении кривой. Тем самым, во-первых, повышается надежность импорта данных из файлов; во-вторых, улучшается качество построения графиков рядов данных при наличии пропусков; и, в-третьих, пользователю предоставляются дополнительные средства по управлению вычислениями, т. к. любой переменной можно присвоить значение НеЧисло, например: x:=NaN.
Помните о том, что математическое выражение, включающее в себя число типа NaN, тоже имеет тип NaN. Идентифицировать значение переменной или выражения как НеЧисло можно при помощи новой служебной функции isNaN.
Одномерный массив (вектор)
Листинг 1.14. Одномерный массив (вектор)
В Mathcad условно выделяются два типа массивов:
Двумерный массив (матрица)
Листинг 1.15. Двумерный массив (матрица)
Доступ ко всему массиву осуществляется обычным поименованием векторной переменной. Над элементами массива можно совершать действия, как над обычными числами. Нужно только правильно задать соответствующий индекс или сочетание индексов массива. Например, чтобы получить доступ к нулевому элементу вектора а из листинга 1.14:
1. Введите имя переменной массива (а).
2. Нажмите кнопку Subscript (Нижний индекс) со значком х„ на панели Matrix (Матрица), либо введите [.
3. В появившийся справа снизу от имени массива местозаполнитель введите желаемый индекс (0).
Если после этого ввести знак численного вывода, то справа от него появится значение нулевого элемента вектора, как показано во второй строке листинга 1.14.
Чтобы получить доступ к элементу многоиндексного массива (например, элементу a1,0 матрицы а из листинга 1.15):
1. Введите имя переменной массива (а).
2. Перейдите к вводу нижнего индекса, введя [.
3. Введите в местозаполнитель индекса первый индекс (2), запятую (,) и в появившийся после запятой местозаполнитель введите второй индекс (0).
В результате будет получен доступ к элементу, как показано в последней строке листинга 1.15.
Примечание 1
Примечание 1
В рассмотренных листингах нумерация индексов массивов начинается с нуля, иными словами, первый элемент массива имеет индекс 0. Стартовый индекс массива задается системной переменной ORIGIN, которая по умолчанию равна нулю. Если вы привыкли нумеровать элементы векторов и матриц с единицы, присвойте этой переменной значение 1. Обратите внимание, что в этом случае попытка выяснить значение нулевого элемента вектора приводит к ошибке, поскольку его значение не определено.
Примечание 2
Примечание 2
Помимо доступа к отдельным элементам массива, имеется возможность совершать действия над его подмассивами (например, векторами-столбцами, образующими матрицу). Делается это с помощью оператора со значком х<>
на панели Matrix (Матрица) (листинг 1.16). Символ "Т" во второй строке листинга 1.16 обозначает операцию транспонирования матрицы.
Доступ к подмассиву (продолжение листинга 1 15)
Листинг 1.16. Доступ к подмассиву (продолжение листинга 1.15)
Расчеты с размерными переменными
Листинг 1.17. Расчеты с размерными переменными
Вставить единицу измерения можно и по-другому, не вручную, а при помощи средств Mathcad. Для этого выберите команду Insert / Unit (Вставка / Единица), либо нажмите кнопку с изображением мерного стакана на стандартной панели инструментов, либо клавиши
+
. Затем в списке Unit (Единица измерения) открывшегося диалогового окна Insert Unit (Вставка единицы измерений) выберите нужную единицу измерения Ampere (А) и нажмите кнопку ОК. Если вы затрудняетесь с выбором конкретной единицы измерения, но знаете, какова размерность переменной (в нашем случае это электрический ток), то попробуйте выбрать ее в списке Dimension (Размерность) диалогового окна Insert Unit (Вставка единицы измерений). Тогда в списке Unit (Единица измерения) появятся допустимые для этой величины единицы измерений, из которых выбрать нужную будет легче (Рисунок 1.9).
Просмотреть вставку единиц измерения можно и без выхода из диалогового окна Insert Unit, нажимая вместо кнопки ОК кнопку Insert (Вставить). В этом случае вы увидите, что единица измерений появилась в нужном месте документа, и можете поменять ее, оставаясь в диалоге Insert Unit.
Примечание 1
Примечание 1
Многие единицы измерения можно представлять в виде различных символов. Например, ампер — как А или amp, Ом — как ohm и т. д.
Над размерными переменными можно производить любые разумные с физической точки зрения расчеты. Пример расчета сопротивления через отношение напряжения к току приведен в листинге 1.17. Работая с размерными переменными, приготовьтесь к тому, что Mathcad будет постоянно контролировать корректность расчетов. Например, нельзя складывать переменные разной размерности, в противном случае будет получено сообщение об ошибке "The units in this expression do not match" (Размерности в этом выражении не совпадают). Тем не менее, позволяется складывать, например, амперы с килоамперами и величины, размерность которых выражена в разных системах измерения (например, СИ и СГС).
Вывод единицы измерения
Листинг 1.18. Вывод единицы измерения размерной величины в системе СИ Mathcad 2001-11
Функция условия определенная
Листинг 1.19. Функция условия, определенная с помощью программы
Традиционное программирование, упрощенный вариант которого применен в Mathcad и осуществляется при помощи панели инструментов Programming (Программирование), имеет ряд существенных преимуществ, которые в ряде случаев делают документ более простым и читаемым:
Как видно из листинга 1.19, программный модуль обозначается в Mathcad вертикальной чертой, справа от которой последовательно записываются операторы языка программирования. Чтобы начать создание программного модуля, следует (в случае листинга 1.19 после символа присваивания) нажать на панели Programming (Программирование) кнопку Add One (Добавить линию). Затем, если приблизительно известно, сколько строк кода будет содержать программа, можно создать нужное количество линий повторными нажатиями кнопки Add Line (Добавить линию) (Рисунок 1.18).
Аналитический расчет простого выражения
Листинг 1.2.Аналитический расчет простого выражения
Примечание 1
Примечание 1
Здесь и далее во всей книге в листинги вынесено содержание рабочей области документа Mathcad вместе с полученными результатами вычислений. Почти все листинги выглядят в окне Mathcad рассматриваемых версий совершенно одинаково. Исключение составляют листинги, содержащие новые возможности той или иной версии Mathcad (в этих случаях они снабжены специальной ремаркой). Все листинги (а также рисунки) книги помещены также и на прилагаемом к ней компакт-диске, причем, по возможности, в формате Mathcad 2001, что позволяет просматривать их с одинаковым успехом при помощи любой из четырех версий программы (2001—12), которая установлена на вашем компьютере.
ПРИМЕЧАНИЕ 2
Одним из основных достоинств новой версии Mathcad 12 является новое ядро программы, позволяющее осуществлять вычисления с большей скоростью. Наиболее заметно это проявляется при расчетах с матрицами и векторами больших размеров, а также вложенными массивами (тензорами). Для таких задач разработчики Mathcad анонсируют повышение быстроты расчетов примерно в три раза по сравнению с предыдущими версиями. К тому же, некоторые преимущества в плане ускорения работы программы дает и архитектура Mathcad, построенная на платформе новой технологии .NET компании Microsoft.
Важно заметить, что по умолчанию вычисления в документе производятся в режиме реального времени, т. е. как только пользователь вводит в формулу оператор численного или символьного равенства, Mathcad пытается вычислить это выражение (и все остальные формулы, находящиеся ниже по тексту). Иногда, в основном в случае сложных и долгих расчетов, бывает полезно остановить их нажатием клавиши
, а затем (в нужный момент) возобновить нажатием клавиши
или командой Tools / Calculate (Сервис / Вычислить) и Tools / Calculate Worksheet (Сервис / Вычислить во всем документе).
ПРИМЕЧАНИЕ
Немаловажным нововведением 12-й версии является многопотоковость, позволяющая одновременно осуществлять вычисление документа и его редактирование. Иными словами, преодолено досадное неудобство прошлых версий Mathcad, делающее всю рабочую область документа недоступной для редактирования в режиме вычислений, т. е. после ввода команды Calculate (Вычислить). Однако в Mathcad 12 уже нельзя переключиться на старый режим вычислений, и флажка проверки Old engine (Старый процессор) в диалоговом окне Worksheet options (Опции документа) уже нет. Пользователям, применявшим фрагменты, поддерживаемые только прошлыми версиями Mathcad, ничего не остается кроме того, что исправить свои документы вручную в соответствии с новыми требованиями Mathcad 12.
Пример усовершенствования программы
Листинг 1.20. Пример усовершенствования программы
В режиме выполнения программы, а это происходит при любой попытке вычислить f (х), выполняется последовательно каждая строка кода. Например, в предпоследней строке листинга 1.20 вычисляется f (1). Рассмотрим работу каждой строки кода этого листинга.
1. Поскольку х=1, то условие х<0 не выполнено, и в первой строке ничего не происходит.
2. Условие второй строки х>
о выполнено, поэтому выполняются обе следующие строки, объединенные короткой вертикальной чертой в общий фрагмент.
3. Функции f(x) присваивается значение f (x)="positive".
4. Условие х>
1000 не выполнено, поэтому значение "big positive" не присваивается f (х), она так и остается равной строке "positive".
5. Последняя строка не выполняется, т. к. одно из условий (х>
0) оказалось истинным, и оператор otherwise (т. е., "иначе") не понадобился.
Таким образом, основной принцип создания программных модулей заключается в правильном расположении строк кода. Ориентироваться в их действии довольно легко, т. к. фрагменты кода одного уровня сгруппированы в программе с помощью вертикальных черт.
Локальное присваивание (<—)
Язык программирования Mathcad не был бы эффективным, если бы не позволял создавать внутри программных модулей локальные переменные, которые "не видны" извне, из других частей документа. Присваивание в пределах программ, в отличие от документов Mathcad, производится с помощью оператора Local Definition (Локальное присваивание), который вставляется нажатием кнопки с изображением стрелки (<-) на панели Programming (Программирование).
ВНИМАНИЕ!
Ни оператор присваивания :=, ни оператор вывода = в пределах программ применять не разрешается.
В Mathcad 12 переменным, которые впервые появляются в программных модулях, по умолчанию присваивается значение 0. В прежних версиях программы использование переменных в программах без предварительного присваивания им значений приводило к генерации ошибки (как в расчетах на рабочей области документов Mathcad).
Локальное присваивание иллюстрируется листингом 1.21. Переменная z существует только внутри программы, выделенной вертикальной чертой. Из других мест документа получить ее значение невозможно. На этом же листинге вы видите пример применения оператора цикла for.
Локальное присваивание в программе
Листинг 1.21. Локальное присваивание в программе
Функция для быстрого
Листинг 1.22. Функция для быстрого построения трехмерных графиков
Матрица для отображения на трехмерных графиках
Листинг 1.23. Матрица для отображения на трехмерных графиках
Помимо трехмерных графиков поверхности, нажатие соответствующих кнопок на панели Graph (График) приводит к созданию графика линий уровня (Рисунок 1.37), трехмерной гистограммы (Рисунок 1.38), трехмерного распределения точек (Рисунок 1.39) или векторного поля (Рисунок 1.40). Все эти графики представляют данные, составленные листингами 1.22 и 1.23.
Присваивание значения
Листинг 1.3.Присваивание значения переменной и его использование в расчетах
Переменные в аналитических расчетах
Листинг 1.4. Переменные в аналитических расчетах
Определение функции
Листинг 1.5. Определение функции пользователя и расчет ее значений в точке
Функция пользователя
Листинг 1.6. Функция пользователя трех аргументов и ее вычисление в точке="12.gif" >
График функции f (х) показан на Рисунок 1.7. Чтобы построить его, следует нажать на панели Graph (График) кнопку с нужным типом графика (на нее на рисунке наведен указатель мыши) и в появившейся заготовке графика определить значения, которые будут отложены по осям. В нашем случае потребовалось ввести х в местозаполнитель возле оси х и f (х) — возле оси Y.
Примечание 1
Примечание 1
Сравните содержание листинга 1.5 и Рисунок 1.7. Такой стиль подачи материала будет сохранен во всей книге.
Ввод действительных чисел
Листинг 1.7. Ввод действительных чисел
Ввод чисел в других системах исчисления
Листинг 1.8. Ввод чисел в других системах исчисления
Комплексные числа
Большинство операций в среде Mathcad по умолчанию осуществляются над комплексными числами. Комплексное число является суммой действительного и мнимого числа, получающегося путем умножения любого действительного числа на мнимую единицу (imaginary unit) i. По определению полагается, i2=-1. Чтобы ввести мнимое число, например 31:
1. Введите действительный сомножитель 3i.
2. Введите символ "i" или "j" непосредственно после него.
Примечание 3
Примечание 3
Для ввода мнимой единицы надо нажать клавиши <1>
,
. Если просто ввести символ "i", то Mathcad интерпретирует его как переменную i. Кроме того, мнимая единица имеет вид 1i, только когда соответствующая формула выделена. В противном случае мнимая единица отображается просто как i (Рисунок 1.8).
Ввод и вывод комплексных чисел
Листинг 1.9. Ввод и вывод комплексных чисел
Предустановленные значения системных переменных
Листинг1.12. Предустановленные значения системных переменных
Строковые переменные
Значением переменной или функции может быть не только число, но и строка, состоящая из любой последовательности символов, заключенной в кавычки (листинг 1.13). Для работы со строками в Mathcad имеется несколько встроенных функций (см. приложение 3).
Примечание 6
Примечание 6
Аналогично листингам 1.5 и 1.6 (см. разд. 1.2.4) можно определять пользовательские функции строкового типа.
Примечание 7
Примечание 7
Системная константа ORIGIN может теперь устанавливать не только номер начального индекса массивов, но и начало отсчета для соответствующих встроенных функций строкового (текстового) аргумента. Если вы хотите включить эту опцию, установите флажок проверки Use ORIGIN for string indexing (Использовать ORIGIN для индексирования строковых переменных) на вкладке Calculations (Вычисления) диалогового окна Worksheet options (Опции документа).
Примечание 8
Примечание 8
Начиная с версии Mathcad 12, изменены требования к аргументу функций конвертации строковых переменных. Функция str2num теперь "умеет" переводить в числа текстовые строки, представляющие двоичную, восьмеричную или шестнадцатеричную запись числа. Аргументом функции vec2str, выдающей строку на основе кодировки ее символов, напротив, теперь может быть вектор, состоящий из чисел диапазона 32-255.
и представляют собой фрагменты
Листинги представляют собой фрагменты рабочих областей документа, которые работают без какого-либо дололнительного кода (если это не оговорено особо). Можно ввести содержание любого листинга в новый (пустой) документ, и он будет работать точно так же, как в книге. Чтобы не загромождать листинги, графики выведены в отдельные рисунки. В отличие от Рисунок 1.6, в следующих рисунках код листингов не дублируется, а если имеется ссылка на листинг в подрисуночной надписи, то это подразумевает, что данный график может быть вставлен в документ после упомянутого листинга.Начало создания программного модуля
Рисунок 1.18. Начало создания программного модуля
В появившиеся местозаполнители введите желаемый программный код, используя программные операторы. В рассматриваемом примере в каждый местозаполнитель вводится строка, например, в средний — "positive" (Рисунок 1.19). Затем нажимается кнопка If (Если) на панели Programming (Программирование) и в возникший местозаполнитель вводится выражение х>0. После того как программный модуль полностью определен, и ни один местозаполнитель не остался пустым, функция может использоваться обычным образом, как в численных, так и в символьных расчетах.
ВНИМАНИЕ!
Не вводите с клавиатуры имена программных операторов. Для их вставки можно применять лишь сочетания клавиш, которые приведены в тексте всплывающей подсказки (Рисунок 1.18 и 1.19).
Окно приложения Mathcad 12 с пустым документом
Рисунок 1.1. Окно приложения Mathcad 12 с пустым документом
Основные и математические (наборные) панели инструментов
Рисунок 1.2. Основные и математические (наборные) панели инструментов
Группы кнопок на панелях инструментов разграничены по смыслу вертикальными линиями — разделителями. При наведении указателя мыши на любую из кнопок рядом с кнопкой появляется всплывающая подсказка — короткий текст, поясняющий назначение кнопки. Наряду со всплывающей подсказкой более развернутое объяснение готовящейся операции можно отыскать в строке состояния.
Панель Math (Математика) предназначена для вызова на экран еще девяти панелей (Рисунок 1.2), с помощью которых, собственно, и происходит вставка математических операций в документы. В прежних версиях Mathcad эти математические панели инструментов назывались палитрами (palettes) или наборными панелями. Чтобы вызвать какую-либо из них, нужно нажать соответствующую кнопку на панели Math. Перечислим назначение математических панелей:
При наведении указателя мыши на многие из кнопок математических панелей появляется всплывающая подсказка, содержащая еще и сочетание горячих клавиш, нажатие которых приведет к эквивалентному действию. Ввод действий с клавиатуры часто удобнее нажатия кнопок панелей инструментов, но требует большего опыта.
Вызвать любую панель на экран или скрыть ее можно с помощью пункта Toolbars (Панели инструментов) меню View (Вид), выбирая в открывающемся подменю имя нужной панели. Убрать любую панель с экрана можно еще и посредством контекстного меню, которое вызывается щелчком правой кнопкой мыши в любом месте панели (например, на любой кнопке). В контекстном меню следует выбрать пункт Hide (Скрыть). Кроме того, если панель плавающая, т. е. не прикреплена к основному окну (как, например, все панели на Рисунок 1.2), то ее можно отключить кнопкой закрытия.
Примечание 1
Примечание 1
Далее в книге, говоря о совершении того или иного действия с помощью меню, последовательность выбора пунктов меню будем приводить сокращенно, разделяя их косыми чертами. Например, пункт Toolbars меню View обозначается как Toolbars / View.
Математические панели, в отличие от основных, можно вызвать или скрыть нажатием соответствующей кнопки панели Math (Математика). Присутствие или отсутствие математических панелей показано в виде нажатой (или отжатой) соответствующей кнопки (см. Рисунок 1.2).
На некоторых рисунках этой главы (см., например, Рисунок 1.1) виден курсор ввода в виде небольшого крестика (на дисплее он имеет красный цвет). С его помощью отмечается незаполненное место в документе, куда в текущий момент можно вводить формулы или текст. Чтобы переместить курсор, достаточно щелкнуть указателем мыши в требуемом месте либо передвинуть его клавишами-стрелками. Если выполнить щелчок в области- формулы или начать ввод выражения на пустом месте, вместо курсора появятся линии редактирования, отмечающие место в формуле или тексте, редактируемое в данный момент (см., например, Рисунок 1.5 и 1.6 ниже).
Основные сведения о Mathcad
Основные сведения о MathcadВ данной главе рассмотрены базовые приемы работы с Mathcad 2001—12. Мы дадим самые основные сведения, касающиеся интерфейса и возможностей Mathcad, пользуясь тем, что он интуитивен и похож на другие программы Windows (см. разд. 1.3).
Основы вычислений в Mathcad
1.2. Основы вычислений в MathcadПродемонстрируем, как можно быстро начать работу с Mathcad, научиться вводить математические выражения и получать результаты расчетов.
ВНИМАНИЕ!
Большая часть содержания книги с одинаковым успехом применима к четырем последним версиям Mathcad: 2001, 20011, 11 и 12. Если определенные опции применимы только к некоторым версиям, на это делается соответствующее указание.
Панель инструментов Math служит
Рисунок 1.5. Панель инструментов Math служит для вызова на экран остальных наборных панелей
Примечание 1
Примечание 1
Большинство численных методов, запрограммированных в Mathcad, реализовано в виде встроенных функций. Пролистайте на досуге списки в диалоговом окне Insert Function (Вставить функцию), чтобы представлять себе, какие специальные функции и численные методы можно использовать в расчетах (их подробный перечень приведен в приложении 3).
Не всякий символ можно ввести с клавиатуры. Например, неочевидно, как вставить в документ знак интеграла или дифференцирования. Для этого в Mathcad имеются специальные панели инструментов, очень похожие на средства формульного редактора Microsoft Word. Как мы уже говорили ранее, одна из них — панель инструментов Math (Математика), показанная на Рисунок 1.1. Она содержит инструменты для вставки в документы типично математических объектов (операторов, графиков, элементов программ и т. п.). Эта панель показана более крупным планом на Рисунок 1.5 уже на фоне редактируемого документа.
Панель содержит девять кнопок, нажатие каждой из которых приводит, в свою очередь, к появлению на экране еще одной панели инструментов. С помощью этих девяти дополнительных панелей можно вставлять в документы Mathcad разнообразные объекты. На Рисунок 1.5, как легко увидеть, на панели Math в нажатом состоянии находится только одна кнопка (левая, на которую наведен указатель мыши). Поэтому на экране присутствует только одна математическая панель — Calculator (Калькулятор). Легко догадаться, какие объекты вставляются при нажатии кнопок на этой панели.
Примечание 2
Примечание 2
Подробнее о назначении этих и других наборных панелей инструментов рассказано ниже (см. разд. 1.3 и 1.4).
Большинство математических выражений можно ввести исключительно с помощью панели Calculator (Калькулятор), не пользуясь клавиатурой. Например, для расчета выражения sin (1/2) нужно сначала нажать кнопку sin (самую первую сверху), затем набрать выражение 1/2 в появившемся местозаполнителе внутри скобок. Для этого нажмите последовательно кнопки 1, / и 2 на панели Calculator (Калькулятор) и затем, на ней же, кнопку —, чтобы получить ответ.
Как видите, вставлять в документы математические символы можно по-разному, как и во многих других приложениях Windows. В зависимости от опыта работы с Mathcad и привычек работы на компьютере пользователь может выбрать любой из них.
СОВЕТ
Если вы только начинаете осваивать редактор Mathcad, настоятельно рекомендую, где это только возможно, вводить формулы, пользуясь наборными памелями инструментов и описанной процедурой вставки функций с помощью диалога Insert Function (Вставить функцию). Это позволит избежать многих возможных ошибок.
Положение линий ввода влияет на
Рисунок 1.20. Положение линий ввода влияет на положение создаваемой строки программы
Зачем может потребоваться вставка новой линии в положение, показанное на Рисунок 1.21? Новая вертикальная черта с двумя линиями выделяет фрагмент программы, который относится к условию х>0, находящемуся в его заголовке. Пример возможного дальнейшего программирования показан в листинге 1.20.
Построение графика функции (продолжение листинга 1 5)
Рисунок 1.7. Построение графика функции (продолжение листинга 1.5)
Примечание 2
Примечание 2
На том же графике на Рисунок 1.7 изображена и вторая кривая, представляющая собой двумерный график функции g(10,х,0). Для того чтобы нарисовать и этот график, потребовалось ввести имя функции g (10, х, 0) через запятую после f (х) возле оси у.
Примечание 3
Примечание 3
В Mathcad 12 запрещено определять функции пользователя посредством рекуррентных выражений, например f(x)=f(x)+l. При попытке вычисления f (х) вместо ее нового (рекуррентного) присваивания, как происходило в прошлых версиях, будет организован бесконечный цикл, который на определенном шаге приведет к операции переполнения. Для организации рекуррентных вычислений используйте новое имя функции, например, fl (f ,x)=f (x) +1 (что даст, в частности, fl (sin, 0)=0), либо именной оператор (см. след, примечание).
ПРИМЕЧАНИЕ 4
В Mathcad 12 введена новая возможность переопределения переменных, размерностей и функций, причем как пользовательских, так и системных. Осуществляется это при помощи именного оператора (namespace operator), примером действия которого может служить переопределение встроенной функции синус sin[mc] (x) :=sin(x*pi/180) либо пользовательской функции f[this] (x) = =f(x)+l. Идентификатор [mс] указывает на подмену системного имени Mathcad, a [this] — на рекуррентное переопределение соответствующей функции.
Построение нескольких зависимостей на одном графике
Рисунок 1.25. Построение нескольких зависимостей на одном графике
3. В результате появится местозаполнитель, в который нужно ввести выражение для второй кривой.
4. Щелкните в любом месте вне этого выражения (на графике или вне него).
После этого вторая кривая будет отображена на графике. На Рисунок 1.25 уже нарисованы два ряда данных, а нажатие клавиши с запятой <,> приведет к появлению третьего местозаполнителя, с помощью которого можно определить третий ряд данных.
Примечание 1
Примечание 1
Чтобы убрать один или несколько рядов данных с графика, удалите клавишами
Описанным способом будет создано несколько зависимостей, относящихся к одному аргументу. Чтобы на одном и том же графике отложить функции разного аргумента, следует ввести имена этих аргументов через запятую возле оси х (Рисунок 1.26).
Построение нескольких зависимостей от разного аргумента
Рисунок 1.26. Построение нескольких зависимостей от разного аргумента
Пример начала ввода операторов
Рисунок 1.12. Пример начала ввода операторов
Пример ввода формулы (коллаж)
Рисунок 1.11. Пример ввода формулы (коллаж)
Ресурсы Mathcad содержат большое
Рисунок 1.3. Ресурсы Mathcad содержат большое количество справочной и учебной информации
В заключение отметим, что как справочная система, так и Ресурсы Mathcad представляют собой не просто статьи и примеры с описанием его возможностей. Они могут быть названы полноправными учебными пособиями по нескольким курсам высшей математики (в случае Ресурсов, к тому же, еще и интерактивными). Там освещены и основные определения, и математический смысл многих операций, и алгоритмы численных методов. Причем, на взгляд автора, некоторые из тем объяснены лучше, чем где бы то ни было. Если вы в достаточной степени владеете английским, обязательно ознакомьтесь с Ресурсами Mathcad.
Результат вставки новой линии
Рисунок 1.21. Результат вставки новой линии в программу (из положения Рисунок 1.20)
Создание декартового графика при помощи панели Graph
Рисунок 1.22. Создание декартового графика при помощи панели Graph
Если имена данных введены правильно, нужный график появится на экране. Созданный график можно изменить, в том числе меняя сами данные, форматируя его внешний вид или добавляя дополнительные элементы оформления.
ВНИМАНИЕ!
Некорректное определение данных приводит, вместо построения графика, к выдаче сообщения об ошибке.
Чтобы удалить график, щелкните в его пределах мышью и выберите в верхнем меню Edit (Правка) пункт Cut (Вырезать) или Delete (Удалить).
Создание маркеров (слева) и готовые маркеры (справа)
Рисунок 1.33. Создание маркеров (слева) и готовые маркеры (справа)
Создание трехмерного графика
Рисунок 1.34. Создание трехмерного графика
Текст в рабочей области документа
Рисунок 1.17. Текст в рабочей области документа и комментарий к фрагменту формулы
Для того чтобы ввести текст непосредственно в рабочую область документа Mathcad, достаточно непосредственно перед началом ввода текста нажать клавишу <">. В результате, в месте расположения курсора ввода появится область с характерным выделением, обозначающая, что ее содержимое не будет восприниматься процессором Mathcad в качестве формул, а станет простым текстовым блоком (Рисунок 1.17, сверху). Редактировать атрибуты текста в пределах блоков можно стандартными для текстовых редакторов средствами панели Formatting (Форматирование).
Комментарии
Несколько нововведений, связанных с интерфейсом, помогут вам разрабатывать документы Mathcad с большим комфортом. Все они представляют собой дополнительные опции вставки в документы комментариев различного рода. Предусмотрено несколько типов комментариев, называемых примечаниями (annotation) и метаданными (metadata):
Вставка единиц измерения размерной величины
Рисунок 1.9. Вставка единиц измерения размерной величины
Примечание 2
Примечание 2
В Mathcad 12 контроль за правильностью совместного применения различных размерных переменных стал еще жестче, что позволяет избежать случайных ошибок. В частности, примененная техника статической проверки размерности запрещает расчет функций, которые, в зависимости от значения аргумента, могут выдавать результат различной размерности, например, f(x=0)=1*m2, a f (x=l)=l*m3, и т. п. Запрещено также возводить размерные переменные в степень, не являющуюся целым числом, например (l*s)2.31, а также выполнять некоторые другие операции.
Примечание 3
Примечание 3
Можно включить автоматический перевод единиц измерения в более простые единицы, как это показано в листинге 1.17 (ответ автоматически переводится в омы). Для этого перейдите в диалоговое окно Result Format (Формат результата) на вкладку, посвященную размерностям, с помощью команды Format / Result / Unit Display (Формат / Результат / Отображение размерности). Установите в ней флажок Simplify units when possible (Упрощать единицы, когда это возможно).
Единицу измерения в системе СИ любой размерной переменной можно вывести при помощи встроенной функции siunitsof:
ВНИМАНИЕ!
В прежних версиях Mathcad эта функция имела другое название— UnitsOf (листинг 1.18).
Вставка оператора в разные части формулы (коллаж)
Рисунок 1.15. Вставка оператора в разные части формулы (коллаж)
На Рисунок 1.15 показано несколько примеров вставки оператора сложения в разные части формулы, создание которой мы подробно разбирали выше (см. Рисунок 1.11). В левой колонке Рисунок 1.15 приведены возможные размещения линий ввода в формуле, а в правой — результат вставки оператора сложения (т. е. нажатия клавиши <+>). Как видно, Mathcad сам расставляет, если это необходимо, скобки, чтобы часть формулы, отмеченная линиями ввода, стала первым слагаемым.
Некоторые операторы Mathcad вставит в правильное место независимо от положения линий ввода. Таков, например, оператор численного вывода =, который по смыслу выдает значение всей формулы в виде числа (см. разд. 1.2.1).
Выделение части формулы
Чтобы выделить часть формулы в некоторой математической области (Рисунок 1.16):
1. Поместите ее между линиями ввода, пользуясь, при необходимости, клавишами-стрелками и пробелом.
2. Поместите указатель мыши на вертикальную линию ввода, нажмите и удерживайте левую кнопку мыши.
3. Удерживая кнопку мыши, протащите указатель мыши вдоль горизонтальной линии ввода, при этом часть формулы будет выделяться обращением цвета.
4. Отпустите кнопку мыши, когда будет выделена нужная часть формулы.
Вставка программного оператора
Рисунок 1.19. Вставка программного оператора
Добавление строк программного кода
Вставить строку программного кода в уже созданную программу можно в любой момент с помощью той же самой кнопки Add Line (Добавить линию). Для этого следует предварительно поместить на нужное место внутри программного модуля линии ввода. Например, расположение линии ввода на строке, показанной на Рисунок 1.18, приведет к появлению новой линии с местозаполнителем перед этой строкой. Если передвинуть вертикальную линию ввода из начала строки (как это показано на Рисунок 1.20) в ее конец, то новая линия появится после строки. Если выделить строку не целиком, а лишь некоторую ее часть (Рисунок 1.20), то это повлияет на положение в программе новой строки кода (результат нажатия кнопки Add Line показан на Рисунок 1.21).
СОВЕТ
Не забывайте, что для желаемого размещения линий ввода внутри формулы можно использовать не только мышь и клавиши со стрелками, но и пробел. С помощью последовательных нажатий пробела линии ввода "захватывают" разные части формулы.
Вставка встроенной функции (см листинги 1 1 и 1 2)
Рисунок 1.4. Вставка встроенной функции (см. листинги 1.1 и 1.2)
Чтобы ввести встроенную функцию в выражение:
1. Определите место в выражении, куда следует вставить функцию.
2. Нажмите кнопку с надписью f(x) на стандартной панели инструментов.
3. В списке Function Category (Категория функции) появившегося диалогового окна Insert Function (Вставить функцию) (Рисунок 1.4) выберите категорию, к которой принадлежит функция, — в нашем случае это категория Trigonometric (Тригонометрические).
4. В списке Function Name (Имя функции) выберите имя встроенной функции, под которым она фигурирует в Mathcad: в нашем примере — арккосинуса (acos). В случае затруднения с выбором ориентируйтесь на подсказку, появляющуюся при выборе функции в нижнем текстовом поле диалогового окна Insert Function.
5. Нажмите кнопку ОК — функция появится в документе.
6. Введите недостающие аргументы введенной функции (в нашем случае это число о) в местозаполнителе, обозначаемом черным прямоугольником) (нижнее выражение на Рисунок 1.5).
Результатом будет введение выражения из листинга 1.1, для получения значения которого осталось лишь ввести знак (численного или символьного) вывода (оба примера приведены на Рисунок 1.5).
Ввод и редактирование формул
1.3. Ввод и редактирование формулФормульный редактор Mathcad позволяет быстро и эффективно вводить и изменять математические выражения. Тем не менее некоторые аспекты его применения не совсем интуитивны, что связано с необходимостью избежания ошибок при расчетах по этим формулам. Поэтому не пожалейте немного времени на знакомство с особенностями формульного редактора, и впоследствии при реальной работе вы сэкономите гораздо больше.
Ввод мнимой единицы
Рисунок 1.8. Ввод мнимой единицы
Комплексное число можно ввести в виде обычной суммы действительной и мнимой частей или в виде любого выражения, содержащего мнимое число. Примеры ввода и вывода комплексных чисел иллюстрируются листингом 1.9. Для работы с комплексными числами имеется несколько простых функций и операторов, действие которых показано в листинге 1.10.
Примечание 4
Примечание 4
Можно выводить мнимую единицу в результатах вычислений не как i, а как j. Для смены представления выберите нужное в списке Imaginary Value (Мнимое значение) диалогового окна Result Format (Формат результата), доступного по команде Format/ Result/ Display Options (Формат/ Результат/ Опции отображения).
Выбор вида оператора присваивания (см листинг 1 3)
Рисунок 1.6. Выбор вида оператора присваивания (см. листинг 1.3)
Для того чтобы вычислить значение выражения, содержащего некоторую переменную, следует просто ввести его, а затем применить оператор численного вывода (листинг 1.3, последняя строка). При этом необходимо, чтобы этой переменной ранее в документе было присвоено какое-либо значение.
Примечание 3
Примечание 3
Помимо оператора обычного присваивания, в Mathcad имеется еще один оператор глобального присваивания (=). Если вставить его для задания значения переменной в любой части документа (например, в самом низу), то эта переменная автоматически будет определена в любой части документа.
В отличие от численных, для символьных вычислений задание значений всех переменных необязательно (листинг 1.4). Если некоторым переменным присвоены значения (как переменной а в листинге 1.4), то для получения результата используется это числовое значение. Если же переменной не было присвоено никакого значения, (как переменной k), она воспринимается аналитически, просто как некоторое имя.
Символьные вычисления, позволяющие решить многие задачи аналитически, являются одной из самых впечатляющих возможностей Mathcad. Фактически Mathcad "знает" математику, по крайней мере, на уровне неплохого ученого. Умелое использование интеллекта символьного процессора Mathcad избавит вас от огромного количества рутинных вычислений, например, интегралов и производных. Обратите внимание на традиционную форму написания выражений (листинг 1.4), единственная особенность заключается в необходимости применения знака символьных вычислений —> вместо знака равенства. Его, кстати, можно ввести в редакторе Mathcad с любой из панелей Evaluation (Выражения) или Symbolic (Символика), а символы интегрирования и дифференцирования — с панели Calculus (Вычисления).
Выделение части формулы
Рисунок 1.16. Выделение части формулы
Примечание 2
Примечание 2
Часть формулы можно выделить и без помощи мыши, нажимая клавиши со стрелками при удерживаемой клавише
Удаление части формулы
Чтобы удалить часть формулы:
1. Выделите ее.
2. Нажмите клавишу
3. Кроме того, можно удалить часть формулы, помещая ее перед вертикальной линией ввода и нажимая клавишу
Примечание 3
Примечание 3
Имеется еще один способ удаления части формулы: выделите ее нужную часть, затем нажмите комбинацию клавиш
Текстовые блоки
Документы Mathcad могут содержать текстовые объекты, а также разного рода комментарии и примечания.
XY график двух векторов
Рисунок 1.23. X-Y график двух векторов
В этом случае в местозаполнители возле осей вводятся просто имена векторов. Также допускается откладывать по осям элементы векторов, т. е. вводить в местозаполнители возле осей имена xi и yi соответственно. В результате получается график, на котором отложены точки, соответствующие парам элементов векторов, соединенные отрезками прямых линий. Образованная ими ломаная называется рядом данных, или кривой (trace).
Примечание 1
Примечание 1
Обратите внимание, что Mathcad автоматически определяет границы графика, исходя из диапазона значений элементов векторов.
Стоит отметить, что подобным образом легко создать и X-Y график столбцов или строк матрицы, применяя оператор выделения столбца и откладывая соответствующие выражения по осям графика (множество подобных примеров вы найдете на рисунках в последующих главах книги).
Знакомство с Mathcad
1.1. Знакомство с MathcadMathcad является математическим редактором, позволяющим проводить разнообразные научные и инженерные расчеты, начиная от элементарной арифметики и заканчивая сложными реализациями численных методов. С точки зрения классификации программного обеспечения, пакет Mathcad — типичный представитель класса PSE-приложений. Пользователи Mathcad — это студенты, ученые, инженеры, разнообразные технические специалисты и все, кому приходится проводить математические расчеты. Благодаря простоте применения, наглядности математических действий, обширной библиотеке встроенных функций и численных методов, возможности символьных вычислений, а также превосходному аппарату представления результатов (графики самых разных типов, мощных средств подготовки печатных документов и Web-страниц) Mathcad стал наиболее популярным математическим приложением.
Математические задачи в пакете MathCAD 12
Арифметические операторы
2.1.1. Арифметические операторыОператоры, обозначающие основные арифметические действия, вводятся с панели Calculator (Калькулятор), показанной на Рисунок 2.1:
Элементарные функции
2.2.1. Элементарные функцииПеречислим хорошо известные группы стандатртных функций (примеры некоторых из них приведены на Рисунок 2.6—2.8).
Примечание 1
Примечание 1
Sine-функция появилась в версии Mathcad 11.
О способах символьных вычислений
2.3.1.О способах символьных вычисленийСимвольные вычисления в Mathcad можно осуществлять в двух различных вариантах:
Первый способ более удобен, когда требуется быстро получить какой-либо аналитический результат для однократного использования, не сохраняя сам ход вычислений. Второй способ более нагляден, т. к. позволяет записывать выражения в традиционной математической форме и сохранять символьные вычисления в документах Mathcad. Кроме того, аналитические преобразования, проводимые через меню, касаются только одного, выделенного в данный момент, выражения.
Примечание 1
Примечание 1
В символьных вычислениях допускается использование большинства встроенных функций Mathcad, конечно, за исключением тех, которые реализуют численные методы.
Символьный процессор Mathcad умеет выполнять основные алгебраические преобразования, такие как упрощение выражений, разложение их на множители, символьное суммирование и перемножение.
Для символьных вычислений при помощи команд предназначено главное меню Symbolics (Символика), объединяющее математические операции, которые Mathcad умеет выполнять аналитически. Для реализации второго способа применяются все средства Mathcad, пригодные для численных вычислений (например, панели Calculator, Evaluation и т. д.), и специальная математическая панель инструментов, которую можно вызвать на экран нажатием кнопки Symbolic Keyword Toolbar (Панель символики) на панели Math (Математика). На панели Symbolic (Символика) находятся кнопки, соответствующие специфическим командам символьных преобразований (Рисунок 2.12). Например, таким как разложение выражения на множители, приведение подобных слагаемых и другим операциям, которые в Mathcad нельзя проводить численно, и для которых, соответственно, не предусмотрены встроенные функции.
Примечание 2
Примечание 2
Необходимо отметить, что приемы более сложных символьных вычислений описываются также в остальных главах данной книги, в рамках рассказа о решении конкретных вычислительных задач.
Получение численного значения выражения
2.3.10. Получение численного значения выраженияС помощью символьного процессора можно рассчитать численное значение выражения (действительное или комплексное). Иногда такой путь представляется более удобным, чем применение численного процессора (т. е. знака обычного равенства). Чтобы рассчитать значение некоторого выражения (Рисунок 2.23), выберите команду Symbolics / Evaluate / Symbolically (Символика / Вычислить / Символьно) либо пункт Symbolics / Evaluate / Floating Point (Символика / Вычислить / С плавающей точкой). В последнем случае вам будет предложено с помощью диалога Floating Point Evaluation (Вычисления с плавающей точкой) задать точность вывода. В итоге применения данных команд Mathcad заменяет символьные результаты, где это возможно, значениями в виде чисел с плавающей точкой.
Вычисление предела
2.3.11. Вычисление пределаНаиболее ярким проявлением возможностей символьного процессора в Mathcad являются аналитические вычисления пределов, производных, интегралов и разложений в ряд, а также решение алгебраических уравнений. Все эти операции, при выполнении их посредством меню Symbolics (Символика), находятся в его подменю Variable (Переменная). Соответственно, требуется предварительное выделение в выражении переменной, относительно которой будет совершаться операция. Для выделения переменной достаточно поместить ее между линиями ввода, но для большей наглядности лучше выделить ее черным цветом путем протаскивания указателя мыши через нужную часть выражения.
Примечание 1
Примечание 1
В отличие от других вычислительных операторов, пределы могут быть вычислены только символьно.
О специфике аналитических вычислений
2.3.12.О специфике аналитических вычисленийВыше в этой главе были разобраны основные приемы символьных вычислений в Mathcad. Они, как правило, были показаны на простых примерах, которые иллюстрировали ту или иную символьную операцию. Тем не менее при проведении разнообразных (и численных тоже) расчетов в Mathcad возможности символьного процессора можно использовать более эффективно. Отметим некоторые из них.
При проведении символьных вычислений с оператором символьного вывода функции пользователя и переменные, определенные ранее в документе Mathcad, воспринимаются символьным процессором корректно. Таким образом, имеется мощный аппарат включения символьных расчетов в программы пользователя. Примеры применения функции пользователя. приведены в листингах 2.26 и 2.27. Сравните последние строчки этих листингов. Несмотря на их идентичность слева от знака символьного вывода, результат получен различный. Это связано с тем, что в листинге 2.27 предварительно переменной х присвоено значение 4. Поскольку значения переменных влияют на символьные вычисления, то результат учитывает подстановку вместо х числа 4.
Разложение выражений
2.3.2. Разложение выраженийРассмотрим оба типа символьных вычислений на простом примере разложения на сомножители выражения cos (4х). В ходе операции символьного разложения, или расширения, раскрываются все суммы и произведения, а сложные тригонометрические зависимости разлагаются с помощью тригонометрических тождеств. Разложение выражений производится путем выбора команды Symbolics / Expand (Символика / Разложить) либо использованием вместе с оператором символьного вывода ключевого слова expand.
Первый способ (разложение с помощью меню)
1. Введите выражение cos (4х).
2. Выделите его целиком (см. Рисунок 2.13).
3. Выберите в главном меню пункты Symbolics / Expand (Символика / Разложить).
После этого результат разложения выражения появится чуть ниже в виде еще одной строки (Рисунок 2.13).
Вспомогательные функции
2.2.2. Вспомогательные функцииКроме перечисленных, Mathcad включает целый ряд вспомогательных функций, во множестве ситуаций облегчающих вычисления.
Вычислительные операторы
2.1.2. Вычислительные операторыВычислительные операторы вставляются в документы при помощи панели инструментов Calculus (Вычисления) (Рисунок 2.2). При нажатии любой из кнопок в документе появляется символ соответствующего математического действия, снабженный несколькими местозаполнителями. Количество и расположение местозаполнителей определяется типом оператора и в точности соответствует их общепринятой математической записи. Например, при вставке оператора суммы (Рисунок 2.2) необходимо задать четыре величины: переменную, по которой надо произвести суммирование, нижний и верхний пределы, а также само выражение, которое будет стоять под знаком суммы. Для того чтобы вычислить неопределенный интеграл, следует заполнить два местозаполнителя: подынтегрального выражения и переменной интегрирования и т. д.
После ввода какого-либо вычислительного оператора имеется возможность вычислить его значение либо численно, нажатием клавиши <=>, либо аналитически, с помощью оператора символьного вывода.
Примечание 1
Примечание 1
Дифференцированию и интегрированию, как более сложным операциям, посвящены отдельные главы этой книги (см. гл. 3 и 4 соответственно). Суммирование и вычисление предела рассматривается ниже в этой главе (см. соответственно разд. 2.3.8 и 2.3.11).
Функция вывода текущего времени
2.2.3. Функция вывода текущего времениВ версии Mathcad 12 появилась новая встроенная функция, которая иногда может быть очень полезной для хронометрирования процесса вычислений.
Типичное использование функции требует ее двукратного вычисления: до и после расчетного фрагмента, который вы собираетесь хронометрировать (листинг 2.10). Одиночное вычисление time(x) выдает абсолютное значение системной переменной времени (первая строка листинга 2.10). Помните о том, что для получения значимой информации о времени расчетов необходимо пересчитать заново содержимое всего документа командой Tools / Calculate Worksheet (Сервис / Вычислить все).
Логические операторы
2.1.3. Логические операторыРезультатом действия логических, или булевых, операторов являются только числа 1 (если логическое выражение, записанное с их помощью, истинно) или 0 (если логическое выражение ложно). Чтобы вычислить значение логического выражения, например 1=1 (Рисунок 2.3):
1. Вставьте с панели Boolean (Булевы операторы) соответствующий оператор =.
2. В появившиеся местозаполнители вставьте операнды (две единицы).
3. Нажмите клавишу <=>, чтобы получить ответ.
Упрощение выражений
2.3.3. Упрощение выраженийУпрощение выражений — очень часто применяемая операция, противоположная по смыслу операции разложения, рассмотренной в предыдущем разделе. Символьный процессор Mathcad стремится так преобразовать выражение, чтобы оно приобрело более простую форму. При этом используются различные арифметические формулы, приведение подобных слагаемых, тригонометрические тождества, пересчет обратных функций и др. Чтобы упростить выражение с помощью меню (Рисунок 2.17):
1. Введите выражение.
2. Выделите выражение целиком или его часть, которую нужно упростить.
3. Выберите команду Symbolics / Simplify (Символика / Упростить).
Матричные операторы
2.1.4. Матричные операторыМатричные операторы предназначены для совершения различных действий над векторами и матрицами. Поскольку большинство из них реализует численные алгоритмы, о них будет подробно рассказано в разделах, посвященных линейной алгебре (см. главу 7). Остановимся в данном разделе лишь на вопросе вставки матриц в документы Mathcad.
Самый простой и наглядный способ создания вектора или матрицы заключается в следующем:
1. Нажмите кнопку Matrix or Vector (Матрица или вектор) на панели Matrix (Матрица), либо клавиши
2. В диалоговом окне Insert Matrix (Вставка матрицы) (Рисунок 2.4) задайте целое число столбцов и строк матрицы, которую хотите создать. Например, для создания вектора 3xi введите показанные на Рисунок 2.4 значения.
3. Нажмите кнопку ОК или Insert (Вставить) — в результате в документ будет вставлена заготовка матрицы с определенным числом строк и столбцов (Рисунок 2.5).
4. Введите значения в местозаполнители элементов матрицы. Переходить от одного элемента матрицы к другому можно с помощью указателя мыши либо клавиш со стрелками.
Разложение на множители
2.3.4. Разложение на множителиРазложение выражений на простые множители производится при помощи команды Symbolics/ Factor (Символика/ Разложить на множители) (Рисунок 2.18) либо использованием вместе с оператором символьного вывода ключевого слова factor (листинг 2.15). Эта операция позволяет разложить полиномы на произведение более простых полиномов, а целые числа — на простые сомножители. Применяя команду меню, не забывайте перед ее вызовом выделить все выражение или его часть, которую планируете разложить на множители.
Спецфункции
2.2.4. СпецфункцииВ Mathcad встроено множество самых различных математических функций, которое пополняется от версии к версии. Большинство из них рассчитываются без привлечения специальных численных методов, но, тем не менее, играют важную роль, главным образом, в математической физике. Например, функции Бесселя по определению являются решениями различных краевых задач для некоторых обыкновенных дифференциальных уравнений (ОДУ). Конкретный вид соответствующих дифференциальных уравнений можно без труда отыскать в справочниках по спецфункциям или в справочной системе Mathcad.
Спецфункции в Mathcad разбиты на несколько групп:
Примечание 1
Примечание 1
В Mathcad 12 появилась новая нормированная форма спецфункций Эйри (Рисунок 2.11), относящихся к классу бесселевых, запись которых сопровождается нижним индексом sc (например, AiSc), улучшающая точность их вычисления при больших значениях аргумента. Другие нормированные функции Бесселя были добавлены в предыдущих версиях, в частности, Mathcad 11.
Операторы выражения
2.1.5. Операторы выраженияВычислительные операторы сгруппированы на панели Evaluation (Вычисления) (см. разд. 1.2.1). Перечислим их еще раз (без дополнительных комментариев):
Приведение подобных слагаемых
2.3.5. Приведение подобных слагаемыхЧтобы привести подобные слагаемые полинома с помощью меню (Рисунок 2.19):
1. Введите выражение.
2. Выделите в выражении имя переменной, относительно которой надо привести подобные слагаемые (в примере на Рисунок 2.19 это переменная у).
3. Выберите команду Symbolics / Collect (Символика / Привести подобные).
В результате появится строка с результатом приведения подобных слагаемых (нижняя строка на Рисунок 2.19).
Чтобы привести подобные слагаемые с помощью оператора символьного вывода (листинг 2.16):
1. Введите выражение.
2. Нажмите кнопку Collect на панели Symbolic (Символика).
3. Введите в местозаполнитель после вставленного ключевого слова collect имя переменной, относительно которой требуется привести подобные слагаемые (в первой строке примера из листинга 2.16 это переменная х, во второй — у).
4. Введите оператор символьного вывода —>.
5. Нажмите клавишу
Примечание 1
Примечание 1
После ключевого слова collect допускается задание нескольких переменных через запятую. В этом случае, что иллюстрируется последней строкой листинга 2.6, приведение подобных слагаемых выполняется последовательно по всем переменным.
Вычисление коэффициентов полинома
2.3.6. Вычисление коэффициентов полиномаЕсли выражение является полиномом относительно некоторой переменной х, заданным не в обычном виде a0+a1x+a2x2+..., а как произведение других, более простых полиномов, то коэффициенты a0,a1,a2... легко определяются символьным процессором Mathcad. Коэффициенты сами могут быть функциями (подчас довольно сложными) других переменных.
Чтобы вычислить полиномиальные коэффициенты в выражении при помощи меню (Рисунок 2.20):
1. Введите выражение.
2. Выделите в нем имя переменной или выражение, для которого требуется рассчитать полиномиальные коэффициенты (в примере на Рисунок 2.20 это переменная z).
3. Выполните команду Symbolic / Polynomial Coefficients (Символика / Коэффициенты полинома).
В результате под выражением появится вектор, состоящий из полиномиальных коэффициентов. Первым элементом вектора является свободный член а0, вторым — ai и т. д.
Разложение на простые дроби
2.3.7. Разложение на простые дробиЧтобы разложить сложную дробь на более простые дроби, следует либо выполнить команду Symbolics / Variable / Convert to Partial Fractions (Символика / Переменная / Разложить на элементарные дроби) (Рисунок 2.21), либо указать ключевое слово parfrас (листинг 2.19). Применяя первый способ (меню), не забывайте перед выбором его команды выделить переменную, по которой будет производиться разложение, а если используется второй способ (с оператором символьного вывода), то имя переменной следует указать после ключевого слова parfrac. В общем, последовательность действий при разложении на дроби та же самая, что и обычно (см., например, разд. 2.3.4).
Вычисление рядов и произведений
2.3.8. Вычисление рядов и произведенийЧтобы вычислить аналитически конечную или бесконечную сумму или произведение:
1. Введите выражение, используя панель Calculus (Вычисления) для вставки соответствующих символов суммирования или произведения. При необходимости введите в качестве предела ряда символ бесконечности (клавиши
2. В зависимости от желаемого стиля символьных вычислений выберите команду Symbolics / Simplify (Символика / Упростить) или введите оператор символьного вывода —>.
Примеры численного и символьного вычисления рядов и произведений приведены в листингах 2.20 и 2.21.
Подстановка переменной
2.3.9. Подстановка переменнойОчень удобная возможность символьных вычислений — это операция подстановки значения переменной в выражение. При помощи меню подстановка производится следующим образом (Рисунок 2.22):
1. Выделите значение переменной, которое необходимо подставить в некоторое выражение. Значение переменной может быть любым выражением относительно любых переменных (на Рисунок 2.22 в качестве подстановки взята самая первая строка документа).
2. Скопируйте значение переменной в буфер обмена, например, нажатием клавиш
3. Выделите в выражении, в которое требуется подставить значение из буфера обмена, переменную, которая будет заменяться (во второй строке на Рисунок 2.22 выделена переменная х).
4. Выполните команду Symbolics / Variable / Substitute (Символика / Переменная / Подставить).
Результат этих действий иллюстрируется нижней строкой в документе на Рисунок 2.22.
Алгебраические преобразования
2.3. Алгебраические преобразованияВ этом разделе речь пойдет об алгебраических вычислениях, которые выполняются в Mathcad, главным образом, аналитически. Как ни странно, многие пользователи Mathcad не очень хорошо осведомлены об этих возможностях, тогда как они во многих ситуациях могут существенно сэкономить их время и силы по выполнению несложных, но рутинных преобразований.
Алгебраические вычисления
Алгебраические вычисленияВ данной главе рассматриваются простые вычисления, осуществляемые в Mathcad. Во-первых, приведено описание имеющихся встроенных операторов (см. разд. 27) и функций (см. разд. 2.2), при помощи которых можно рассчитать значение алгебраических выражений, построить графики и т. п. Во-вторых, составлен обзор наиболее простых символьных операций, реализующих в Mathcad аналитические преобразования для решения типичных задач алгебры. Они проводятся без применения численных методов и, соответственно, без погрешностей вычислений (см. разд. 2.3).
Функции Бесселя первого рода
Рисунок 2.10. Функции Бесселя первого рода

Рисунок 2.11. Функции Эйри (Aisc появилась в Mathcad 12)
Функции Хевисайда и устаревшая функция Кронекера
Рисунок 2.9. Функции Хевисайда и устаревшая функция Кронекера
ВНИМАНИЕ!
Начиная с Mathcad 12 функция (символ) Кронекера 5 (Рисунок 2.9) изъята из списка встроенных функций.
Функции
2.2. ФункцииMathcad содержит огромное количество встроенных функций. Некоторые из них просто рассчитывают определенное значение, а некоторые реализуют сложные численные алгоритмы. Учитывая, что большинство стандартных алгебраических функций Mathcad имеют общепринятую математическую форму, мы не станем приводить в данной главе все имеющиеся встроенные функции, а лишь перечислим их основные типы и приведем несколько характерных примеров, ограничившись минимальными комментариями. Полный перечень встроенных функций вы найдете в конце книги (см. приложение 3).
Примечание 1
Примечание 1
Напомним также (см. гл. 1), что вставлять в документ не очень знакомую функцию легче всего, пользуясь диалоговым окном Insert Function (Вставить функцию), которое вызывается нажатием кнопки с надписью f(x) на стандартной панели инструментов. В этом диалоге функции разбиты на несколько групп, поэтому несложно выбрать из них нужную. При выделении какой-либо группы в левом списке упомянутого диалога справа обнаруживается список функций, принадлежащих этой группе. Названия групп функций, появляющихся в левом списке диалогового окна Insert Function, приведены в скобках после названия каждого раздела этой главы.
Булевы операторы
Листинг 2.1. Булевы операторы="5.gif" >
Операторы сравнения
Листинг 2.1. Операторы сравнения
Хронометрирование вычислений
Листинг 2.10. Хронометрирование вычислений
Символьные преобразования
Листинг 2.11. Символьные преобразования
Примечание 2
Примечание 2
Далее в этой главе, рассматривая символьные вычисления с помощью меню, будем иллюстрировать результаты рисунками, а символьные вычисления с применением оператора ->
приводить в виде листингов.
Упрощение выражения
Листинг 2.12. Упрощение выражения
Упрощение выражения
Листинг 2.13. Упрощение выражения с подстановкой значения переменных
Упрощение выражений, содержащих числа, производится по-разному, в зависимости от наличия в числах десятичной точки. Если она есть, то выполняется непосредственное вычисление выражения (листинг 2.14).
Упрощение выражения с числами
Листинг 2.14. Упрощение выражения с числами
Примеры разложения на множители
Листинг 2.15. Примеры разложения на множители
Приведение подобных
Листинг 2.16. Приведение подобных слагаемых по разным переменным
показывает расчет
Листинг 2.17 показывает расчет коэффициентов для разных аргументов. Второй листинг демонстрирует возможность определения коэффициентов не только для отдельных переменных, но для более сложных выражений, входящих в рассматриваемую формулу в качестве составной части.Вычисление коэффициентов полинома
Листинг 2.17. Вычисление коэффициентов полинома
Вычисление полиномальных
Листинг 2.18. Вычисление полиномальных коэффициентов для простой переменной и выражения
Разложение на элементарные дроби
Листинг 2.19. Разложение на элементарные дроби
Символьные и численные расчеты рядов
Листинг 2.20. Символьные и численные расчеты рядов
Символьный расчет произведения
Листинг 2.21. Символьный расчет произведения
Подстановка значения переменной
Листинг 2.22. Подстановка значения переменной
Вычисление выражения с плавающей точкой
Листинг 2.23. Вычисление выражения с плавающей точкой
Комплексные преобразования выражений
Листинг 2.24. Комплексные преобразования выражений
Операторы символьного вычисления пределов
Листинг 2.25. Операторы символьного вычисления пределов
Функция пользователя в символьных вычислениях
Листинг 2.26. Функция пользователя в символьных вычислениях
Значения переменных
Листинг 2.27. Значения переменных влияют на результат символьных вычислений
Напротив, при осуществлении символьных операций через меню Symbolics (Символика) символьный процессор "не видит" ничего, кроме выражения, в пределах которого находятся линии ввода. Поэтому ни функции пользователя, ни предварительно определенные значения каких-либо переменных никак не влияют на вычисления.
СОВЕТ
Используйте меню Symbolics (Символика), если требуется "сиюминутно" провести некоторые аналитические действия с выражением и получить ответ в общем виде, не учитывающем текущие значения переменных, входящих в выражение.
Некоторые функции работы с комплексными числами
Листинг 2.3. Некоторые функции работы с комплексными числами
Примеры тригонометрических функций
Листинг 2.4. Примеры тригонометрических функций
Примеры расчета угла между прямой и осью OX
Листинг 2.5. Примеры расчета угла между прямой и осью OX
Пример гиперболических функций
Листинг 2.6. Пример гиперболических функций
Функции сокращения и округления
Листинг 2.7. Функции сокращения и округления
Примечание 1
Примечание 1
В прежних версиях Mathcad (вплоть до 11-й включительно) функции округления и сокращения могли выдавать результат, отличный от аналитического (что было связано с принципом представления чисел). В Mathcad 12 эти функции работают более правильно, выводя точный результат округления, совпадающий с символьным.
Функции преобразования координат на плоскости
Листинг 2.8. Функции преобразования координат на плоскости
Функции знака и условия
Листинг 2.9. Функции знака и условия
Примечание 2
Примечание 2
Разработчики Mathcad 12 восстановили встроенную функцию until, которая вплоть до 2000-й версии служила для включения в документы циклов без помощи программирования. Функция until (x, у) служит для "непрограммной" имитации цикла: если х<0, происходит вычисление очередного у, затем опять вычисляется новое х (так или иначе зависящего от у), снова проверяется условие х<0 и т. д. Финальное значение у, при котором х становится неотрицательным, выдается в качестве результата функции.
Логарифмические функции
Рисунок 2.6. Логарифмические функции
Операторы
2.1. ОператорыКаждый оператор в Mathcad обозначает некоторое математическое действие в виде символа. В полном согласии с терминологией, принятой в математике, ряд действий (например, сложение, деление, транспонирование матрицы и т. п.) реализован в Mathcad в виде встроенных операторов, а другие действия (например, sin, erf и т. п.) — в виде встроенных функций. Каждый оператор действует на одно или два числа (переменную или функцию), которые называют операндами. Если в момент вставки оператора одного или обоих операндов не хватает, то недостающие операнды будут отображены в виде местозаполнителей. Символ любого оператора в нужное место документа вводится одним из двух основных способов:
Напомним, что большинство математических панелей содержат сгруппированные по смыслу математические операторы, а вызвать эти панели на экран можно нажатием соответствующей кнопки на панели Math (Математика).
Примечание 1
Примечание 1
Везде в этом разделе будем рассматривать только второй способ вставки оператора. Те же, кто предпочитает использовать клавиатуру, найдут перечень горячих клавиш в приложении 2.
Выше мы рассмотрели особенности применения трех операторов: присваивания (см. разд. 1.2.3), численного и символьного вывода (см. разд. 1.2.3). Разберем в данном разделе более подробно действие этих и других операторов Mathcad.
Основные гиперболические функции
Рисунок 2.7. Основные гиперболические функции
Панель Calculator
Рисунок 2.1. Панель Calculator
Панель Symbolic
Рисунок 2.12. Панель Symbolic
Подстановка значения переменной
Рисунок 2.22. Подстановка значения переменной
Для осуществления той же операции в совокупности с оператором символьного вывода используйте ключевое слово substitute, которое вставляется в документ одноименной кнопкой на панели Symbolic (Символика). После ключевого слова substitute необходимо ввести в местозаполнители логическое выражение, показывающее, какую именно переменную какой формулой следует заменить (листинг 2.22).
Приведение подобных слагаемых
Рисунок 2.19. Приведение подобных слагаемых
Разложение сложной дроби на элементарные дроби
Рисунок 2.21. Разложение сложной дроби на элементарные дроби
Разложение выражения на множители
Рисунок 2.18. Разложение выражения на множители
Разложение выражения на множители
Рисунок 2.13. Разложение выражения на множители при помощи команды меню Symbolics / Expand
Результат первоначального ввода ключевого слова
Рисунок 2.16. Результат первоначального ввода ключевого слова
Оператор символьного вывода, как вы помните, можно ввести в редакторе Mathcad несколькими способами: нажатием кнопки —> на любой из панелей Evaluation (Выражения) или Symbolic (Символика) либо сочетанием клавиш
СОВЕТ
Если вы можете выбрать способ символьных вычислений, рекомендую второй путь — с помощью оператора -", поскольку при этом в документе сохраняются действия пользователя. Наличие специального меню символьных вычислений — своего рода дань очень давним версиям Mathcad. В них аналитические преобразования были встроены не так гармонично и были доступны, главным образом, через меню.
Не всякое выражение поддается аналитическим преобразованиям. Если это так (либо в силу того, что задача вовсе не имеет аналитического решения, либо она оказывается слишком сложной для символьного процессора Mathcad), то в качестве результата выводится само выражение (листинг 2.11, внизу).
Результат создания матрицы
Рисунок 2.5. Результат создания матрицы
Добавление в уже созданную матрицу строк или столбцов производится точно так же:
1. Выделите линиями ввода элемент матрицы, правее и ниже которого будет осуществлена вставка столбцов и (или) строк.
2. Вставьте в него матрицу, как было описано выше. При этом допускается задание числа столбцов или строк равным нулю.
3. Заполните местозаполнители недостающих элементов матрицы.
Примечание 1
Примечание 1
Определить новую матрицу можно и по-другому, например (впервые в документе), присвоив определенное значение ее некоторому элементу, например, А3,3:=1, либо импортировав в матрицу данные из внешнего файла (см. раза. 73.3).
Символьное разложение части выражения и его результат
Рисунок 2.14. Символьное разложение части выражения и его результат
ВНИМАНИЕ!
Символьные операции с помощью меню возможны лишь над каким-либо объектом (выражением, его частью или отдельной переменной). Для того чтобы правильно осуществить желаемое аналитическое преобразование, предварительно необходимо выделить тот объект, к которому оно будет относиться. В данном случае преобразование было применено ко всему выражению cos (4-х). Если же выделить часть формулы, как показано на Рисунок 2.14, то соответствующее преобразование будет отнесено только к выделенной части (нижняя строка на этом рисунке).
Второй способ (разложение с помощью оператора ->).
1. Введите выражение, например cos (4х).
2. Нажмите кнопку Expand (Разложить) на панели Symbolic (Символика).
Символьное разложение выражения
Рисунок 2.15. Символьное разложение выражения
3. Введите в местозаполнитель после появившегося ключевого слова expand (Рисунок 2.15, сверху) имя переменной х либо нажмите клавишу
4. Введите оператор символьного вывода —>.
5. Нажмите клавишу
Примечание 1
Примечание 1
Можно действовать и в другом порядке: сначала ввести ключевое слово, а уже затем впечатать появившиеся местозаполнители выражение и переменную (Рисунок 2.16).
Sineфункция
Рисунок 2.8. Sine-функция
Создание матрицы
Рисунок 2.4. Создание матрицы
Упрощение выражения
Рисунок 2.17. Упрощение выражения
Для упрощения выражения при помощи оператора символьного вывода используйте ключевое слово simplify (листинг 2.12). Не забывайте, если некоторым переменным, входящим в выражение, ранее были присвоены некоторые значения, то они будут подставлены в него при выполнении символьного вывода (листинг 2.13).
Вставка логического оператора
Рисунок 2.3. Вставка логического оператора
Получается абсурдное на первый взгляд выражение 1=1. Однако на самом деле все правильно. Слева от оператора вывода записано логическое выражение 1=1 (обратите внимание, что логический знак равенства выглядит по-другому, нежели обычный), которое является истинным. Поэтому значение данного выражения равно 1, что и показано справа от знака равенства.
Перечислим логические операторы:
Примечание 1
Примечание 1
Операнды в логических выражениях могут быть любыми числами. Однако если оператор по смыслу применим только к о и 1, то любое неравное нулю число по умолчанию принимается равным 1. Но в результате все равно может получиться либо 0, либо 1. Например, -,(-0.33)=0.
Примеры действия логических операторов приведены в листингах 2.1 и 2.2. ПРИМЕЧАНИЕ
Логические операторы чрезвычайно важны при записи в редакторе Mathcad подлежащих решению алгебраических уравнений и неравенств (см. гл. 5).
Вставка оператора суммирования
Рисунок 2.2. Вставка оператора суммирования
Вычисление коэффициентов полинома
Рисунок 2.20. Вычисление коэффициентов полинома
Примечание 1
Примечание 1
Конкретная задача, требующая вычисления полиномиальных коэффициентов, приведена в разделе, посвященном численному отделению корней полинома (см. разд. 5.2,3).
Чтобы вычислить полиномиальные коэффициенты с помощью оператора символьного вывода:
1. Введите выражение.
2. Нажмите кнопку Coeffs на панели Symbolic (Символика).
3. Введите в местозаполнитель после вставленного ключевого слова coeffs аргумент полинома.
4. Введите оператор символьного вывода —>.
5. Нажмите клавишу
Примеры вычисления коэффициентов полинома приведены в листингах 2.17 и 2.18.
Вычисление выражения с плавающей точкой
Рисунок 2.23. Вычисление выражения с плавающей точкой
Еще один пункт меню Symbolics / Evaluate / Complex (Символика / Вычислить / Комплексно) позволяет представить выражение в виде a+bi.
Аналогичные по действию ключевые слова float и complex можно использовать в документах, вводя их с панели Symbolic (Символика). Ключевое слово float применяется вместе со значением точности вывода результата с плавающей точкой (листинг 2.23). С помощью слова complex можно преобразовывать выражения как в символьном виде, так и с учетом численных значений, если они были ранее присвоены переменным (несколько примеров приведено в листинге 2.24).
Математические задачи в пакете MathCAD 12
Аналитическое дифференцирование функции
3.1.1. Аналитическое дифференцирование функцииДля того чтобы аналитически найти производную функции f (х) в Mathcad:
1. Задайте функцию f (х).
2. Введите оператор дифференцирования нажатием кнопки Derivative (Производная) на панели Calculus (Вычисления) или введите с клавиатуры вопросительный знак >.
3. В появившихся местозаполнителях оператора дифференцирования (Рисунок 3.1) введите функцию, зависящую от аргумента х, т. е. f(х), и имя самого аргумента х.
4. Введите оператор <->> символьного вычисления для получения ответа (листинг 3.1).
Частные производные
3.4.1. Частные производныеПримеры отыскания частных производных функции двух переменных приведены в листингах 3.11 и 3.12. В первой строке обоих листингов определяется сама функция, а в последующих (символьным или численным образом) рассчитываются ее производные по обеим переменным — х и k. Чтобы определить частную производную в точке, необходимо предварительно задать значения всех аргументов, что и сделано в следующих строках листинга 3.12. Обратите внимание, что для символьного поиска производной функции нет необходимости задавать значения всех ее аргументов (третья строка листинга 3.12), а вот для численного дифференцирования (последняя строка листинга) должны быть предварительно определены все аргументы функции, иначе вместо результата появится сообщение об ошибке.
Дифференцирование в точке
3.2.1. Дифференцирование в точкеДля того чтобы численно продифференцировать функцию f (х) в некоторой точке, следует использовать оператор численного вывода (вместо символьного):
1. Определите точку х, в которой будет вычислена производная, например, х:=1.
2. Введите оператор дифференцирования и обычным образом введите имена функции и аргумента в местозаполнители (см. Рисунок 3.1).
3. Введите оператор = численного вывода результата.
Пример дифференцирования функции f (x)=sin(x) ln(x) приведен в листинге 3.5.
Разложение в ряд при помощи меню
3.5.1. Разложение в ряд при помощи менюЧтобы разложить некоторое выражение в ряд:
1. Введите выражение.
2. Выделите значение переменной, по которой требуется получить разложение в ряд.
3. Выполните команду Symbolics / Variable / Expand to Series (Символика / Переменная / Разложить в ряд) (Рисунок 3.12).
Об алгоритме дифференцирования
3.2.2. Об алгоритме дифференцированияДля численного дифференцирования Mathcad применяет довольно сложный алгоритм, вычисляющий производную с колоссальной точностью до 7— 8-го знака после запятой. Погрешность дифференцирования не зависит от констант TOL или CTOL, в противоположность большинству остальных численных методов, а определяется непосредственно алгоритмом. Этот алгоритм (метод Риддера) описан во встроенной справочной системе Mathcad, доступной через меню Help (Справка). Мы не будем здесь его описывать, однако остановимся на важных аспектах численного определения производной функции f (х) на более простом примере. Несмотря на то, что простейшая разностная формула сильно отличается от метода Риддера, он все-таки поможет нам разобраться в некоторых вопросах, т. к. основан на базовом принципе численного дифференцирования, а именно на вычислении производной через значения функции f (х) в нескольких точках, расположенных на близком расстоянии друг от друга.
Исходя из определения производной функции, можно констатировать, что
Основная проблема численного определения производной (как в этой простейшей формуле, так и в более сложных алгоритмах, в том числе Риддера) связана как раз с процедурой выбора значения Д, которая является далеко не очевидной. На первый взгляд может показаться, что следует выбирать очень малые Д, чтобы соблюсти желаемую точность, однако это не совсем так. Чтобы лучше разобраться в сути проблемы, используем Mathcad-программу, приведенную в листинге 3.6, которая рассчитывает (в зависимости от шага Д) погрешность разностной формулы (3.1). График полученной зависимости изображен на Рисунок 3.5, причем для его обеих осей выбран логарифмический масштаб, а сама производная (ради примера), согласно листингу 3.6, считается в одной точке х=1.
Оператор разложения в ряд
3.5.2. Оператор разложения в рядДля разложения в ряд альтернативным способом, с помощью оператора символьного вывода, используйте ключевое слово series, вставляя его одноименной кнопкой панели Symbolic (Символика). После ключевого слова series, через запятую, указывается имя переменной, по которой производится разложение, и порядок аппроксимации (листинги 3.21 и 3.22). Сравнить поведение исходной функции и нескольких ее разложений в ряд Тейлора (с разными порядками аппроксимации) можно по графику, приведенному на Рисунок 3.13.
Примеры градиент дивергенция и ротор
3.4.2. Примеры: градиент, дивергенция и роторЗавершим разговор о частных производных несколькими примерами векторного анализа, которые нередко встречаются в вычислительной практике. Программная реализация первого из них, посвященная вычислению градиента функции двух переменных, приведена в листинге 3.14. В качестве примера взята функция f(x,y), определяемая в первой строке листинга, график которой показан на Рисунок 3.9, в виде линий уровня. Как известно, градиент функции f(x,y) является векторной функцией тех же аргументов, что и f (х,у), определенной через ее частные производные, согласно второй строке листинга 3.14. В его третьей строке производится аналитическое вычисление градиента, а в оставшейся части листинга задаются ранжированные переменные и матрицы, необходимые для подготовки графика линий уровня самой функции и графика векторного поля ее градиента (Рисунок 3.10).
Вычисление производной функции в точке
3.1.2. Вычисление производной функции в точкеДля того чтобы рассчитать производную в точке, необходимо предварительно задать значение аргумента в этой точке (листинг 3.2, вторая строка). Результатом дифференцирования в этом случае будет число — значение производной в этой точке. Если результат удается отыскать аналитически, то он приводится в виде числового выражения, а для того, чтобы получить его в форме числа, достаточно ввести после выданного выражения символ числового равенства <=> (последняя строка листинга 3.2).
Определение функций пользователя
3.1.3. Определение функций пользователя через оператор дифференцированияРазумеется, оператор дифференцирования, как и любой другой, можно применять для определения собственных функций пользователя. В листинге 3.4 через производную от f (х) определяется еще одна пользовательская функция f(х), и затем, при помощи оператора символьного вывода, находится ее явный вид (предпоследняя строка листинга) и конкретное значение в точке х=1 (последняя строка).
Пример якобиан
3.4.3. Пример: якобианЕще одна задача, связанная с нахождением частных производных векторной функции, заключается в вычислении якобиана (или определителя матрицы Якоби) — матрицы, составленной из частных производных векторной функции по всем ее аргументам. Эта задача встречается в различных областях математики, например, применительно к жестким дифференциальным уравнениям (см. разд. 9.4). Приемы вычисления якобиана векторной функции f (х) векторного аргумента х демонстрируются в листинге 3.19. В нем для определения частных производных якобиана каждый i-й скалярный компонент f (x)i дифференцируется символьным процессором Mathcad.
Дифференцирование при помощи меню
3.1.4. Дифференцирование при помощи менюЧтобы аналитически продифференцировать выражение по некоторой переменной, выделите в нем эту переменную и выберите команду Symbolics / Variable / Differentiate (Символика / Переменная / Дифференцировать) (Рисунок 3.3).
Аналитическое дифференцирование по переменной
Рисунок 3.3. Аналитическое дифференцирование по переменной
В результате, в следующей строке за выражением появится значение ее производной. Для того чтобы найти вторую производную, повторно примените эту последовательность действий, но уже к полученному результату дифференцирования. Так же находятся и производные высших порядков.
Аналитическое дифференцирование
3.1. Аналитическое дифференцированиеВне всякого сомнения, вы по достоинству оцените возможности символьного процессора, позволяющего с легкостью выполнять рутинные вычисления производных громоздких функций. В отличие от всех других операций, символьное дифференцирование выполняется успешно для подавляющего большинства аналитически заданных функций. Думаю, что многие читатели, которым иногда приходится аналитически дифференцировать функции, как и автор этих строк, единожды попробовав сделать это в среде Mathcad, уже никогда не возьмут в руки карандаша для расчета производных "вручную".
Аналитическое разложение выражения в ряд по переменной х
Рисунок 3.12. Аналитическое разложение выражения в ряд по переменной х
4. В появившемся диалоговом окне Expand to Series (Разложить в ряд) введите желаемый порядок аппроксимации (Order of Approximation) и нажмите кнопку ОК.
Результат разложения появится под выражением (он показан на Рисунок 3.12, внизу).
Примечание 1
Примечание 1
Не забывайте, что разложение строится только в точке х=0. Чтобы получить разложение в другой точке х=а, можно, к примеру, подставить вместо переменной х значение х-а.
Частные производные
3.4. Частные производныеС помощью обоих процессоров Mathcad можно вычислять производные функций не только одного, но и любого количества аргументов. Как известно, производные функции нескольких аргументов по одному из них называются частными. Чтобы вычислить частную производную, необходимо, как обычно, ввести оператор производной с панели Calculus (Вычисления) и в соответствующем местозаполнителе напечатать имя переменной, по которой должно быть осуществлено дифференцирование.
Численное дифференцирование
3.2. Численное дифференцированиеВычислительный процессор Mathcad обеспечивает превосходную точность численного дифференцирования.
Дифференцирование
ДифференцированиеОперация дифференцирования реализована в Mathcad как в численной, так и в аналитической форме и обозначается при помощи традиционного оператора, т. е. соответствующими математическими символами (подобно сложению или умножению). Если расчеты выполняются с помощью вычислительного процессора, необходимо хорошо представлять себе особенности численного алгоритма, действие которого остается для пользователя "за кадром". С помощью Mathcad можно вычислять производные скалярных функций любого количества аргументов, причем как функции, так и аргументы могут быть и действительными, и комплексными.
Если производная функции в данной
Рисунок 3.6. Если производная функции в данной точке не существует, выдается сообщение об ошибке
Если попробовать численно определить производную очень близко к нулю, например, при х=10-100, то, несмотря на существование производной, может появиться сообщение об ошибке "Can't converge to a solution" (Невозможно найти решение). Новые версии Mathcad (начиная с 11-й) справляются с указанной трудностью, поскольку в них даже для численного дифференцирования сначала задействуется символьный процессор, поставляющий аналитическое решение, подстановка в которое аргумента дифференцирования дает верный результат. Встретившись с одной из упомянутых ошибок, присмотритесь внимательнее к дифференцируемой функции и убедитесь, что вы не имеете дело с точкой сингулярности.
График производной функции
Рисунок 3.2. График производной функции
Примечание 1
Примечание 1
Помните о том, что в описанном применении оператора дифференцирования его результатом является функция той же переменной х. Пример визуализации операции дифференцирования с помощью графика приведен на Рисунок 3.2.
Примечание 2
Примечание 2
Исходная функция может зависеть не только от аргумента х, но и от других аргументов, например f(x,y,z,t) и т. п. В этом случае дифференцирование производится точно так же, причем становится более понятной необходимость определения переменной дифференцирования (в нижнем местозаполнителе оператора дифференцирования). Расчеты производных по разным аргументам (в этом случае говорят о частных производных), разумеется, будут давать совершенно разные результаты (см. разд. 3.4.).
График разложений функции в ряд
Рисунок 3.13. График разложений функции в ряд в зависимости от порядка аппроксимации (продолжение листинга 3.21)
Видно, что разложение в ряд хорошо работает в окрестности точки х=0, а по мере удаления от нее все сильнее и сильнее отличается от функции. Естественно, что чем выше порядок аппроксимации, тем ближе к исходной функции располагается соответствующее разложение Тейлора.
График точности формулы (3 1)
Рисунок 3.5. График точности формулы (3.1) в зависимости от шага дельта (продолжение листинга 3.6)
Если увеличение ошибки на правом конце графика является совершенно очевидным, поскольку, согласно формуле (3.1), чем больше А, тем больше погрешность, то рост ошибки при очень малых Д может, на первый взгляд, показаться неожиданным. Однако все дело в том, что, применяя разностную формулу, мы неявно полагали, что умеем точно вычислять значения функции f (х) в любой точке. Между тем, любые компьютерные вычисления сопряжены с неустранимыми погрешностями, в частности, обусловленными дискретным представлением чисел. Поэтому в реальности мы можем вычислить значение f (х) лишь с некоторой погрешностью 8, обусловленной (по крайней мере) заведомым округлением чисел при расчетах на компьютере.
В результате, при очень малом шаге разностные формулы означают вычитание друг из друга близких чисел. В этом случае ошибки вычисления функции f (х) становятся доминирующими и приводят к существенному росту суммарной погрешности вычисления разностной производной. Отсюда как раз и следует тот вывод, что значение шага следует выбирать "не очень малым", иначе ошибки вычисления f (х) неминуемо сделают результат дифференцирования неправильным. Глядя на Рисунок 3.5, легко сообразить, что в данном случае следует выбирать промежуточные значения Д, которые обеспечат минимальную (или почти минимальную) погрешность.
Следует подчеркнуть, что в зависимости от характера дифференцируемой функции диапазон приемлемых значений Л будет различным. Поэтому в каждом конкретном случае требуется совершать дополнительные шаги, тестирующие верность выбора шага для численного дифференцирования. Такая процедура, кстати говоря, заложена в адаптивном алгоритме дифференцирования, примененном в Mathcad, что делает его весьма надежным для численного расчета производной.
С учетом сказанного выше, с дифференцированием в Mathcad обычно не возникает сложных проблем. Исключение составляют функции, которые дифференцируются в окрестности сингулярной точки; например, для функции f (х)=1/х это будут точки вблизи х=0. При попытке найти ее производную при х=0 (Рисунок 3.6) будет выдано сообщение об одной из ошибок деления на ноль "Can't divide by zero" (Деление на ноль невозможно) или "Found a singularity while evaluating this expression. You may be dividing by zero" (Найдена сингулярность при вычислении этого выражения. Возможно, вы делите на ноль).
Иллюстрирует пример векторной
Рисунок 3.11 иллюстрирует пример векторной функции f (х,у) (определяемой в первой строке листинга) и вычисление ее дивергенции (которое производится аналитически в третьей строке). Обратите внимание, что в качестве исходной вектор-функции взят результат предыдущих расчетов, показанный (в форме векторного поля) на Рисунок 3.10. Строки кода в верхней части Рисунок 3.11 нужны для подготовки графика вычисленной дивергенции (в виде трехмерной поверхности и линий уровня, соответственно сверху и снизу).Точно такую же структуру имеют расчеты ротора той же векторной функции f (х,у) в листинге 3.16, причем определение операции взятия ротора приводится в его второй строке (как и в случае дивергенции для листинга 3.15).
Читателю, знакомому с векторным анализом, предлагается догадаться самому, почему в рассматриваемом примере (листинги 3.14—3.16) ротор получается тождественно равным нулю (последняя строка листинга 3.16).
Примечание 1

В электронной книге Resource Center (Центр ресурсов), поставляемой вместе с Mathcad, вы найдете дополнительные примеры вычисления градиента, дивергенции и ротора, относящихся к трехмерному случаю.
Изменение вида оператора дифференцирования
Рисунок 3.8. Изменение вида оператора дифференцирования
Для того чтобы изменить вид оператора дифференцирования на представление частной производной, следует:
1. Вызвать контекстное меню из области оператора дифференцирования нажатием правой кнопки мыши.
2. Выбрать в контекстном меню верхний пункт View Derivative As (Показывать производную как).
3. В появившемся подменю (Рисунок 3.8) выбрать пункт Partial Derivative (Частная производная).
Чтобы вернуть вид производной, принятый по умолчанию, выберите в подменю пункт Default (По умолчанию) либо, для представления ее в обычном виде, — Derivative (Производная).
Пример аналитического дифференцирования
Листинг 3.1. Пример аналитического дифференцирования
Попытка численного
Листинг 3.10. Попытка численного поиска шестой производной функции в точке дает неправильный результат
Аналитическое вычисление частных производных
Листинг 3.11. Аналитическое вычисление частных производных
Символьное и численное
Листинг 3.12. Символьное и численное вычисления частных производных в точке
Частные производные высших порядков рассчитываются точно так же, как и обычные производные высших порядков (см. разд. 3.3).
иллюстрирует расчет
Листинг 3.13 иллюстрирует расчет вторых производных функции по переменным х и у, а также смешанной производной.Вычисление второй частной производной
Листинг 3.13. Вычисление второй частной производной
Возможно, вы обратили внимание, что во всех трех листингах 3.11—3.13 оператор дифференцирования записан в традиционной форме частной производной (с округлыми символами дифференциала). Запись оператора не влияет на вычисления, а служит лишь более привычной формой представления расчетов.
Вычисление градиента функции двух переменных
Листинг 3.14. Вычисление градиента функции двух переменных
Вычисление дивергенции векторной функции
Листинг 3.15. Вычисление дивергенции векторной функции
Если, как принято в математике, обозначить оператор взятия градиента символом V, то дивергенцию вектор-функции можно формально определить как скалярное произведение Vf, а еще одну распространенную операцию векторного анализа — ротор (или, по-другому, вихрь или завихренность) — как векторное произведение Vxf.
Градиент функции трех переменных
Листинг 3.17. Градиент функции трех переменных
Дивергенция и ротор в трехмерном пространстве
Листинг 3.18. Дивергенция и ротор в трехмерном пространстве
Вычисление якобиана
Листинг 3.19. Вычисление якобиана векторной функции векторного аргумента
Тот же самый якобиан можно вычислить и несколько по-другому, если определить функцию не одного векторного, а трех скалярных аргументов f(x,y,z) (листинг 3.20). Не забывайте, что для численного определения якобиана необходимо сначала определить точку, в которой он будет рассчитываться, т. е. вектор х в терминах листинга 3.19, или все три переменных х, у, z в обозначениях листинга 3.20.
Аналитическое дифференцирование функции в точке
Листинг 3.2. Аналитическое дифференцирование функции в точке
Для того чтобы продифференцировать функцию, вовсе не обязательно предварительно присваивать ей какое-либо имя, как это сделано в листингах 3.1, 3.2. Можно определить функцию непосредственно в операторе дифференцирования (это демонстрирует первая строка листинга 3.3).
Вычисление якобиана
Листинг 3.20. Вычисление якобиана векторной функции трех скалярных аргументов
Разложение функций
Листинг 3.21. Разложение функций в ряд с разным порядком аппроксимации
Разложение функции
Листинг 3.22. Разложение функции нескольких переменных в ряд по разным переменным
Правильное и неправильное
Листинг 3.3. Правильное и неправильное использование оператора дифференцирования
Как вы заметили, оператор дифференцирования, в основном, соответствует его общепринятому математическому обозначению, и поэтому его легко использовать интуитивно. Однако в некоторых случаях при вводе оператора дифференцирования следует проявить осторожность. Рассмотрим один показательный пример, приведенный во второй строке листинга 3.3, который демонстрирует неправильное применение оператора дифференцирования для вычисления производной в точке. Вместо вычисления производной sin(x) при х=2, как этого можно было ожидать, получено нулевое значение. Это случилось из-за того, что аргумент функции sin(x) введен не в виде переменной х, а в виде числа. Поэтому Mathcad воспринимает последнюю строку как вычисление сначала значения синуса в точке х=2, а затем дифференцирование этого значения (т. е. константы) также в точке х=2, в соответствии с требованием первой строки листинга. Поэтому ответ, на самом деле, неудивителен — в какой точке ни дифференцируй константу, результатом будет ноль.
Примечание 1
Примечание 1
То же самое касается и операции численного дифференцирования, т. е. применения оператора <=>
вместо <->
>
.
Определение функции
Листинг 3.4. Определение функции посредством оператора дифференцирования
Численное дифференцирование функции в точке
Листинг 3.5. Численное дифференцирование функции в точке
ВНИМАНИЕ!
Не забывайте предварительно определять точку, в которой производится численное дифференцирование, как это сделано во второй строке листинга 3.5. Иначе будет выдано сообщение об ошибке, показанное на Рисунок 3:4, гласящее, что переменная или функция, входящая в выражение, ранее не определена. Между тем, символьное дифференцирование (см. разд. 3.1) не требует обязательного явного задания точки дифференцирования. В этом случае вместо значения производной (числа или числового выражения) будет выдана аналитическая зависимость (см. листинг 3.1).
Расчет зависимости
Листинг 3.6. Расчет зависимости точности разностной формулы от шага
демонстрирует численное
Листинг 3.7 демонстрирует численное и символьное вычисление второй производной функции в заданной точке. Обратите внимание, что, как и при вычислении обычной производной, необходимо перед оператором дифференцирования присвоить аргументу функции значение, для которого будет вычисляться производная. А вот для аналитического нахождения производных высших порядков при помощи оператора символьного вывода (в полном соответствии с разд. 3.1), вводить значения аргумента не следует (листинг 3.8).Пример вычисления
Листинг 3.7. Пример вычисления второй производной функции в точке
Пример аналитического
Листинг 3.8. Пример аналитического поиска второй производной функции
Примечание 1
Примечание 1
Убедиться в том, что символьный процессор Mathcad в последней строке листинга 3.7 дает тот же результат, что и вычислительный процессор в предыдущей строке, можно, упростив его. Для этого следует выделить полученное последнее выражение и выбрать в меню Symbolics (Символика) пункт Simplify (Упростить). После этого ниже появится еще одна строка с численным результатом выделенного выражения.
Повторимся, что численный метод предусматривает возможность вычисления производных до 5-го порядка, а символьный процессор умеет считать производные произвольного порядка (конечно, если аналитическое решение задачи в принципе существует). Сказанное иллюстрирует листинг 3.9, в котором аналитически вычисляется шестая производная функции, а попытка численного вывода результата того же выражения приводит к ошибке.
Численное и символьное
Листинг 3.9. Численное и символьное вычисление шестой производной
Чтобы вычислить производную порядка выше 5-го численно, можно последовательно применить несколько раз оператор м-й производной (листинг 3.10), подобно тому, как производится отыскание кратных интегралов (см. разд. 4.3.4). Однако следует помнить о том, что численное определение производных высших порядков производится тем же вычислительным методом Риддера, что и для первых производных. Поскольку, как уже было сказано, для первой производной этот метод обеспечивает точность до 7—8 значащих разрядов числа, при повышении порядка производной на каждую единицу точность падает примерно на один разряд.
ВНИМАНИЕ!
Из сказанного ясно, что падение точности при численном расчете высших производных может быть очень существенно. В частности, если попытаться определить шестую производную функции l/х, то в качестве результата будет выдан ноль, в то время как истинное значение девятой производной может быть найдено при помощи символьного процессора (листинг 3.10).
Модельная функция двух переменных
Рисунок 3.9. Модельная функция двух переменных (продолжение листинга 3.14)
Оператор дифференцирования
Рисунок 3.1. Оператор дифференцирования
Оператор производной высшего порядка
Рисунок 3.7. Оператор производной высшего порядка
Очевидно, что "производная" при N=0 по определению равна самой функции, при N=1 получается обычная первая производная.
Ошибка в применении оператора
Рисунок 3.4. Ошибка в применении оператора дифференцирования (не задан аргумент)
Примечание 1
Примечание 1
В Mathcad 11 и выше для ускорения и повышения точности численного дифференцирования функций, заданных аналитически, автоматически задействуется символьный процессор. Сначала предпринимается попытка отыскать производные, входящие в выражение, аналитически, а уже затем, если она оказывается неудачной, включается в работу численный метод.
Производные высших порядков
3.3. Производные высших порядковMathcad позволяет численно определять производные высших порядков, от 3-го до 5-го включительно. Чтобы вычислить производную функции f (х) N-го порядка в точке х, нужно проделать те же самые действия, что и при взятии первой производной (см. разд. 3.1 и 3.2), за тем исключением, что вместо оператора производной необходимо применить оператор м-й производной (Nth Derivative). Этот оператор вводится с той же панели Calculus (Вычисления), либо с клавиатуры нажатием клавиш
Разложение функции в ряд Тейлора
3.5. Разложение функции в ряд ТейлораЕще одна операция, тесно связанная с дифференцированием, представляет собой разложение функции в ряд Тейлора по любой переменной х в некоторой точке. Если эта точка х=0, то ряд называют также рядом Маклорена, и он представим в окрестности точки х=0 суммой вида a0+a1x+a2x2+a3x3+... Здесь ai — некоторые коэффициенты, не зависящие от х, но, возможно, являющиеся функциями других переменных, от которых зависит исходная функция. Именно эти коэффициенты выражаются через производные функции. Если она имеет в точке х=0 особенность, то соответствующее разложение называют рядом Лорана.
При поиске разложения в ряд Тейлора нет необходимости явно рассчитывать все его коэффициенты, поскольку эта операция предусмотрена разработчиками Mathcad и выполняется при помощи символьного процессора. При этом можно использовать для ее осуществления как соответствующие встроенные функции, так и меню Symbolics (Символика).
Векторное поле градиента функции
Рисунок 3.10. Векторное поле градиента функции двух переменных (продолжение листинга 3.14)
Как можно убедиться, сравнив графики на Рисунок 3.9 и 3.10, математический смысл градиента состоит в задании в каждой точке (х,у) направления на плоскости, в котором функция f (х,у) растет наиболее быстро. Абсолютное значение градиента (т. е. длина вектора в каждой точке) определяет локальную скорость изменения f (x,y). Из сопоставления графи ков ясно, что в центре показанной на них области (х,у) сама функция f (х,у) меняется медленно (соответственно, значения ее градиента являются малыми), а в углах — быстро (там значения градиента максимальны).
Очень важно заметить, что градиент является не скалярной, а векторной функцией переменных х,у, поскольку фактически представляет собой комбинацию двух функций, задающих соответствующие проекции (горизонтальную и вертикальную) вектора в каждой точке. До сих пор в данной главе мы рассматривали дифференцирование скалярных функций, однако в математике часто приходится иметь дело и с вычислением производных векторных функций. Рассмотрим эти действия на примере операции поиска дивергенции (листинг 3.15 и Рисунок 3.11), применимой к векторному полю, т. е. векторной функции, зависящей от пространственных координат (на плоскости, как в нашем примере, или в трехмерном пространстве).
Математические задачи в пакете MathCAD 12
Интегралы с бесконечными пределами
4.3.1. Интегралы с бесконечными пределамиКак мы уже говорили (см. примечание 1 в разд. 4.1.1 и листинг 4.2), для того, чтобы вычислить определенный интеграл с одним или обоими бесконечными пределами, достаточно ввести, пользуясь панелью Calculus (Вычисления), специально предусмотренный разработчиками символ бесконечности в нужные местозаполнители интервалов интегрирования.
Об интегральных преобразованиях функций
4.4.1. Об интегральных преобразованиях функцийВообще говоря, интегральные преобразования по определению ставят в соответствие некоторой функции f (х) другую функцию от другого аргумента F(w). Причем это соответствие f (x)-"F(co) задается интегральной зависимостью. Символьный процессор Mathcad позволяет осуществлять три вида интегральных преобразований функций — преобразование Фурье, Лапласа и Z-преобразование. Наряду с прямыми преобразованиями имеется возможность совершать любое из этих трех обратных преобразований, т. е. F(w)->f (x) .
Аналитически все интегральные преобразования выполняются аналогично символьному интегрированию (см. разд. 4.2.2). Для вычисления преобразования выражения выделяется переменная, по которой будет осуществляться преобразование, и затем выбирается соответствующий пункт меню. Преобразования с применением оператора символьного вывода используются с одним из соответствующих ключевых слов, вслед за которым требуется указать имя нужной переменной.
Приведем примеры символьного расчета каждого из трех интегральных преобразований, а также расскажем о численных методах Фурье- и вейвлет-преобразований.
Оператор интегрирования
4.1.1. Оператор интегрированияИнтегрирование, как и дифференцирование, и множество других математических действий, устроено в Mathcad по принципу "как пишется, так и вводится". Чтобы вычислить определенный интеграл, следует напечатать его обычную математическую форму в документе. Делается это с помощью панели Calculus (Вычисления) нажатием кнопки со значком интеграла или вводом с клавиатуры сочетания клавиш
Примечание 1
Примечание 1
Если пределы интегрирования имеют размерность, то она должна быть одной и той же для обоих пределов.
Преобразование Лапласа
4.5.1. Преобразование ЛапласаПреобразованием Лапласа называют интеграл от f (х) следующего вида:
Рассчитывается преобразование Лапласа совершенно аналогично Фурье-преобразованию (см. разд. 4.4). Примеры преобразования Лапласа приведены в листинге 4.16 и на Рисунок 4.13.
Символьное интегрирование
4.2.1. Символьное интегрированиеДля того чтобы аналитически проинтегрировать некоторую функцию, следует ввести с панели Calculus (Вычисления) символ неопределенного интеграла, в появившемся в документе шаблоне заполнить местозаполнители и, наконец, ввести знак символьного равенства. В случае успеха по истечении некоторого времени расчетов справа от введенного выражения появится его аналитический результат (листинг 4.4). Если же функцию не удается проинтегрировать аналитически, введенное вами выражение будет просто продублировано (листинг 4.5).
Примечание 1
Примечание 1
Помните, что при символьном интегрировании допускается использовать в выражениях, которые вы вводите, различные параметры. Если перед выражением вы нигде не определяли их значения, то (в случае успешных вычислений) символьный процессор Mathcad выдаст аналитическую зависимость результата интегрирования от этих параметров (как в листинге 4.4 от параметра а).
Аналитическое преобразование Фурье
4.4.2. Аналитическое преобразование ФурьеАналитический расчет преобразования Фурье при помощи меню показан на Рисунок 4.9, для чего используется команда меню Symbolics / Transform / Fourier (Символика / Преобразование / Фурье). В листинге 4.12 приведены два примера вычисления прямого преобразования Фурье с применением ключевого слова fourier и оператора символьного вывода —".
Интегрирование при помощи меню
4.2.2. Интегрирование при помощи менюДля вычисления неопределенного интеграла от некоторого выражения по определенной переменной при помощи меню выделите в выражении переменную и выполните команду Symbolics / Variable / Integrate (Символика / Переменная / Интегрировать) (Рисунок 4.6). Вычисленное аналитическое представление неопределенного интеграла появится ниже. При этом результат может содержать как встроенные в Mathcad функции, так и другие спецфункции, которые нельзя непосредственно рассчитать в Mathcad, но символьный процессор "умеет" выдавать их в качестве результата некоторых аналитических операций.
О выборе алгоритма численного интегрирования
4.1.2. О выборе алгоритма численного интегрированияРезультат численного интегрирования — это не точное, а приближенное значение интеграла, определенное с погрешностью, которая зависит от встроенной константы TOL. Чем она меньше, тем с лучшей точностью будет найден интеграл, но и тем больше времени будет затрачено на расчеты. По умолчанию TOL=0. 001. Для того чтобы ускорить вычисления, можно установить большее значение TOL.
СОВЕТ
Если скорость расчетов имеет для вас принципиальное значение, например, при многократном вычислении интеграла внутри цикла, проявите осторожность, выбирая значение точности. Обязательно поэкспериментируйте на тестовом примере с характерной для ваших расчетов подынтегральной функцией. Посмотрите, как уменьшение константы TOL сказывается на погрешности интегрирования, вычислив интеграл для разных ее значений и выбрав оптимальное, исходя из соотношения точность/скорость вычислений.
Отдавайте себе отчет в том, что при вводе в редакторе Mathcad оператора численного интегрирования вы фактически создаете самую настоящую программу. Например, программой является первая строка листинга с Рисунок 4.2, просто основная ее часть скрыта от вашего взора разработчиками компании MathSoft. В большинстве случаев об этом не приходится специально задумываться, можно полностью положиться на Mathcad. Но иногда может потребоваться умение управлять параметрами этой программы, как мы уже рассмотрели на примере выбора константы TOL. Кроме нее, пользователь имеет возможность выбирать сам алгоритм численного интегрирования. Для этого:
1. Щелкните правой кнопкой мыши в любом месте на левой части вычисляемого интеграла.
2. В появившемся контекстном меню выберите один из имеющихся в наличии численных алгоритмов, например Romberg (Ромберга) (Рисунок 4.3).
Обратите внимание, что перед тем как один из алгоритмов выбран впервые, как показано на Рисунок 4.3, флажок проверки в контекстном меню установлен возле пункта AutoSelect (Автоматический выбор). Это означает, что алгоритм определяется Mathcad, исходя из анализа пределов интегрирования и особенностей подынтегральной функции. Как только один из алгоритмов выбран, этот флажок сбрасывается, а избранный алгоритм отмечается точкой.
Расходящиеся интегралы
4.3.2. Расходящиеся интегралыЕсли интеграл расходится (равен бесконечности), то вычислительный процессор Mathcad может выдать сообщение об ошибке, выделив при этом оператор интегрирования, как обычно, красным цветом. Чаще всего ошибка будет иметь тип "Found a number with a magnitude greater than 10307" (Найдено число, превышающее значение 10307) или "Can't converge to a solution" (Не сходится к решению).
Zпреобразование
4.5.2. Z-преобразованиеZ-преобразование функции f (х) определяется не интегралом, а бесконечной суммой следующего вида:
Пример Z-преобразования приведен в листинге 4.17, а его результаты — на Рисунок 4.14.
Дискретное преобразование Фурье
4.4.3. Дискретное преобразование ФурьеВ предыдущем разделе рассказывалось о возможностях символьного процессора Mathcad, позволяющего осуществить аналитическое преобразование Фурье функции, заданной формулой. Между тем огромный пласт задач вычислительной математики связан с расчетом интегралов Фурье для функций, либо заданных таблично (например, представляющих собой результаты какого-либо эксперимента), либо функций, проинтегрировать которые аналитически не удается. В данном случае вместо символьных преобразований приходится применять численные методы интегрирования, связанные с дискретизацией подынтегральной функции и называемые потому дискретным Фурье-преобразованием.
В численном процессоре Mathcad дискретное преобразование Фурье реализовано при помощи популярнейшего алгоритма быстрого преобразования Фурье (сокращенно БПФ). Этот алгоритм реализован в нескольких встроенных функциях Mathcad, различающихся только нормировками:
ВНИМАНИЕ!
Аргумент прямого Фурье-преобразования, т. е. вектор у, должен иметь ровно 2n элементов (n — целое число). Результатом является вектор с 1+2n-1 элементами. И наоборот, аргумент обратного Фурье-преобразования должен иметь 1+2n-1 элементов, а его результатом будет вектор из 2n элементов. Если число данных не совпадает со степенью 2, то необходимо дополнить недостающие элементы нулями.
В листинге 4.14 показан пример расчета Фурье-спектра для модельной функции f (x), представляющей собой сумму двух синусоид разной амплитуды (верхний график на Рисунок 4.10). Расчет проводится по N=128 точкам, причем предполагается, что интервал дискретизации данных уi равен h. В предпоследней строке листинга корректно определяются соответствующие значения частот W, а в последней применяется встроенная функция FFT. Полученный график Фурье-спектра показан на Рисунок 4.10 (снизу). Обратите внимание, что результаты расчета представляются в виде его модуля, поскольку сам спектр, как уже отмечалось, является комплексным. Очень полезно сравнить полученные амплитуды и местоположение пиков спектра с определением синусоид в начале листинга.
Примечание 1
Примечание 1
Более подробную информацию о свойствах и практике применения Фурье-преобразования вы найдете в главе 14.
Интеграл с переменным пределом
4.3.3. Интеграл с переменным пределомСимвольный процессор предоставляет замечательные возможности аналитического вычисления интегралов, в том числе зависящих от параметров. Особую важность имеет вычисление интеграла с переменным пределом (верхним или нижним), для которого один из пределов интегрирования является переменной, отличной от переменной интегрирования (листинг 4.8). Нетрудно сообразить, что, с точки зрения символьного процессора, интеграл с переменным пределом является обычным определенным интегралом, зависящим от дополнительного параметра.
О традиционных алгоритмах интегрирования
4.1.3.О традиционных алгоритмах интегрированияПрежде чем перейти к изложению метода численного интегрирования, реализованного в Mathcad, скажем несколько слов об основных принципах численного интегрирования. Исходя из геометрического смысла определенного интеграла функции f (х) как площади фигуры, образованной графиком этой функции и осью х, можно предложить самый простой способ интегрирования "хорошей" функции — применить формулу прямоугольников. С ее помощью площадь упомянутой искомой фигуры подсчитывается как сумма элементарных прямоугольников, множеством которых заменяется подынтегральная функция f (х).
Иллюстрация метода прямоугольников приведена на Рисунок 4.4. Для подсчета интеграла i интервал интегрирования [а,b] разбивается на N отрезков. На. каждом i-м отрезке f (х) заменяется прямоугольником с шириной h и высотой f (xi). Площадь каждого из этих элементарных прямоугольников составляет hf (xi), а их сумма s может считаться приближением к искомому интегралу I. Несложно показать, что при N->~ множество элементарных прямоугольников стремится к искомой фигуре, образованной подынтегральной функцией, а значение S->I, причем погрешность (отличие s от точного значения i) составляет o(h2).
Можно воспринимать смысл алгоритма прямоугольников в замене исходной подынтегральной функции другой, близкой к ней (в данном случае, кусочно-непрерывной) функцией, интеграл от которой легко подсчитать аналитически. Принцип более точных методов интегрирования как раз и состоит в интерполяции подынтегральной функции f (х) некоторой близкой зависимостью у(х) и расчете интеграла уже от этой функции. Важно, чтобы при этом, во-первых, интеграл от у(х) мог быть точно рассчитан аналитическими методами; и, во-вторых, функция f (х) была бы по возможности ближе к у (х), чтобы уменьшить погрешность.
Вейвлетпреобразование
4.5.3. Вейвлет-преобразованиеВ последнее время возрос интерес к другим интегральным преобразованиям, в частности, к вейвлет-преобразованию (или дискретному волновому преобразованию). Оно применяется, главным образом, для анализа нестационарных сигналов и для многих задач подобного рода оказывается более эффективным, чем преобразование Фурье. Основным отличием вейвлет-преобразования является разложение данных не по синусоидам (как для преобразования Фурье), а по другим функциям, называемым вейвлетобразующими. Вейвлетобразующие функции, в противоположность бесконечно осциллирующим синусоидам, локализованы в некоторой ограниченной области своего аргумента, а вдали от нее равны нулю или ничтожно малы. Пример такой функции, называемой "мексиканской шляпой", показан на Рисунок 4.15.
По своему математическому смыслу вейвлет-спектр имеет не один аргумент, а два. Помимо частоты, вторым аргументом ь является место локализации вейвлетобразующей функции. Поэтому ь имеет ту же размерность, что и х.
Алгоритм Ромберга
4.1.4. Алгоритм РомбергаПосле сделанных вводных замечаний приведем основные идеи итерационного алгоритма Ромберга, который применяется в системе Mathcad для выполнения операции численного интегрирования.
Кратные интегралы
4.3.4. Кратные интегралыКратным называется интеграл функции многих переменных, берущийся по нескольким переменным. Для того чтобы вычислить кратный интеграл:
1. Введите, как обычно, оператор интегрирования.
2. В соответствующих местозаполнителях введите имя первой переменной интегрирования и пределы интегрирования по этой переменной.
3. На месте ввода подынтегральной функции введите еще один оператор интегрирования (Рисунок 4.7).
4. Точно так же введите вторую переменную, пределы интегрирования и подынтегральную функцию (если интеграл двукратный) или следующий оператор интегрирования (если более чем двукратный) и т. д., пока выражение с многократным интегралом не будет введено окончательно.
Преобразование Фурье комплексных данных
4.4.4. Преобразование Фурье комплексных данныхАлгоритм быстрого преобразования Фурье для комплексных данных встроен в соответствующие функции, в название которых входит литера "с":
Функции действительного преобразования Фурье используют тот факт, что в случае действительных данных спектр получается симметричным относительно нуля, и выводят только его половину (см. разд. 4.4.3). Поэтому, в частности, по 128 действительным данным получалось всего 65 точек спектра Фурье. Если к тем же данным применить функцию комплексного преобразования Фурье (Рисунок 4.11), то получится вектор из 128 элементов. Сравнивая Рисунок 4.10 и 4.И, можно уяснить соответствие между результатами действительного и комплексного Фурье-преобразования.
Двумерное преобразование Фурье
4.4.5. Двумерное преобразование ФурьеВ Mathcad имеется возможность вычислять не только одномерное преобразование Фурье функции f (x), но и двумерное преобразование функции двух переменных f(x,y). Иными словами, допускается применять встроенные функции комплексного дискретного преобразования Фурье не только к одномерным, но и к двумерным массивам, т. е. матрицам. Соответствующий пример приведен в листинге 4.15 и на Рисунок 4.12 в виде графика поверхности исходных данных (верхний график) и рассчитанного двумерного Фурье-спектра (нижний график).
Пример длина дуги кривой
4.3.5. Пример: длина дуги кривойВ заключение приведем пример использования вычислительного процессора Mathcad для расчета длины участка кривой, задаваемой некоторой функцией f (x) в промежутке между двумя значениями ее аргумента а и ь (Рисунок 4.8). Решение данной простой задачи математического анализа приведено в листинге 4.11, причем формула, по которой рассчитывается длина дуги, приведена в третьей (последней) строке листинга. Обратите внимание, что для получения результата необходимо применить и операцию численного интегрирования, и дифференцирования.
Другие интегральные преобразования
4.5. Другие интегральные преобразованияРассмотрим в завершение главы, посвященной интегрированию, еще три преобразования, которые часто применяются помимо интеграла Фурье. Отметим, что преобразование Лапласа и Z-преобразование встречаются в практических задачах вычислительной математики относительно редко, а вот вейвлет-преобразование, теория которого появилась относительно недавно, постепенно выходит на лидирующие позиции в проблемах обработки данных.
Функция двух переменных и ее двумерное
Рисунок 4.12. Функция двух переменных и ее двумерное преобразование Фурье (продолжение листинга 4.15)
График функции определяет дугу
Рисунок 4.8. График функции определяет дугу некоторой длины (продолжение листинга 4.11)
Интеграл Фурье
4.4. Интеграл ФурьеОбратимся теперь к характерным проблемам вычислительной математики, связанным с (аналитическим или численным) вычислением интегралов определенного вида. Задачи, о которых мы собираемся рассказать, тесно связаны с алгоритмами обработки данных, поэтому содержание этого раздела будет перекликаться с материалом главы 14 (см. разд. 14.1). Благодаря обширному применению для вычисления таких интегралов разработаны специфические алгоритмы, несравненно более эффективные, чем традиционные (см. разд. 4.1.4), причем некоторые из них имеются в арсенале Mathcad в форме встроенных функций вычислительного процессора и соответствующих операций символьного процессора.
Наиболее широко распространенным интегральным преобразованием является преобразование Фурье, которое представляет функцию f (х) в виде интеграла по гармоническим функциям, называемого интегралом Фурье:
Функция F(CO) называется также преобразованием Фурье, или Фурье-спектром исходной функции f (х). Ее аргумент ш имеет смысл частоты соответствующей гармонической составляющей f (х). Важно отметить, что функция, выражающая преобразование Фурье, комплексна, даже если f(x) является действительной.
Интегралы специального вида
4.3. Интегралы специального видаЗавершим разговор о приемах интегрирования в среде Mathcad примерами вычислений в некоторых специальных случаях, которые довольно часто встречаются в самых разнообразных областях математики.
Интегрирование выражения по переменной при помощи меню
Рисунок 4.6. Интегрирование выражения по переменной при помощи меню
Интегрирование
ИнтегрированиеС одной стороны, численное интегрирование — одна из самых простых, с вычислительной точки зрения, операций, с другой — аналитически проинтегрировать можно далеко не каждую функцию. Всегда помните об этом, когда вы сталкиваетесь с численным или аналитическим интегрированием.
Использование оператора интегрирования
Рисунок 4.2. Использование оператора интегрирования в функции пользователя
Примечание 4
Примечание 4
Оператор интегрирования может использоваться точно так же, как и другие операторы: для определения функций, в циклах и при вычислении ранжированных переменных. Пример присваивания пользовательской функции f (z) значения определенного интеграла и вычисления нескольких ее значений приведен на Рисунок 4.2. На том же рисунке показано, как можно построить график результата интегрирования.
Комплексное преобразование Фурье (продолжение листинга 4 14)
Рисунок 4.11. Комплексное преобразование Фурье (продолжение листинга 4.14)
Численное и символьное
Листинг 4.1. Численное и символьное вычисление определенного интеграла
Примечание 2
Примечание 2
Можно вычислять интегралы с одним или обоими бесконечными пределами (листинг 4.2). Для этого на месте соответствующего предела введите символ бесконечности, воспользовавшись, например, той же самой панелью Calculus (Вычисления). Чтобы ввести (минус бесконечность), добавьте знак минус к символу бесконечности, как к обычному числу.
Символьное вычисление кратных интегралов
Листинг 4.10. Символьное вычисление кратных интегралов
Расчет длины дуги кривой
Листинг 4.11. Расчет длины дуги кривой
Примеры прямого преобразования Фурье
Листинг 4.12. Примеры прямого преобразования Фурье
иллюстрирует применение
Листинг 4.13 иллюстрирует применение обратного преобразования Фурье и последующее прямое преобразование полученного выражения, в результате которого получается исходная функция.ВНИМАНИЕ!
Помните о том, что результаты символьных преобразований могут включать спецфункции, которые не являются встроенными функциями Mathcad и поэтому не могут впоследствии использоваться в вычислениях. Их имена представляют собой не более, чем текстовое сообщение.
Обратное и прямое преобразование Фурье
Листинг 4.13. Обратное и прямое преобразование Фурье
Дискретное преобразование
Листинг 4.14. Дискретное преобразование Фурье (алгоритм БПФ) модельнго сигнала
Двумерное дискретное преобразование Фурье
Листинг 4.15. Двумерное дискретное преобразование Фурье
Двумерное преобразование Лапласа
Листинг 4.16. Двумерное преобразование Лапласа
Прямое и обратное Zпреобразование
Листинг 4.17. Прямое и обратное Z-преобразование
Вычисление вейвлетспектра
Листинг 4.18. Вычисление вейвлет-спектра Добеши модельного сигнала
Вычисление вейвлетспектра
Листинг 4.19. Вычисление вейвлет-спектра на основе "мексиканской шляпы"
Вычисление интеграла с бесконечными пределами
Листинг 4.2. Вычисление интеграла с бесконечными пределами
Примечание 3
Примечание 3
Подынтегральная функция может зависеть от любого количества переменных. Именно для того чтобы указать, по какой переменной Mathcad следует вычислять интеграл, и нужно вводить ее имя в соответствующий местозаполнитель. Помните, что для численного интегрирования по одной из переменных предварительно следует задать значение остальных переменных, от которых зависит подынтегральная функция и для которых вы намерены вычислить интеграл (листинг 4.3).
Интегрирование функции
Листинг 4.3. Интегрирование функции двух переменных по разным переменным
Аналитическое вычисление
Листинг 4.4. Аналитическое вычисление неопределенного интеграла
Аналитическое интегрирование невозможно
Листинг 4.5. Аналитическое интегрирование невозможно
демонстрирует невозможность
Листинг 4.6 демонстрирует невозможность численного расчета интеграла (нижняя строка листинга). Тем не менее символьный процессор справляется с этим интегралом, совершенно правильно находя его бесконечное значение (верхняя строка листинга 4.6).Вычисление расходящегося интеграла
Листинг 4.6. Вычисление расходящегося интеграла
При попытке численного решения задачи листинга 4.6 методом, отличным от алгоритма вычисления интегралов с бесконечными пределами (Infinite Limit), получится неверное решение (листинг 4.7). А именно, вместо бесконечности будет выдано большое, но конечное число, немного не дотягивающее до численной бесконечности, являющейся для вычислительного процессора просто большим числом ю307. Отметим, что Mathead в режиме автоматического выбора алгоритма (AutoSelect) предлагает для интегралов с бесконечным пределом именно алгоритм Infinite Limit.
Плохо выбранный численный
Листинг 4.7. Плохо выбранный численный алгоритм ( в данном случае, адаптивный) неверно находит расходящийся интеграл
Аналитическое вычисление
Листинг 4.8. Аналитическое вычисление интеграла с переменным верхним пределом
Символьное и численное
Листинг 4.9. Символьное и численное вычисления кратного интеграла
ВНИМАНИЕ!
Аккуратнее вводите в редакторе Mathcad кратные интегралы, если они имеют различные пределы интегрирования по разным переменным. Не перепутайте пределы, относящиеся к разным переменным. Если вы имеете дело с такого рода задачами, обязательно разберитесь с листингом 4.10, в котором символьный процессор вычисляет двукратный интеграл. В первой строке пределы интегрирования [а, b] относятся к переменной у, а во второй строке— к переменной X.
Модельная функция и ее преобразование
Рисунок 4.10. Модельная функция и ее преобразование Фурье (продолжение листинга 4.14)
Неопределенный интеграл
4.2. Неопределенный интегралПредыдущий раздел был посвящен проблеме поиска определенного интеграла, т. е. числового значения, равного площади фигуры, образованной графиком подынтегральной функции и.осью х (см. Рисунок 4.4). Задача нахождения неопределенного интеграла намного сложнее, поскольку связана с поиском функции, производная от которой равна исходной подынтегральной функции. Решение этой задачи целиком возложено на символьный процессор Mathcad.
Оценка погрешности алгоритма прямоугольников
Рисунок 4.5. Оценка погрешности алгоритма прямоугольников
Недостатком перечисленных традиционных алгоритмов являются затруднения в количественной оценке погрешности. Аналитические формулы для погрешности включают, помимо множителя ьк, задающего, собственно, порядок аппроксимации метода, сомножитель, характеризующий величину производной (определенного высшего порядка) подынтегральной функции. Оценить ее значение при конкретных расчетах очень сложно, и поэтому, соответственно, сложно вычислить суммарную погрешность алгоритма. В то же время сведения о величине погрешности являются очень важными, и, чаще всего, желательно иметь их количественную оценку, чтобы оптимально выбрать число разбиений интервала интегрирования N.
Для апостериорной оценки погрешности можно, например, применять анализ зависимости s(N), подсчитанной для нескольких значений N (Рисунок 4.5). Зная, что, с одной стороны, s(N) изменяется по определенному степенному закону N~K, и, с другой, s(N)->i (к точному значению интеграла), можно довольно точно определить погрешность метода. На нижнем графике Рисунок 4.5 приведена зависимость погрешности от N (правда, в данном случае мы использовали для наглядности графика точное значение интеграла, которое в практических случаях, конечно, неизвестно). Именно с подобной процедурой и связан алгоритм расчета определенных интегралов, использованный в Mathcad, который будет представлен в следующем разделе.
Оператор интегрирования
Рисунок 4.1. Оператор интегрирования
Чтобы получить результат интегрирования, следует ввести знак равенства или символьного равенства. В первом случае интегрирование будет проведено численным методом, во втором — в случае успеха будет найдено точное значение интеграла с помощью символьного процессора Mathcad. Эти два способа иллюстрирует листинг 4.1. Конечно, символьное интегрирование возможно только для сравнительно небольшого круга несложных подынтегральных функций.
Определенный интеграл
4.1. Определенный интегралИнтегрирование в Mathcad реализовано в виде вычислительного оператора. Допускается вычислять интегралы от скалярных функций в пределах интегрирования, которые также должны быть скалярными. Несмотря на то, что пределы интегрирования обязаны быть действительными, подынтегральная функция может иметь и комплексные значения, поэтому и значение интеграла может быть комплексным.
Прямое и обратное преобразование
Рисунок 4.13. Прямое и обратное преобразование Лапласа (продолжение листинга 4.16)
Прямое и обратное Zпреобразования
Рисунок 4.14. Прямое и обратное Z-преобразования (продолжение листинга 4.17)
Расчет Фурьепреобразования при помощи меню
Рисунок 4.9. Расчет Фурье-преобразования при помощи меню
Реализация алгоритма прямоугольников
Рисунок 4.4. Реализация алгоритма прямоугольников
Очевидно, что наиболее простой алгоритм заключается в интерполяции подынтегральной функции на каждом из N шагов интегрирования f (х) каким-либо полиномом у(х). Известно, что могут быть предложены различные пути построения интерполирующих полиномов, отличающихся, в частности, порядком. Например, полиномы Лагранжа строятся при интерполяции f (х) в n точках на каждом из N элементарных интервалов интегрирования. Семейство классических алгоритмов интегрирования в этом случае называется методами Ньютона—Котеса. Заметим, что при n=1 полиномом является прямая линия, и мы имеем метод трапеций; при n=2 интерполирующим полиномом на каждом шаге интегрирования будет квадратичная парабола, и мы получим алгоритм Симпсона и т. д.
Примечание 1
Примечание 1
Дополнительные сведения об алгоритме полиномиальной интерполяции приведены в главе 13.
Сравнение синусоиды и вейвлетобразующей функции
Рисунок 4.15. Сравнение синусоиды и вейвлетобразующей функции
Встроенная функция вейвлет-преобразования
Mathcad имеет одну встроенную функцию для расчета вейвлет-преобразования на основе вейвлетобразующей функции Добеши:
Аргумент функции вейвлет-преобразования, т. е. вектор у, должен так же, как и в преобразовании Фурье, иметь ровно 2П элементов (n — целое число). Результатом функции wave является вектор, скомпонованный из нескольких коэффициентов с двухпараметрического вейвлет-спектра. Особенности использования функции wave иллюстрируются листингом 4.18, где в качестве модельной функции взята сумма двух синусоид, график которой был изображен на Рисунок 4.10. Результаты вычислений вейвлет-спектра Добеши представлены в виде трех семейств его коэффициентов на Рисунок 4.16.
Вейвлетспектр Добеши модельного
Рисунок 4.16. Вейвлет-спектр Добеши модельного сигнала (продолжение листинга 4.18)
Программирование других вейвлет-преобразований
Наряду со встроенной функцией wave, профессиональные версии Mathcad 11—12 снабжены пакетом расширения для осуществления вейвлет-анализа. Пакет расширения содержит большое число дополнительных встроенных функций, имеющих отношение к вейвлет-преобразованиям. Обзор пакетов расширения выходит за рамки данной книги, поэтому ограничимся простым упоминанием об этой возможности.
Примечание 1
Примечание 1
Дополнительную информацию об использовании данных встроенных функций можно найти в соответствующей .электронной книге, которую можно открыть при помощи меню Help/ E-Books / Wavelet extension pack (Справка/ Электронные книги / Вейвлет-анализ данных).
Помимо встроенной функции вейвлет-спектра Добеши и возможностей пакета расширения, допускается непосредственное программирование алгоритмов пользователя для расчета вейвлет-спектров. Оно сводится к аккуратному численному расчету соответствующих семейств интегралов. Один из примеров такой программы приведен в листинге 4.19. Анализу подвергается функция, составленная из суммы двух синусов, а график двухпараметриче-ского спектра с(а,b) выведен на Рисунок 4.17 в виде привычных для вейвлет-анализа линий уровня на плоскости (а,b).
Примечание 2
Примечание 2
Программа листинга очень проста, но исключительно далека от хорошей в смысле быстродействия. Каждый интеграл вычисляется независимо, без использования методов ускорения, типа применяемых в алгоритме БПФ. Однако простые приемы программирования вполне доступно раскрывают математический смысл вейвлет-преобразования.
Вейвлетспектр модельного сигнала
Рисунок 4.17. Вейвлет-спектр модельного сигнала на основе "мексиканской шляпы" (продолжение листинга 4.19)
Ввод нескольких операторов интегрирования
Рисунок 4.7. Ввод нескольких операторов интегрирования для расчета кратного интеграла
Пример символьного и численного расчета двукратного интеграла в бесконечных пределах приведен в листинге 4.9. Обратите внимание, что символьный процессор "угадывает" точное значение интеграла л, а вычислительный определяет его приближенно и выдает в виде числа 3.142.
Выбор алгоритма численного интегрирования
Рисунок 4.3. Выбор алгоритма численного интегрирования производится при помощи контекстного меню
Разработчиками Mathcad запрограммированы четыре численных метода интегрирования:
Старайтесь все-таки оставить выбор численного метода за Mathcad, установив флажок AutoSelect (Автоматический выбор) в контекстном меню. Попробовать другой метод можно, например, чтобы сравнить результаты расчетов в специфических случаях, когда у вас закрадываются сомнения в их правильности.
Если подынтегральная функция "хорошая", т. е. не меняется на интервале интегрирования слишком быстро, не имеет особенностей и не обращается в бесконечность, то численное решение интеграла не принесет никаких неприятных сюрпризов.
Математические задачи в пакете MathCAD 12
Метод секущих функция root
5.3.1. Метод секущих: функция rootИтерационный алгоритм, реализованный в функции root, который называется методом секущих, состоит в следующем (Рисунок 5.7):
1. Начальное приближение принимается за 0-е приближение к корню: х0=х.
2. Выбирается шаг h=TOLх и определяется первое приближение к корню x1=x0+h. Если х=0, то принимается h=TOL.
3. Через эти две точки проводится секущая — прямая линия, которая пересекает ось х в некоторой точке х2. Эта точка принимается за второе приближение.
4. Новая секущая проводится через первую и вторую точки, тем самым определяя третье приближение, и т. д.
5. Если на каком-либо шаге оказывается, что уравнение выполнено, т. е. |f (х)|
Системы уравнений функция Find
5.2.1. Системы уравнений: функция FindРассмотрим решение системы N нелинейных уравнений с м неизвестными
Здесь f1(x1, ..., хM), ..., fN (x1, ..., XM) — некоторые скалярные функции от скалярных переменных x1,x2, ..., хM и, возможно, от еще каких-либо переменных. Уравнений может быть как больше, так и меньше числа переменных. Заметим, что систему (5.4) можно формально переписать в виде
f(x)=0, (5.5)
где х — вектор, составленный из переменных x1,x2, ... ,хM, a f (х) — соответствующая векторная функция.
Вычислительный блок Given /Find
Для численного решения систем уравнений применяется тот же самый вычислительный блок, что и для символьных вычислений (см. разд. 5.1.1). Повторимся, что он состоит из ключевого слова Given, самой системы уравнений, записанной при помощи логических операторов панели Boolean (Булевы операторы), а также встроенной функции Find. Find(x1, ... ,хM) — встроенная функция для решения системы алгебраических уравнений и неравенств относительно переменных x1,...,xM. Значение функции Find представляет собой вектор, составленный из решений по каждой переменной.
Примечание 1
Примечание 1
Встроенная функция Find использует в качестве численного алгоритма один из градиентных методов (см. разд. 5.3). Этот факт налагает некоторые ограничения на уравнения системы, которые должны быть достаточно гладкими функциями своих аргументов.
Примечание 2
Примечание 2
При численных расчетах может быть найден только один из корней уравнения, в отличие от символьных вычислений, которые позволяют определить все имеющиеся корни.
Применение численного нахождения корней отличается от символьного двумя обстоятельствами:
Примечание 3
Примечание 3
Помните также о том, что, в отличие от символьного, для численного процессора необходимо задать числовые значения всех параметров, входящих в уравнение.
Одно уравнение с одним неизвестным
Рассмотрим в качестве примера (листинг 5.8) одно уравнение с одним неизвестным, которое уже решалось нами аналитически (см. листинги 5.1 и 5.2). Уравнение имеет три корня, как видно из графика, приведенного на Рисунок 5.4. Обратите внимание, что перед ключевым словом Given переменной х присваивается некоторое значение х=1. В остальном применение функции Find для решения уравнения не отличается от символьных расчетов.
Вычислительный блок Given/Find
5.1.1. Вычислительный блок Given/FindРассмотрим решение системы N нелинейных уравнений с м неизвестными
Здесь fi(xi, ..., хM) =b1, . .., fN (xi, ..., хM) =bN — некоторые скалярные выражения, зависящие от скалярных переменных x1,x2, ... ,хM и, возможно, от еще каких-либо переменных. Уравнений может быть как больше, так и меньше числа переменных. Заметим, что систему (5.1) можно формально переписать в- виде
f(x)=b, (5.2)
где х — вектор, составленный из переменных x1,x2,.. . ,хN, b — вектор, составленный из правых частей уравнений, a f (х) — соответствующая векторная функция их левых частей.
Для решения систем в Mathcad применяется специальный вычислительный блок Given/Find (Дано/найти), состоящий из трех частей, идущих последовательно друг за другом:
Вставлять логические операторы следует, пользуясь панелью инструментов Boolean (Булевы операторы). Если вы предпочитаете ввод с клавиатуры, помните, что логический знак равенства вводится сочетанием клавиш
Примечание 1
Примечание 1
При решении уравнений в векторной форме в вычислительном блоке не рекомендуется, а, начиная с версии Mathcad 12, просто запрещено использование одних элементов вектора в качестве неизвестных, а других — в качестве параметров задачи. Соответствующие примеры, иллюстрирующие данное ограничение, вы найдете на компакт-диске.
Градиентные методы функция Find
5.3.2. Градиентные методы: функция FindЕсли вы решаете "хорошие" уравнения, как все те, которые были приведены в предыдущих разделах, то, вообще говоря, можете никогда не задумываться, как именно Find ищет их корни. Однако даже в этом случае полезно представлять, что происходит "за кадром", т. е. какие действия совершаются в промежутке между введением необходимых условий после ключевого слова Given и получением результата после применения функции Find. Это важно хотя бы с позиций выбора начальных значений переменных перед вычислительным блоком. Рассмотрим в данном разделе некоторые особенности численных методов и возможности установки их различных параметров, которые предоставляет Find.
Принцип действия градиентных алгоритмов
Во встроенной функции Find реализовано несколько градиентных численных алгоритмов, один из которых может выбрать либо программа Mathcad, либо сам пользователь. Покажем их основную идею на примере уравнения с
одним неизвестным f (x)=0 для функции f(х)=х2+5х+2, график которой показан на Рисунок 5.8. Принцип градиентных методов состоит в последовательных приближениях к истинному решению уравнения, которые вычисляются с помощью производной от f (х). Приведем наиболее простую форму алгоритма, называемого методом Ньютона:
1. За нулевую итерацию принимается введенное пользователем начальное значение х0=х.
2. В точке х0 методом конечных разностей вычисляется производная f (x0).
3. Пользуясь разложением Тейлора, можно заменить f (х) в окрестности х0 касательной — прямой линией f (x)=f (x0) +f (х0)-(х-х0).
4. Определяется точка x1, в которой прямая пересекает ось х (Рисунок 5.8).
5. Если f (x1)
Одно уравнение
5.1.2. Одно уравнениеПоясним сказанное на примере решения одного (кубического) уравнения с одним неизвестным х (Рисунок 5.1):
Зх3+2х2-7х=0. (5.3)
Уравнение с одним неизвестным функция root
5.2.2. Уравнение с одним неизвестным: функция rootДля решения уравнения с одним неизвестным в Mathcad, помимо вычислительного блока Given/Find, предусмотрена встроенная функция root, которая, в зависимости от типа задачи, может включать либо два, либо четыре аргумента и, соответственно, использует разные алгоритмы поиска корней.
Первый тип функции root, аналогично встроенной функции Find, требует дополнительного задания начального значения переменной х, для чего нужно просто перед применением функции root присвоить х некоторое число. Таким образом, присвоение начального значения требует априорной информации о примерной локализации корня, т. к. поиск корня будет производиться вблизи этого числа. Пример работы функции root объясняется листингом 5.13.
Корни полинома функция polyroots
5.2.3. Корни полинома: функция polyrootsЕсли функция f (х) является полиномом, то все его корни можно определить, используя встроенную функцию:
Поскольку полином N-й степени имеет ровно N корней (некоторые из них могут быть кратными), вектор v должен состоять из N+1 элемента. В основе встроенной функции polyroots лежат специфические численные алгоритмы, а результатом ее действия является вектор, составленный из N корней рассматриваемого полинома. При этом нет надобности вводить какое-либо начальное приближение, как для функции root. Пример поиска корней полинома четвертой степени иллюстрируется листингом 5.16.
Коэффициенты рассматриваемого в примере полинома
f (х) = (х-3)-(х-1)3=х4-6х3+12х2-10х+3
записаны в виде вектора в первой строке листинга. Первым в векторе должен идти свободный член полинома, вторым — коэффициент при х1 и т. д. Соответственно, последним N+1элементом вектора должен быть коэффициент при старшей степени xN.
СОВЕТ
Иногда исходный полином имеется не в развернутом виде, а, например, как произведение нескольких полиномов. В этом случае определить все его коэффициенты можно, выделив его и выбрав в меню Symbolics (Символика) пункт Expand (Разложить). В результате символьный процессор Mathcad сам преобразует полином в нужную форму; пользователю надо будет только корректно ввести ее в аргументы функции polyroots.
Метод продолжения по параметру
5.3.3. Метод продолжения по параметруРешение "хороших" нелинейных уравнений и систем типа тех, которые были рассмотрены в предыдущих разделах этой главы, представляет собой несложную, с вычислительной точки зрения, задачу. В реальных инженерных и научных расчетах очень распространена более сложная проблема: решение не одного уравнения (или системы), а целой серии уравнений, зависящих от некоторого параметра (или нескольких параметров). Для таких задач существуют очень эффективные методы, которые называются методами продолжения. Эти методы непосредственно не встроены в Mathcad, но могут быть легко запрограммированы с помощью уже рассмотренных нами средств. Будем далее говорить об одном уравнении, имея в виду, что всегда возможно обобщение результатов на случай системы уравнений.
Пусть имеется уравнение f (а,х)=0, зависящее не только от неизвестного х, но и от параметра а. Требуется определить зависимость его корня х от параметра а, т. е. х(а). Простой пример такой задачи был приведен в листинге 5.3 (см. разд. 5.1.2). Тогда нам повезло, и решение в общем виде было найдено с помощью символьных вычислений. Рассмотрим еще один, чуть более сложный, пример алгебраического уравнения, зависящего от параметра а следующим образом: ln(ах2)=х (Рисунок 5.11).
Системы уравнений
5.1.3. Системы уравненийСимвольное решение системы алгебраических уравнений отличается от описанного случая одного уравнения только количеством соотношений, задаваемых после ключевого слова Given. Соответственно, число неизвестных также может быть любым, причем необязательно равным числу уравнений. Если система уравнений имеет не обособленные решения, а целые семейства решений, то соответствующие результаты выдаются символьным процессором Mathcad в виде выражений, формально зависящих от одной из переменных как от параметра (пример решения одного уравнения с тремя неизвестными был приведен ранее в последних двух строках листинга 5.3).
Решение системы двух нелинейных уравнений иллюстрирует листинг 5.7. Нахождение символьным процессором его обоих корней визуализируется на графике, приведенном на Рисунок 5.2. На нем каждое из уравнений показывается в виде зависимости у(х): первое — сплошной кривой, а второе — пунктиром. Поскольку первое уравнение является квадратичным, то оно определяет на плоскости XY параболу, и поскольку второе уравнение линейное, то оно соответствует на графике прямой линии. Очевидно, что две точки пересечения кривых соответствуют одновременному выполнению обоих уравнений, т. е. их координаты равны искомым действительным корням системы.
Локализация корней
5.2.4. Локализация корнейЧтобы решить задачу предварительной (грубой) локализации корней, в самых простых случаях можно использовать графическое представление f (х) (см. Рисунок 5.1, 5.2 и 5.4). Понятно, что в случае многомерных систем такой способ практически неприменим. Если требуется исследовать определенную область определения переменных уравнения на наличие корней, определив их примерное положение, то обычно применяют весьма расточительный способ, называемый сканированием. Оно состоит в последовательном поиске корня, начиная из множества пробных точек, покрывающих расчетную область.
Обычно (вне Mathcad) сканирование организуют следующим образом. Область определения функции разбивается на элементарные области (в случае функции двух переменных чаще всего прямоугольные, в случае трех переменных — кубические и т. д.). Из центра каждой элементарной области запускается численный метод поиска корня, и в случае выхода итераций за ее пределы расчеты прерываются, а в противном случае происходит нахождение корня. Гораздо менее надежной (но зато более экономной) альтернативой является простое вычисление и сравнение между собой невязок системы уравнений в центральных точках элементарных областей. На тех участках области определения, где норма невязки невелика, вероятность локализации корня больше, и именно из локальных минимумов нормы невязки можно запускать градиентный метод для уточнения корня.
Пример организации упрощенного варианта сканирования по одной переменной приведен на Рисунок 5.6. График функции, корни которой подлежат определению, показан в его верхней части. Затем осуществляется решение уравнения при помощи функции root, для нескольких последовательно расположенных узлов. Результат выдается в последней строке листинга в виде таблицы, из которой видно, что на рассматриваемом интервале уравнение имеет три корня.
Примечание 1
Примечание 1
Конечно, гарантии, что все существующие корни будут найдены, особенно в многомерных случаях, чаще всего нет. Всегда существует вероятность "просмотреть" корень, расположенный между узлами сканирования.
Решение уравнений при помощи меню
5.1.4. Решение уравнений при помощи менюАналитическое решение алгебраического уравнения можно получить и при помощи меню. Данный способ удобно применять, когда уравнение записано в форме математического выражения (зависящего, возможно, от различных переменных), и требуется вычислить аналитически значение одной переменной, при котором выражение обращается в ноль. Для этого:
1. Введите выражение.
2. Выделите переменную, относительно которой будет решаться уравнение, приравнивающее выражение нулю.
3. Выберите в меню Symbolics (Символика) пункт Variable/Solve (Переменная/Решить) (Рисунок 5.3).
Численное решение уравнений
5.2. Численное решение уравненийКак правило, отыскание корней алгебраического уравнения (или системы уравнений) численными методами связано с двумя задачами:
Последнее означает, что надо найти значения х0, при которых f(х0) отличается от нуля не более чем на TOL. Почти все встроенные функции системы Mathcad, предназначенные для решения нелинейных алгебраических уравнений (в том числе функция Find применительно к численному процессору) нацелены на решение второй задачи, т. е. предполагают, что корни уже приблизительно локализованы. Иными словами, перед тем, как непосредственно приступать к нахождению корней уравнения, необходимо (хотя бы приблизительно) представлять себе, где они находятся. Имея в виду данную оговорку, мы перейдем к рассмотрению второй из задач, а проблему предварительной локализации корней рассмотрим в конце данного раздела.
Диалоговое окно Advanced Options
Рисунок 5.10. Диалоговое окно Advanced Options
Во второй строке — Variable estimation (Аппроксимация переменных) — можно определить тип аппроксимации рядом Тейлора. Для рассмотренного нами в этом разделе случая аппроксимации касательной прямой линией выберите переключатель Tangent (Касательная), для более точной квадратичной аппроксимации (параболой) выберите Quadratic (Квадратичная). Следующая группа переключателей — Linear variable check (Проверка линейности) — позволяет в специфических задачах сэкономить время вычислений. Если вы уверены, что нелинейности всех функций, входящих в уравнение, мало сказываются на значениях всех их частных производных, то установите переключатель Yes (Да). В этом случае производные будут приняты равными константам и не будут вычисляться на каждом шаге.
ВНИМАНИЕ!
С осторожностью изменяйте параметры численных методов. Пользуйтесь ими, когда решение не находится при выставленных по умолчанию параметрах, или когда расчеты занимают очень продолжительное время.
Пара переключателей Multistart (Сканирование) задает опцию поиска глобального или локального минимума или максимума. Если выставлен переключатель Yes (Да), Mathcad будет пытаться найти наиболее глубокий экстремум из области, близкой к начальному приближению. Эта опция предназначена, в основном, для настройки (тех же самых градиентных) алгоритмов поиска экстремума, а не для решения алгебраических уравнений (см. главу 6).
Наконец, последний переключатель — Evolutionary (Эволюционный алгоритм), — если установить его в положение Yes (Да), позволяет использовать модификацию численного метода для решения уравнений, определяемых не обязательно гладкими функциями. Как мы убедились в этом разделе, все градиентные методы, реализованные в функции Find, требуют многократного вычисления производных. Если вы работаете с достаточно гладкими функциями, то градиентные методы обеспечивают быстрый и надежный поиск корня. Для поиска корня недостаточно гладких функций одной переменной следует либо выставить данную опцию функции Find, либо использовать метод секущих (функцию root). Помните, что правильный выбор численного метода и его параметров может помочь при решении нестандартной задачи, которая при стандартных установках может и не поддаваться решению.
Графическая иллюстрация решения кубического уравнения
Рисунок 5.4. Графическая иллюстрация решения кубического уравнения
Как уже отмечалось выше, результатом численного решения алгебраического уравнения является один его корень. Для того чтобы отыскать остальные корни, необходимо повторно решить уравнение, взяв для переменной х другие начальные значения. Например, если присвоить ей в начале листинга значение х=-1, то численным процессором будет выдан в качестве результата другой корень х=0 (листинг 5.9). Такая работа программы Mathcad связана с особенностями применяемых численных алгоритмов (см. разд. 5.3). Для численного определения всех корней уравнения следует применять специальные приемы, например, сканирование по неизвестным (см. разд. 5.2.4).
Графическая интерпретация решения
Рисунок 5.2. Графическая интерпретация решения системы двух уравнений (см. листинг 5.7)
График функции f (х) =3х3+2х27х
Рисунок 5.1. График функции f (х) =3х3+2х2-7х
В листинге 5.1 вы видите все три последовательные строки вычислительного блока. Первая строка представляет собой обязательное ключевое слово Given, следующая строка является, собственно, записью уравнения (5.3), а в последней строке листинга включается в работу встроенная функция Find. Обратите внимание, что после имени функции Find находится оператор символьного вывода, справа от которого (по истечении необходимого времени работы символьного процессора) возникает аналитический результат решения уравнения. Существенно, что он является точным решением (записанным в данном случае в трансцендентном виде), а получить числовые значения корней можно, поставив после него символ численного равенства (как это сделано в последней строке листинга 5.1).
Как видно из листинга 5.1, уравнение имеет три различных корня, которые представляются справа от функции соответствующим трехкомпонентным вектором. Таким образом, решение предлагается пользователю в форме матрицы размера 1хз (одна неизвестная переменная имеет три значения, каждое из которых обращает уравнение в тождество).
Пример, использованный в листинге 5.1, включает уравнение, записанное в традиционной форме равенства. Приведем решение того же самого уравнения, если оно представлено в несколько другой форме, подчеркивающей специфику задачи нахождения корней функции (листинг 5.2). Основное отличие листинга 5.2 от предыдущего связано с другой формой записи исследуемого уравнения через функцию пользователя f (x). Иными словами, подчеркивается специфика поставленной задачи отыскания нулевых значений некоторой функции.
Важно заметить, что точное решение уравнения (непосредственно после оператора символьного вывода результата работы функции Find) обращает f (х) в тождественный ноль, а пересчитанные числовые значения корней (после знака обычного равенства) обеспечивают лишь ее приближенное равенство нулю (разумеется, это связано с ошибками округления).
ВНИМАНИЕ!
Не забывайте о том, что вводить знаки равенства в уравнение в пределах вычислительного блока Given/Find следует при помощи панели Boolean (Булевы операторы).
График функции ln(ах2)=х (для а=3 и а=30)
Рисунок 5.11. График функции ln(ах2)=х (для а=3 и а=30)
Иллюстрация метода Ньютона
Рисунок 5.8. Иллюстрация метода Ньютона
Модификация алгоритма Ньютона для решения системы нескольких уравнений заключается в линеаризации соответствующих функций многих переменных, т. е. аппроксимации их линейной зависимостью с помощью частных производных.
Например, для нулевой итерации в случае системы двух уравнений используются выражения типа:
Чтобы отыскать точку, соответствующую каждой новой итерации, требуется приравнять оба равенства нулю, т. е. решить на каждом шаге полученную систему линейных уравнений.
Выбор градиентного алгоритма
Как уже отмечалось, Mathcad предлагает три различных варианта градиентных методов. Чтобы поменять численный метод:
1. Щелкните правой кнопкой мыши на названии функции Find.
2. Наведите указатель мыши на пункт Nonlinear (Нелинейный) в контекстном меню.
3. В появившемся подменю (Рисунок 5.9) выберите один из трех методов: Conjugate Gradient (Сопряженных градиентов), Quasi-Newton (квазиньютоновский) или Levenberg-Marquardt (Левенберга—Маркарда).
Иллюстрация метода секущих
Рисунок 5.7. Иллюстрация метода секущих
Результат, показанный на Рисунок 5.7, получен для погрешности вычислений, которой в целях иллюстративности предварительно присвоено значение TOL=0.5. Поэтому для поиска корня с такой невысокой точностью оказалось достаточно одной итерации. В вычислениях, приведенных в листингах 5.13— 5.15 (см. разд. 5.2.2), погрешность TOL=0.001была установлена по умолчанию, и решение, выданное численным методом, лежало намного ближе к истинному положению корня. Иными словами, чем меньше константа TOL, тем ближе к нулю будет значение f (х) в найденном корне, но тем больше времени будет затрачено вычислительным процессором Mathcad на его поиск.
Примечание 1
Примечание 1
Соответствующий пример можно найти на компакт-диске, а также в Быстрых шпаргалках. Он расположен в разделе "Solving Equations" (Решение уравнений) и называется "Effects of TOL on Solving Equations" (Влияние константы TOL на решение уравнений).
Если уравнение неразрешимо, то при попытке найти его корень будет выдано сообщение об ошибке. Кроме того, к ошибке или выдаче неправильного корня может привести и попытка применить метод секущих в области локального максимума или минимума f (х). В этом случае секущая может иметь направление, близкое к горизонтальному, выводя точку следующего приближения далеко от предполагаемого положения корня. Для решения таких уравнений лучше применять другую встроенную функцию Minerr (см. разд. 6.2). Аналогичные проблемы могут возникнуть, если начальное приближение выбрано слишком далеко от настоящего решения или f (х) имеет особенности типа бесконечности.
Аналитическое решение кубического уравнения
Листинг 5.1. Аналитическое решение кубического уравнения
Численное решение
Листинг 5.10. Численное решение системы алгебраических уравнений
Если предпринять попытку решить несовместную систему, в частности, в рассматриваемом примере добавить еще одно уравнение, то Mathcad выдаст сообщение об ошибке, гласящее, что ни одного решения не найдено, и предложение попробовать поменять начальные значения или значение погрешности.
Особую осторожность следует соблюдать при решении систем с числом неизвестных большим, чем число уравнений. Например, можно удалить одно из двух уравнений из рассмотренной нами задачи, попытавшись решить оставшееся единственное уравнение с двумя неизвестными х и у (листинг 5.11). В такой постановке задача имеет бесконечное множество корней: для любого х и, соответственно, у=х2-1 условие, определяющее единственное уравнение, выполнено. Однако даже если корней бесконечно много, численный метод будет производить расчеты только до тех пор, пока логические выражения в вычислительном блоке не будут выполнены (конечно, в пределах погрешности). После этого итерации будут остановлены и выдано решение. В результате будет найдена всего одна пара значений (х,у), обнаруженная первой, как это показано в последней строке листинга 5.11.
Примечание 6
Примечание 6
Для того чтобы найти все решения рассматриваемой задачи, можно обратиться к возможностям символьного процессора Mathcad. Достаточно в последней строке листинга заменить знак равенства на оператор символьного вывода, и в качестве ответа будет выдано семейство решений х и х2-1.
демонстрирующий численное
Листинг 5.10, демонстрирующий численное решение рассматриваемой системы, начинается с присвоения неизвестным начальных значений х=10,у=10. После этого следует ключевое слово Given и два логических оператора, выражающих рассматриваемую систему уравнений. В результате (последняя строка листинга) Mathcad находит один из корней х=1,у=0, причем первый элемент вектора решения есть первый аргумент функции Find, а второй элемент — ее второй аргумент. Поскольку решение производится численным методом, оно выдается с некоторой погрешностью, не превышающей встроенной константы CTOL. Если задать в первой строке листинга другие начальные значения, расположенные ближе к другому корню, например, х=0,у=0, то найден в итоге будет другой корень х=-0.5,у=-0.75.Примечание 4
Примечание 4
На самом деле в вычислительном блоке используются обе системные константы Mathcad, связанные с заданием погрешности: TOL и CTOL. Константа CTOL ограничивает невязку, т. е. задает точность выполнения уравнений, введенных после ключевого слова Given. Например, если CTOL=0.001, то уравнение х=10 будет считаться выполненным и при х=10.001, и при х=9.999. Другая константа TOL определяет условие прекращения итераций численным алгоритмом (см. разд. 5.4). Значение CTOL может быть задано пользователем так же, как и TOL, например, CTOL=0.01. По умолчанию принято, что CTOL= =TOL=0.001, но вы по желанию можете переопределить их.
Примечание 5
Примечание 5
Часто бывает очень полезным проверить точность решения уравнений "вручную", подставив найденные вычислительным процессором корни в исходные уравнения и оценив значение их невязок.
Численное решение
Листинг 5.11. Численное решение уравнения, имеющего бесконечное множество корней, приводит к одному из них
Системы уравнений и неравенств
Пока мы рассматривали примеры систем уравнений, число которых было таким же, как и число неизвестных, что встречается наиболее часто. Но число уравнений и неизвестных может и не совпадать. Более того, в вычислительный блок можно добавить дополнительные условия в виде неравенств. Например, введение ограничения на поиск только отрицательных значений х в рассмотренный выше листинг 5.10 приведет к нахождению другого решения, как это показано в листинге 5.12.
Обратите внимание, что, несмотря на те же начальные значения, что и в листинге 5.10, в листинге 5.12 мы получили другой корень системы уравнений. Это произошло именно благодаря введению дополнительного неравенства, которое определено в блоке Given в предпоследней строке листинга 5. 12.
Численное решение
Листинг 5.12. Численное решение системы алгебраических уравнений и неравенств
Два варианта уравнения методом секущих
Листинг 5.13. Два варианта уравнения методом секущих
Как вы можете убедиться (первая строка листинга 5.13), для решения уравнения при помощи функции root (f (x) ,x,a,b) не требуется задавать начального приближения, а достаточно указать интервал [а,b]. Поиск корня будет осуществлен в промежутке между а и b альтернативным численным методом (Риддера или Брента). Когда root имеет четыре аргумента, следует помнить о двух ее особенностях. Во-первых, внутри интервала не должно находиться более одного корня, иначе будет найден один из них, заранее неизвестно, какой именно. Во-вторых, значения f (а) и f (b) должны иметь разный знак, иначе будет выдано сообщение об ошибке.
В чем же отличие встроенной функции Find от функции root? Оно состоит в том, что для решения одних и тех же задач используются различные численные алгоритмы (градиентные и метод секущих соответственно). В примерах уравнений с одним неизвестным, которые мы рассматривали до сего момента, выбор метода не влиял на окончательный результат, поскольку фигурировавшие в них функции были "хорошими", т. е. достаточно гладкими для поиска корня одним из градиентных методов, требующих, как известно, вычисления производных. Между тем бывают ситуации, когда применение того или иного метода имеет решающее значение.
Приведем пример простой функции f(x), корни которой удается отыскать только при помощи функции root (листинг 5.14). Она определена в первой строке этого листинга, а ее корень вычислен во второй строке. Из графика, представленного на Рисунок 5.5, видно, что f (х) имеет особенность в окрестности своего корня, являясь в ней разрывной. В завершающей части листинга 5.14 предпринимается попытка отыскать нулевое значение f (х) посредством вычислительного блока Given/Find, которая оказывается неудачной.
Пример уравнения
Листинг 5.14. Пример уравнения, которое удается решить только методом секущих
Поиск корней уравнения
Листинг 5.15. Поиск корней уравнения, зависящего от двух переменных
Вычисление корней полинома
Листинг 5.16. Вычисление корней полинома
Обратим внимание на результат применения функции polyroots, заметив, что численный метод вместо двух из трех действительных единичных корней (иными словами, кратного корня 1) выдает два мнимых числа. Однако малая мнимая часть этих корней находится в пределах погрешности, определяемой константой TOL, и не должна вводить пользователей в заблуждение. Просто нужно помнить, что корни полинома могут быть комплексными, и ошибка вычислений может сказываться как на действительной, так и на комплексной части искомого корня.
Для функции polyroots можно выбрать один из двух численных методов — метод полиномов Лаггера (он установлен по умолчанию) или метод парной матрицы.
Для смены метода:
1. Вызовите контекстное меню, щелкнув правой кнопкой мыши на слове polyroots.
2. В верхней части контекстного меню выберите либо пункт LaGuerre (Лаггера), либо Companion Matrix (Парная матрица).
3. Щелкните правой кнопкой мыши вне действия функции polyroots — если включен режим автоматических вычислений, будет произведен пересчет корней полинома в соответствии с вновь выбранным методом.
Для того чтобы оставить за Mathcad выбор метода решения, установите флажок AutoSelect (Автоматический выбор), выбрав одноименный пункт в том же самом контекстном меню.
Попытка отыскания
Листинг 5.17.Попытка отыскания зависимости x(a) решения уравнения ln(ax2)=x
Поиск зависимости
Листинг 5.18. Поиск зависимости x(a) решения уравнения ln(ax2)=x методом продолжения
Аналитический поиск нулей функции f(x)
Листинг 5.2. Аналитический поиск нулей функции f(x)
В заключение разговора о символьном решении уравнений с одним неизвестным приведем еще два показательных примера, связанных с нахождением нулей функции нескольких аргументов (т. е. зависящих, помимо, собственно, неизвестного, еще и от дополнительных параметров).
демонстрирует как
Листинг 5.3 демонстрирует, как выглядит решение уравнения, включающего четыре различные переменные, по некоторым из этих переменных. Обратите внимание на последний из трех приведенных в листинге 5.3 примеров, иллюстрирующий результат решения уравнения относительно сразу всех входящих в него параметров.Помните, что для корректной работы символьного процессора вовсе не обязательно задавать конкретные значения переменных, входящих в уравнение, а если такие значения (для некоторых, либо всех, параметров) определены, то это учитывается при выводе результата (что иллюстрируется листингом 5.4).
Символьное решение
Листинг 5.3. Символьное решение уравнения относительно разных переменных
Символьное решение
Листинг 5.4.Символьное решение уравнения, зависящего от параметров, в случае предварительного задания их числовых значений
Если решить уравнение аналитически не удается, то результатом применения оператора символьного вывода после функции Find будет либо тривиальное выражение типа Find(x)->
x (как в листинге 5.5), либо сообщение об ошибке "No symbolic result was found" (Ни один символьный результат не найден). Следует помнить, что символьный процессор Mathcad "умеет" находить не только действительные, но и комплексные корни уравнений. В качестве примера приведем листинг 5.6 с решением кубического уравнения, имеющего три очевидных корня — одного действительного (равного нулю) и двух чисто мнимых (±i, где i — мнимая единица).
Решить уравнение аналитически не удается
Листинг 5.5. Решить уравнение аналитически не удается
Символьное решение
Листинг 5.6. Символьное решение уравнения, имеющего и действительные, и мнимые корни="10.gif" >
Символьное решение системы двух уравнений
Листинг 5.7. Символьное решение системы двух уравнений
Численное решение
Листинг 5.8. Численное решение кубического уравнения с начальным значением x=1
Численное решение
Листинг 5.9. Численное решение кубического уравнения с начальным значением x=-1 сходится к другому корню x=0
Системы уравнений
Приведем еще один пример численного решения алгебраических уравнений, обратившись на этот раз к системе двух уравнений, которая также уже исследовалась нами при помощи символьного процессора. Система имеет два решения, показанные графически на Рисунок 5.2 и найденные аналитически в листинге 5.7 (см. разд 5.1.3).
Модельная функция f (х) (продолжение листинга 5 14)
Рисунок 5.5. Модельная функция f (х) (продолжение листинга 5.14)
Остается добавить, что f (х) может быть функцией не только х, а любого количества аргументов. Именно поэтому в самой функции root необходимо определить, относительно какого из аргументов следует решить уравнение. Эта возможность проиллюстрирована листингом 5.15 на примере функции двух переменных f (x,y)=x2-y2+1. В нем сначала решается уравнение f (х, 0) =0 относительно переменной х, а потом — другое уравнение f (0, у) =0 относительно переменной у, причем, благодаря удачному подбору начальных значений, вычисляются все корни данного квадратичного уравнения.
Таким образом, в обоих случаях один из аргументов функции f (х) воспринимается как неизвестное, а другой — как параметр. Не забывайте при численном решении уравнений относительно одной из переменных предварительно определить значения остальных переменных. Иначе попытка вычислить уравнения приведет к появлению ошибки "This variable or function is not defined above", в данном случае говорящей о том, что другая переменная ранее не определена.
Примечание 1
Примечание 1
Для того чтобы отыскать зависимость корней уравнения, вычисленных по одной переменной, от других переменных, разработаны специальные эффективные алгоритмы. Об одной из возможностей читайте в разд. 5.3.3.
Нелинейные алгебраические уравнения
Нелинейные алгебраические уравненияОгромное количество задач вычислительной математики связано с решением нелинейных алгебраических уравнений, а также систем таких уравнений. При этом необходимость решения нелинейных уравнений возникает зачастую на промежуточных шагах, при реализации фрагментов более сложных алгоритмов (к примеру, при расчетах дифференциальных уравнений при помощи разностных схем и т. п.).
Постановка задач выглядит следующим образом. Пусть имеется либо одно алгебраическое уравнение с неизвестным х: f(x)=0, (где f(х) — некоторая функция), либо система из N алгебраических уравнений:
Требуется найти корни, т. е. все значения х (или, в случае системы все м-покомпонентные векторы х), которые переводят уравнение (или, соответственно, систему уравнений) в верное равенство (равенства).
Примечание 1
Примечание 1
Решение систем линейных уравнений, у которых все функции имеют вид fi (х)=аi1х1+аi2х2+. . . +ainxN, представляет собой отдельную задачу вычислительной линейной алгебры. Она рассматривается в главе 8.
О численных методах
5.3. О численных методахУделим теперь небольшое внимание численным алгоритмам, которые используются в работе встроенных функций Find и root, чтобы читатель имел возможность применять их для решения алгебраических уравнений более осмысленно.
Поиск зависимости х (а) решения
Рисунок 5.13. Поиск зависимости х (а) решения уравнения ln(ах2) =х методом продолжения (продолжение листинга 5.18)
Результаты вычислений, приведенные в виде двух графиков на Рисунок 5.13, разительно отличаются от предыдущего. Как видно, столь малое изменение идеологии применения численного метода привело к определению непрерывного семейства корней. Отметим, что получить результат Рисунок 5.12 (без продолжения по параметру) в терминах введенной нами в листинге 5.18 функции f(x0,a) можно, изменив ее первый аргумент на константу: f (1,ai).
Примечание 1
Примечание 1
С помощью метода продолжения можно решать и соответствующие задачи оптимизации, зависящие от параметра. Идеология в этом случае остается точно такой же, но вместо функций решения нелинейных уравнений root или Find вам следует применить одну из функций поиска экстремума Minerr, Maximize или Minimize (СМ. разд. 6.1 и 6.2).
Мы привели основную идею и один из возможных способов реализации метода продолжения по параметру. Безусловно, вы можете предложить иные, как математические, так и программистские решения этой проблемы. В частности, для выбора очередного начального приближения к корню можно использовать результат экстраполяции уже найденной зависимости х (а), придумать более сложные алгоритмы для ветвящихся семейств решений и т.д.
Попытка отыскания зависимости
Рисунок 5.12. Попытка отыскания зависимости х (а) решения уравнения ln(ах2)=х (продолжение листинга 5.17)
Решим данное уравнение методом секущих, применяя для этого встроенную функцию root. Самый простой, но далеко не лучший, способ иллюстрируется листингом 5.17. Начинается листинг с вывода графика функции ln(ах2)=х, корни которой нам предстоит исследовать (ради определенности, для положительных значений х). Глядя на график, сразу можно сказать, что на рассматриваемом интервале уравнение будет иметь два решения (для каждого значения параметра а, больших некоторого порогового значения, ниже которого, видимо, уравнение вовсе не имеет корня).
Для того чтобы получить зависимость решения уравнения от параметра а, в следующих строках листинга создается ранжированная переменная i, с помощью которой определяется вектор значений параметра ai. Его элементы пробегают значения от 3 до 33 с шагом 1(эти числа взяты ради примера, вы можете поэкспериментировать с другими значениями и убедиться в том, что для значений параметра ниже порога а=3 решение уравнения отсутствует).
Последняя строка листинга присваивает элементам еще одного вектора у вычисленные с помощью функции root значения корней уравнения для каждого ai. Но для того чтобы функция root заработала, необходимо предварительно задать начальное приближение к решению, что сделано в предыдущей строке. Ключевой момент метода, примененного в листинге 5.17, заключается в том, что одно и то же начальное значение х=1 использовано для решения уравнения при всех ai.
Результат расчетов yi показан на Рисунок 5.12. Обратите внимание, что по мере увеличения а кривая корней уравнения сначала плавно идет по одному (нижнему) семейству решений, а потом (в районе а=и) явно срывается, "перепрыгивая" на другое семейство. С вычислительной точки зрения такая ситуация чаще всего крайне неблагоприятна, поскольку хотелось бы отыскать непрерывное семейство решений. Скачки зависимости у (а) могут вводить пользователя в заблуждение, вовсе скрывая от него существование нижнего семейства решений при а>п.
Почему же происходят эти скачки с одного семейства решений на другое? Конечно, причина кроется в выборе начального значения для вычисления каждого из корней. Линия начальных значений х=1 обозначена на графике функции (Рисунок 5.11) в виде пунктирной вертикальной прямой. Для а0=3, и вообще для нескольких первых а0 начальное значение х=1 находится ближе всего к нижнему семейству решений. Поэтому неудивительно, что численный метод находит именно эти корни. В правой части графика к линии начальных значений ближе второе (верхнее) семейство решений, к ним-то и приводит численный метод.
Приведенные соображения диктуют очень простой рецепт избавления от скачков и нахождения одного из семейств непрерывных решений. Для этого требуется при поиске каждого (i+1)-го корня взять начальное значение, по возможности близкое к отыскиваемому семейству. Неплохим вариантом будет выбор приближения в виде предыдущего 1-го корня, который был найден для прошлого значения параметра а0 Возможный вариант воплощения этого метода, называемого продолжением по параметру, Приведен в листинге 5.18. В нем функция root применена внутри функции пользователя f(x0,a), определенной в самом начале листинга с помощью средств программирования. Назначение функции f (х0,а) заключается в том, что она выдает значение корня для заданного значения параметра а и начального приближения к решению хо. В остальном смысл листинга повторяет предыдущий, за исключением того, что осуществляется поиск сразу обоих семейств решений у и z, причем для каждого сначала явно задается начальное значение только для точки а0. Для всех последующих точек, как следует из последней строки листинга, взято начальное значение, равное предыдущему корню.
Символьное решение уравнений
5.1. Символьное решение уравненийОтносительно небольшое количество задач отыскания корней алгебраических уравнений можно решить аналитически, а на практике почти всегда приходится искать решение при помощи численных методов. Тем не менее мы начнем знакомство с принципами решения алгебраических уравнений в Mathcad именно с описания использования символьного процессора, что позволит, с одной стороны, освоить соответствующий инструментарий Mathcad, а с другой — лучше понять специфику исследуемых задач.
Символьное решение уравнения
Рисунок 5.3. Символьное решение уравнения
В итоге после выражения появится строка с результатом решения уравнения (т. е. значениями переменной, которые обращают исходное выражение в ноль). Следует иметь в виду, что решение уравнения производится именно по той переменной, которую пользователь выделяет перед вводом команды меню. Разумеется, если выделять различные переменные, то в итоге будут выдаваться совершенно разные решения.
ВНИМАНИЕ!
Помните о том, что символьные вычисления, проводимые при помощи меню, не являются "живыми", т. е. не будут меняться впоследствии, если вы будете редактировать исходное выражение.
Сканирование по переменной х
Рисунок 5.6. Сканирование по переменной х
Выбор численного алгоритма
Рисунок 5.9. Выбор численного алгоритма
Чтобы вернуть автоматический выбор типа численного метода, в контекстном меню надо выбрать пункт AutoSelect (Автоматический выбор). Если установлена опция автоматического выбора (о чем говорит флажок, установленный в пункте AutoSelect), то текущий тип численного метода можно узнать, вызвав то же самое подменю и посмотрев, который из них отмечен точкой. Два последних метода являются квази-ньютоновскими, основная идея которых была рассмотрена выше. Первый из них, метод сопряженных градиентов, является двухшаговым — для поиска очередной итерации он использует как текущую, так и предыдущую итерации. Алгоритм Левенберга подробно описан в справочной системе Mathcad, а подробную информацию о методах Ньютона и сопряженных градиентов можно найти в большинстве книг по численным методам.
Параметры градиентных алгоритмов
Помимо выбора самих методов имеется возможность устанавливать их некоторые параметры. Для этого нужно вызвать с помощью того же контекстного меню диалоговое окно Advanced Options (Дополнительные параметры), выбрав в контекстном меню пункты Nonlinear / Advanced options (Нелинейный / Дополнительные параметры). В этом диалоговом окне (Рисунок 5.10) имеется пять групп переключателей по два в каждой.
В первой строке — Derivative estimation (Аппроксимация производной) — определяется метод вычисления производной Forward (Вперед) или Central (Центральная). Они соответствуют аппроксимации производной либо правой (двухточечная схема "вперед"), либо центральной (трехточечная симметричная схема) конечной разностью.
Примечание 1
Примечание 1
Обратите внимание, что вычисление производной в градиентных численных методах решения уравнений производится более экономичным способом, нежели при численном дифференцировании (см. главу 3).
Математические задачи в пакете MathCAD 12
Локальный экстремум
6.1.1. Локальный экстремумДля поиска локальных экстремумов имеются две встроенные функции, которые могут применяться как в пределах вычислительного блока, так и автономно:
Примечание 1
Примечание 1
Вычислительный блок (ключевое слово Given со следующими после него логическими выражениями) обычно используется в задачах на условный экстремум (см. следующий разд.).
В качестве примера рассмотрим задачу численного поиска экстремумов полинома четвертой степени f (х), график которого был приведен на Рисунок 6.1. Как известно, парабола четвертой степени имеет три точки экстремума, и все они видны на Рисунок 6.1.
Всем аргументам функции f предварительно следует присвоить некоторые значения, причем для тех переменных, по которым производится минимизация, они будут восприниматься как начальные приближения. Примеры вычисления локальных экстремумов функции одной переменной показаны в листингах 6.1—6.2. Поскольку никаких дополнительных условий в них не вводится, поиск экстремумов выполняется для любых значений х от -oo до oo.
О постановке некорректных задач
6.3.1. О постановке некорректных задачРассмотрим сначала типичную постановку обратных задач, а затем обратимся к обсуждению корректности их постановки.
Обратные задачи
Строго говоря, обратные задачи связаны, как правило, не с отысканием значения корня уравнения (или системы) f (x)=o, а с вычислением неизвестной функции у (х), описываемой уравнением
S[y(x)]=b(x). (6.1)
Здесь A[у] — некоторый функционал (т. е. функция от функции), а b(х) — известная функция (правая часть уравнения).
Рассмотрим типичную постановку обратных задач на примере так называемой инструментальной задачи. Пусть имеется некоторый сигнал у(х), который подвергается измерению на приборе, условно обозначаемом S. Физику-исследователю доступно измерение данного сигнала, которое находится на выходе прибора (дисплее, табло и т.п.). Обозначим это измерение b(х). Поскольку прибор вносит в сигнал, во-первых, искажения (например, в устройствах типа спектрометров часто измеряются некоторые интегральные характеристики сигнала) и, во-вторых, шумовую компоненту. Формально данную физическую модель можно записать равенством (6.1), в котором оператором s обозначается аппаратная функция, т. е. действие прибора на сигнал у (х).
Квазирешение
6.3.2. КвазирешениеОдним из наиболее простых методов решения некорректных обратных задач является концепция поиска их квазирешения. Рассмотрим обратную задачу AY=B, где неизвестный вектор Y подлежит определению, а оператор (в линейном случае, матрица) А и вектор правых частей уравнений в известны. Подчеркнем, что задача может быть и нелинейной, т. е. оператор А может описывать сложную зависимость.
Основная идея квазирешения состоит в параметризации неизвестного вектора Y, исходя из физических соображений постановки задачи. То есть на основе некоторой имеющейся априорной информации следует заранее задать модельный вид Y~Y0, зависящий от ряда параметров r1,r2,... В результате пространство поиска решений значительно сужается — вместо отыскания всех компонент вектора Y требуется лишь найти значения модельных параметров, решающих (в определенном смысле) задачу.
Квазирешение Y0 находится из решения задачи на минимум:
r=arg min{ IA-YO (r)-B| }, (6.4)
где минимизация проводится по вектору S параметров модельной зависимости Y0 (r). Следует подчеркнуть, что задача поиска квазирешения является задачей на глобальный экстремум, что важно с позиций выбора вычислительного метода (как уже отмечалось, наиболее популярны градиентные методы поиска минимума в комбинации со сканированием для достижения глобальной минимизации — алгоритмами сплошного или случайного поиска).
Пример отыскания квазирешения обсуждавшейся в предыдущих разделах задачи приведен в листинге 6.15 и на Рисунок 6.9 (данные о результатах модельных измерений в и матрице А взяты из предыдущего листинга). Понятно, что при сведении некорректной задачи к проблеме отыскания квазирешения решающее значение принадлежит правильно выбранной параметризации неизвестного вектора у.
Условный экстремум
6.1.2. Условный экстремумВ задачах на условный экстремум встроенные функции минимизации и максимизации должны быть включены в вычислительный блок, т. е. им должно предшествовать ключевое слово Given. В промежутке между Given и функцией поиска экстремума с помощью булевых операторов записываются логические выражения (неравенства, уравнения), задающие ограничения на значения аргументов минимизируемой функции.
Экстремум функции нескольких переменных
6.1.3. Экстремум функции нескольких переменныхВычисление экстремума функции многих переменных не несет принципиальных особенностей по сравнению с функциями одной переменной. Поэтому ограничимся примером нахождения максимума и минимума функции, показанной в виде графиков трехмерной поверхности и линий уровня (листинг 6.5). Привлечем внимание читателя только к тому, как с помощью неравенств, введенных логическими операторами, задается область на плоскости (X,Y).
Регуляризация Тихонова
6.3.3. Регуляризация ТихоноваГоворя о некорректных задачах, нельзя не отметить, что для их решения советским математиком Тихоновым был предложен чрезвычайно эффективный метод, называемый регуляризацией и основанный на привлечении дополнительной априорной информации о решении, которая может быть как качественной, так и количественной. Например, можно искать решение, максимально близкое к некоторому профилю, т. е. к некоторому вектору Y0. Концепция регуляризации сводится к замене исходной некорректной задачи на задачу о минимизации следующей функции:
?(Y,?) = |АY-B|+?|Y-Y0|, (6.5)
где ? — малый положительный параметр регуляризации, который необходимо подобрать определенным способом. Отметим, что, если рассматривать не дискретную, а непрерывную задачу (т. е. профиль у(х) вместо вектора Y), то ?(у(х),?) будет представлять собой не функцию, а функционал, исторически называемый функционалом Тихонова.
Минимизируя функцию ?(Y,?), можно получить регуляризованное решение Y (А), зависящее от параметра ?. Из (6.5) хорошо ясен его смысл: при малых ? ~ 0 проблема поиска функционала близка к (некорректной) исходной задаче, а при больших А, задача поставлена корректно, но ее решение далеко от решения исходной обратной задачи. А именно, чем больше параметр регуляризации, тем ближе решение к априорной оценке Y0. Очевидно, что на практике необходимо выбирать промежуточные ?.. Можно показать, что в линейном случае задача о минимизации функционала ?(Y,?) может быть сведена к следующей системе линейных алгебраических уравнений (решению линейных систем посвящена глава 8):
(ATA+?I)Y=ATB+?Y0. (6.6)
Примечание 1
Примечание 1
В общем (нелинейном) случае минимизация ?(Y,?) должна производиться по всем компонентам вектора Y, что представляет собой довольно громоздкую вычислительную задачу. Как уже отмечалось, поиск глобального экстремума осложняется не только благодаря многомерности задачи, но и из-за возможности существования нескольких локальных минимумов.
Пример линейное программирование
6.1.4. Пример: линейное программированиеЗадачи поиска условного экстремума функции многих переменных часто встречаются в экономических расчетах для минимизации издержек, финансовых рисков, максимизации прибыли и т. п. Целый класс экономических задач оптимизации описывается системами линейных уравнений и неравенств. Они называются задачами линейного программирования. Приведем характерный пример так называемой транспортной задачи, которая решает одну из проблем оптимальной организации доставки товара потребителям с точки зрения экономии транспортных средств (листинг 6.6).
Аналитическое решение задач на экстремум
6.1.5. Аналитическое решение задач на экстремумНесмотря на то, что, как уже говорилось, разработчиками Mathcad символьное решение задач оптимизации не предусмотрено, пользователь все-таки имеет возможность аналитического исследования экстремумов функций, опираясь на базовые сведения математического анализа. Следует лишь вспомнить о том, что (при выполнении соответствующих условий на непрерывность и гладкость функции) точки экстремума f(x) характеризуются тем, что в них производная этой функции проходит через нулевое значение. Тип экстремума (максимум или минимум) определяется знаком второй производной в этой точке.
Таким образом, имея в виду данные правила, не представляет особого труда организовать аналитическое решение задачи на экстремум, центральным моментом которого будет решение алгебраического уравнения f (x)=0. Сразу стоит подчеркнуть, что можно использовать гибрид символьных и аналитических расчетов, когда, например, производная f (x) считается аналитически, а уравнение f (x)=0 (если символьное решение получить не удается) — численно. В этом случае во всей красе может проявиться мощь Mathcad, предоставляющего пользователю богатый арсенал как аналитических, так и численных методов.
Приведем несложный пример реализации аналитического поиска экстремумов той же функции (полинома 4-й степени), которая использовалась нами при демонстрации возможностей численных методов (см. разд. 6.1.1). В листинге 6.7, в первой строке, приводится определение f(x), а затем при помощи символьного процессора осуществляется отыскание корней нелинейного уравнения f (x)=0. Результатом решения являются все три точки экстремума (последняя строка листинга). На Рисунок 6.4 показан график функций f (х) и f (x), и легко убедиться, что экстремумам исходной функции соответствуют нули ее производной.
Функция f (x) и ее производная (продолжение листинга 6 7)
Рисунок 6.4. Функция f (x) и ее производная (продолжение листинга 6.7)
Иллюстрация задачи на условный
Рисунок 6.3. Иллюстрация задачи на условный экстремум функции двух переменных: график функции f (х, у) и отрезок прямой х+у=10 (продолжение листинга 6.5)
Исходный сигнал и показания прибора
Рисунок 6.6. Исходный сигнал и показания прибора (продолжение листинга 6.13)
Согласно изложенной модели, измерения b(х) могут довольно сильно отличаться от исходного сигнала у(х), что иллюстрируется простым примером листинга 6.13 и Рисунок 6.6. В первой строке листинга выбирается модельный сигнал у(х), а во второй и третьей — определяется оператор S[y(x)]. Важно отметить, что использованная структура оператора — интегральная зависимость от сигнала у (х) в сумме с шумовой компонентой — наиболее типична для инструментальных обратных задач. Читателю будет очень полезно "поиграть" с параметрами задачи k и сигма (эффективной шириной спектральной характеристики прибора и интенсивностью шума соответственно), чтобы "почувствовать" специфику модели измерений. Несколько примеров расчетов b(х), согласно листингу 6.13, приведено на Рисунок 6.7 в виде коллажа нескольких графиков.
Исходный сигнал и попытка его
Рисунок 6.8. Исходный сигнал и попытка его реконструкции А-1В (продолжение листингов 6.13 и 6.14) для ?=10-5
Примечание 3
Примечание 3
Проблемы, возникающие при попытке обращения матрицы А, связаны с ее плохой обусловленностью. Подход к подобным задачам может быть не обязательно таким, как рассказывается в двух следующих разделах (см. главу 8).
Исходный сигнал У измерения В
Рисунок 6.9. Исходный сигнал У, измерения В и квазирешение Y0 (продолжение листинга 6.15)
Исходный сигнал Y его априорная
Рисунок 6.10. Исходный сигнал Y, его априорная оценка 0 и измерения В (продолжение листинга 6.16)
Приведем в качестве примера применения регуляризации (листинг 6.16) решение некорректной линейной задачи интерпретации измерений, которая решалась нами ранее другими способами в листингах 6.13—6.15. В качестве модельного сигнала будем использовать квадратичную параболу, а в качестве априорной оценки — линейный профиль Y0 (Рисунок 6.10). Сделаем мы это для того, чтобы соблюсти честность, пытаясь подогнать регуляризованное решение не к исходной (вообще говоря, неизвестной) модели, а к иной зависимости. В результате решения (в последней строке листинга) системы линейных уравнений (6.6), зависящей от А. как от параметра, получается зависимость регуляризованного решения (вектора Y) от X. Соответствующая невязка системы уравнений ?(?) = |AY(?)-B|, также являющаяся функцией X, показана на Рисунок 6.11.
Исходный сигнал Y и его регуляризованная
Рисунок 6.12. Исходный сигнал Y и его регуляризованная реконструкция (продолжение листинга 6.17)
К пояснению задач поиска локального и глобального экстремума
Рисунок 6.1. К пояснению задач поиска локального и глобального экстремума
Общая проблема поиска экстремума функции включает в себя задачи нахождения локального и глобального минимума. Последние называют еще задачами оптимизации, и решить их, как правило, намного труднее, поскольку они подразумевают локализацию всех минимумов f (х) и выбор из них наименьшего. (На Рисунок 6.1 показаны два локальных минимума функции, из которых левый является глобальным.) Ограничения значений аргументов, задающих область определения f (х), как и прочие дополнительные условия, могут быть определены в виде системы неравенств и (или) уравнений. В таком случае говорят о задаче на условный экстремум.
Численные методы, применяемые для минимизации, сходны с методами решения нелинейных уравнений, и поэтому материал этой главы близок по содержанию к предыдущей.
Примечание 1
Примечание 1
Решение задач минимизации в Mathcad реализовано только при помощи численного алгоритма. Таким образом, непосредственное символьное нахождение минимума невозможно. Однако аналитический поиск экстремума функции несложно запрограммировать, опираясь на соответствующие сведения математического анализа (см. разд. 6.1.5).
Поиск минимума функции
Листинг 6.1. Поиск минимума функции одной переменной (для трех начальных значений x)
Приближенное решение уравнения
Листинг 6.10. Приближенное решение уравнения x2+y2+1=0
Приближенное решение
Листинг 6.11. Приближенное решение несовместной системы уравнений и неравенств="23.gif" >
Внимательный читатель может обнаружить, что решение, выдаваемое функцией Minerr в рассматриваемом примере, не является единственным, поскольку множество пар значений (х,у) в равной степени минимизирует невязку данной системы уравнений и неравенств. Поэтому для различных начальных значений будут получаться разные решения, подобно тому, как разные решения выдаются функцией Find в случае бесконечного множества корней (см. разд. 5.2.4). Еще более опасен случай, когда имеются всего несколько локальных минимумов функции невязки. Тогда неудачно выбранное начальное приближение приведет к выдаче именно этого локального минимума, несмотря на то, что другой (глобальный) минимум невязки может удовлетворять системе гораздо лучше.
В завершение раздела сделаем очень важное замечание, связанное с возможностью использования встроенной функции Minerr в символьных расчетах. Как и функция решения алгебраических систем Find, она может применяться без предварительного присвоения каких-либо начальных значений любым переменным, входящим в уравнение, как это проиллюстрировано листингом 6.12, решающим ту же самую задачу аналитически. Замечательно, что в результате получается не одно решение, а все семейство решений, одинаково минимизирующее невязку.
Аналитическое приближенное
Листинг 6.12. Аналитическое приближенное решение уравнения kx2+y2+1=0
Пример моделирования
Листинг 6.13. Пример моделирования прямой задачи, выражающей линейную схему измерений
Дискретная форма
Листинг 6.14. Дискретная форма прямой задачи линейной модели измерений (продолжение листинга 6.13)
Некорректные задачи
При решении обратных задач важную роль играет их устойчивость. Задача устойчива, если малым флуктуациям правых частей, т. е. вектора в, соответствуют малые флуктуации решения Y. Иными словами, устойчивость по правой части состоит в требовании, чтобы решения близких задач AY=B и AY=B+?B мало отличались друг от друга. Если задача изначально является неустойчивой, то решать ее нет смысла, поскольку погрешности алгоритмов, накапливающиеся в ходе решения численными методами, неизбежно приведут к тому, что будет найдено неверное решение.
Как правило (в том числе в нашем примере), обратные задачи характеризуются наличием шумов, что может быть символически отражено равенством (если опять-таки предположить, что шум ст входит в схему измерений линейно):
AY+?=B. (6.3)
Наличие шума коренным образом меняет идеологию решения обратных задач. Если сама задача является устойчивой, то существование шума может эту устойчивость нарушать. Попросту говоря, различные (даже очень сильно отличающиеся) сигналы Y1 и Y2 могут, будучи искажены шумом, приводить к очень похожим измерениям В1~B2. Поэтому встает вопрос, можно ли извлечь из измерений полезную информацию о сигнале, если наличие шума делает задачу неустойчивой? Такие задачи называются задачами, поставленными некорректно, и для их решения развиты специальные методы, основанные на привлечении дополнительной априорной информации о решении Y, которые будут рассмотрены ниже. Следует также отметить, что класс некорректных задач шире класса обратных (один из примеров вы найдете в конце разд. 11.1.2).
Сказанное иллюстрирует Рисунок 6.8, на котором представлена попытка решения задачи листингов 6.13 и 6.14 "в лоб", прямым обращением матрицы А. Реконструкция сигнала путем простого обращения матрицы А оказывается возможной лишь для очень низких значений уровня шума а, а при увеличении шума решение Y=A-1B оказывается совершенно нефизическим. Очевидно, что для получения осмысленного результата следует применять иные методы.
Квазирешение некорректной
Листинг 6.15. Квазирешение некорректной задачи (продолжение листингов 6.13 и 6.14)
Регуляризация некорректной линейной задачи
Листинг 6.16. Регуляризация некорректной линейной задачи
Квазиоптимальный
Листинг 6.17. Квазиоптимальный выбор параметра регуляризации (продолжение листинга 6.16)
Поиск максимума функции одной переменной
Листинг 6.2. Поиск максимума функции одной переменной
Как видно из листингов, существенное влияние на результат оказывает выбор начального приближения, в зависимости от чего в качестве ответа выдаются различные локальные экстремумы. Очень полезно сопоставить результаты минимизации (листинг 6.1) с графиком функции f(x) (см. Рисунок 6.1). Как видно, функция Minimize очень уверенно находит глубокий минимум х=-0.75. А вот на второй (плохо выраженный) минимум можно набрести лишь случайно, выбирая определенные начальные значения х. В последнем из трех примеров демонстрируется, что если взять начальное приближение х даже в непосредственной близости от этого локального минимума, численный метод все равно "сваливается" в первый, более глубокий минимум f(х). Попробуйте повторить расчеты, выбирая различные начальные значения, чтобы в этом убедиться.
В листинге 6.2 показаны аналогичные свойства функции Maximize. Если начальное приближение выбрать удачно, то итерационный процесс алгоритма сойдется к максимуму функции, а вот если выбрать его вдали от него, на участке f (х), где неограниченно возрастает (при х->
±oo), численный метод вообще не справится с задачей, выдавая сообщение об ошибке. Это происходит, поскольку начальное приближение х=-10 выбрано далеко от области локального максимума, и поиск решения уходит в сторону увеличения f (х), т. е. расходится при х->
oo.
Примечание 2
Примечание 2
Помните о возможности выбора численного алгоритма минимизации, который осуществляется при помощи контекстного меню (Рисунок 6.2). Не забывайте также, что, начиная с версии Mathcad 11, имеется возможность управлять параметром Multistart (Сканирование), при помощи которого можно попытаться организовать поиск глобального экстремума (см. разд. 5.3.2). Однако не слишком полагайтесь на эту опцию и, если перед вами стоит задача поиска глобального экстремума, постарайтесь организовать сканирование вручную.
Поиск условного минимума
Листинг 6.3. Поиск условного минимума
Поиск условного максимума
Листинг 6.4. Поиск условного максимума
Как видно из листинга 6.3, если ограничить значения х интервалом, расположенным в окрестности правого локального максимума, с поиском которого мы встретили большие сложности при решении задачи на безусловный экстремум, то этот максимум будет без труда найден численным методом. Следует помнить также об одной особенности, иллюстрируемой листингом 6.4. А именно (в случае максимизации), если на границе интервала f (x) достигает большего значения, нежели на локальном максимуме внутри интервала, то в качестве решения, скорее всего, будет выдано наибольшее значение (т. е. граница интервала).
Конечно, если на рассматриваемом интервале х расположено несколько локальных максимумов, ответ станет еще менее предсказуемым, поскольку будет напрямую зависеть от выбранного начального приближения. Не забывайте о важности его правильного выбора и в случае задач на условный экстремум. В частности, если вместо начального значения х=-1 задать х=1, то в качестве максимума будет найдена правая граница интервала: Maximize (f,x) =2, что неверно, поскольку максимальное значение достигается функцией f (х) на левой границе интервала при х=-3. Выбор начального приближения х=-4 решает задачу правильно, выдавая в качестве результата Maximize(f,x)=-5.
Экстремум функции двух переменных
Листинг 6.5. Экстремум функции двух переменных
Дополнительные условия могут быть заданы и равенствами. Например, определение после ключевого слова Given уравнения х+у=10 приводит к такому решению задачи на условный экстремум:
Как нетрудно сообразить, новое дополнительное условие означает, что численный метод ищет минимальное значение функции f(x,y) не во всей прямоугольной области (х, Y) , а лишь вдоль отрезка прямой, показанного на Рисунок 6.3.
Примечание 1
Примечание 1
Поиск минимума можно организовать и с помощью функции Minerr. Для этого в листинге 6.5 надо поменять имя функции Minimize на Minerr, а после ключевого слова Given добавить выражение, приравнивающее функции f (x,y) значение, заведомо меньшее минимального, например, f (х, у) =0.
Решение задачи линейного программирования
Листинг 6.6. Решение задачи линейного программирования
Модель типичной транспортной задачи следующая. Пусть имеется N предприятий-производителей, выпустивших продукцию в количестве b0, ... ,bN-1 тонн. Эту продукцию требуется доставить м потребителям в количестве а0, ... „аM-1 тонн каждому. Численное определение векторов а и b находится в первой строке листинга. Сумма всех заказов потребителей ai равна сумме произведенной продукции, т. е. всех bi (проверка равенства во второй строке). Если известна стоимость перевозки тонны продукции от i-го производителя к j-му потребителю Ci,j, то решение задачи задает оптимальное распределение соответствующего товаропотока xi,j с точки зрения минимизации суммы транспортных расходов. Матрица с и минимизируемая функция f (х) матричного аргумента х находятся в середине листинга 6.6.
Условия, выражающие неотрицательность товаропотока, и равенства, задающие сумму произведенной каждым предприятием продукции и сумму заказов каждого потребителя, находятся после ключевого слова Given. Решение, присвоенное матричной переменной sol, выведено в последней строке листинга вместе с соответствующей суммой затрат. В строке, предшествующей ключевому слову Given, определяются нулевые начальные значения для х простым созданием нулевого элемента матрицы xN-1,M-1.
Примечание 1
Примечание 1
Если взять другие начальные значения для х, решение, скорее всего, будет другим! Возможно, вы сумеете отыскать другой локальный минимум, который еще больше минимизирует транспортные затраты. Это еще раз доказывает, что задачи на глобальный минимум, к классу которых относится линейное программирование, требуют аккуратного отношения в смысле выбора начальных значений. Часто ничего другого не остается, кроме сканирования всей области начальных значений, чтобы из множества локальных минимумов выбрать наиболее глубокий.
Примечание 2
Примечание 2
Не забывайте о том, что в вычислительном блоке в качестве неизвестных следует использовать все компоненты вектора х, как это сделано в предпоследней строке листинга 6.6 (с/и. разд. 5.1.1). Иными словами, нельзя задавать некоторые из компонент х в виде параметров.
Примечание 3
Примечание 3
Еще раз напомним, что в новых версиях Mathcad (начиная с 11-й) появилась возможность программного управления глобальной минимизацией. Для этого служит параметр численного алгоритма Multistart (Сканирование), который следует установить в положение Yes (Да) для поиска глобального экстремума (см. разд. 5.3.2). Любопытно, что если при решении нашей задачи поменять только эту опцию функции Minimize, то численный метод даст сбой, и вместо решения появится сообщение об ошибке. Однако если вспомнить, что наша транспортная задача — линейная, и выставить в контекстном меню, вызываемом на имени функции Minimize, флажок Linear (Линейный), задающий линейный вариант алгоритма, то глобальное решение будет найдено.
Аналитический поиск
Листинг 6.7. Аналитический поиск экстремумов функции одной переменной
Чтобы завершить анализ f (х) на экстремумы, необходимо определить, какие из найденных точек являются точками минимума, а какие — максимума. Для этого (листинг 6.8) следует просто рассчитать значения второй производной в результатах решения уравнения и определить ее знак.
Анализ типа точек
Листинг 6.8. Анализ типа точек экстремума (продолжение листинга 6.7)
демонстрирует приближенное
Листинг 6.9 демонстрирует приближенное решение уравнения kx2+y2=0, которое при любом значении коэффициента k имеет единственный точный корень (х=0,у=0). Тем не менее при попытке решить его функцией Find для больших k, порядка принятых в листинге (Рисунок 6.5), происходит генерация ошибки "No solution was found" (Решение не найдено). Это связано с иным поведением функции f (x,y)=kx2+y2 вблизи ее корня по сравнению с функциями, поиск корней которых был разобран в предыдущей главе (см. Рисунок 5.1).В отличие от них, f (х,у) не пересекает плоскость f (х,у)=0, а лишь касается ее (Рисунок 6.5) в точке (х=0,у=0). Поэтому и найти корень изложенными в предыдущем разделе градиентными методами намного сложнее, поскольку вблизи корня производные f (х,у) близки к нулю, и итерации, строящиеся по градиентному принципу, могут уводить предполагаемое решение далеко от корня.
Ситуация еще более ухудшается, если наряду с корнем типа касания (как на Рисунок 6.5) имеются (возможно, весьма удаленные) корни типа пересечения. Тогда попытка решить уравнение или систему уравнений с помощью функции Find может приводить к нахождению корня второго типа, даже если начальное приближение было взято очень близко к первому. Поэтому если вы предполагаете, что система уравнений имеет корень типа касания, намного предпочтительнее использовать функцию Minerr, тем более что всегда есть возможность проконтролировать невязку уравнений простой подстановкой полученного решения в исходную систему уравнений. Пока мы рассматривали пример нахождения существующего решения уравнения. Приведем теперь пример нахождения функцией Minerr приближенного решения не имеющего корней уравнения (листинг 6.10), а также несовместной системы уравнений и неравенств (листинг 6.11). Решение, выдаваемое функцией Minerr, минимизирует невязку данной системы. Как видно из листингов, в качестве результата выдаются значения переменных, наилучшим образом удовлетворяющие уравнению и неравенствам внутри вычислительного блока.
ВНИМАНИЕ!
Полученное в листинге 6.11 решение не удовлетворяет неравенствам, составляющим задачу. Это и неудивительно, поскольку точного решения системы нет, и в качестве ответа Mathcad выдает значения аргументов, минимизирующих норму общей невязки (не отдавая предпочтения ни уравнению, ни неравенствам).
Приближенное численное
Листинг 6.9. Приближенное численное решение уравнения, имеющего корень (x=0, y=0)
и 6 3 и 6 4 содержат примеры
Листинги 6.3 и 6.4 содержат примеры поиска условного экстремума на различных интервалах, определенных неравенствами. У вас не должны возникнуть сложности с записью условий в Mathcad, а вот разобраться в скрытой от глаз вычислительной стороне будет полезно. С этой точки зрения поучительно сравнить результаты работы приведенных листингов с листингами 6.1 и 6.2 соответственно.Оптимизация
ОптимизацияВ этой главе рассматриваются задачи на поиск экстремума функций и близкие к ним задачи приближенного решения алгебраических нелинейных уравнений и систем. Задачи поиска экстремума функции означают нахождение ее максимума (наибольшего значения) или минимума (наименьшего значения) в некоторой области определения ее аргументов. С вычислительной точки зрения две задачи являются практически одинаковыми, т. к., например, задача поиска максимума f (х) тождественна проблеме отыскания минимума -f(x). Поэтому ниже будем часто называть задачу поиска экстремума функции задачей минимизации.
Поиск экстремума функции
6.1. Поиск экстремума функцииДля численного решения задач поиска локального максимума и минимума в Mathcad имеются встроенные функции Minerr, Minimize и Maximize. Принцип их действия очень близок к принципу расчетов, заложенных во встроенной функции Find, предназначенной для решения алгебраических уравнений (см. главу 5). В частности, все встроенные функции минимизации используют те же градиентные численные методы, что и функция Find, поэтому допускается "вручную" выбирать численный алгоритм минимизации из уже рассмотренных нами численных методов (см. разд. 5.3.2). Кроме того, как и в случае решения уравнений, применение градиентного алгоритма, во-первых, требует задания некоторого начального приближения к точке минимума и, во-вторых, позволяет отыскать лишь один (т. е. локальный) из минимумов функции.
Таким образом, как и в случае решения уравнений (см. разд. 5.2.4), чтобы найти глобальный максимум (или минимум), требуется сначала просканировать с некоторым шагом рассматриваемую область и вычислить все локальные значения и потом выбрать из них наибольший (наименьший). Другим вариантом будет простое сканирование с вычислением значений функции, позволяющее выделить из нее подобласть наибольших (наименьших) значений функции и осуществить поиск глобального экстремума, уже находясь в его окрестности. Последний путь таит в себе некоторую опасность уйти в зону другого локального экстремума, но часто может быть предпочтительнее из соображений экономии времени.
Поиск минимума и попытка нахождения
Рисунок 6.5. Поиск минимума и попытка нахождения корня функции f (x, у) =kx2+y2
Приближенное решение алгебраических уравнений
6.2. Приближенное решение алгебраических уравненийГрадиентные численные методы решения задач отделения корней уравнений и поиска экстремума функций очень близки. Поэтому, в частности, пользователь может тем же самым образом, с помощью контекстного меню, выбирать конкретный метод приближенного решения для функций Minimize и Maximize. Применительно к нелинейным уравнениям основная идея градиентных алгоритмов была приведена в разд. 5.3.2. Основным отличием в случае задач минимизации является критерий правильности решения (прекращения итераций): если при решении уравнений критерием служит близость нулю невязки системы уравнений, то при минимизации критерий заключается в схождении итераций к минимальным значениям исследуемой функции.
Близость рассмотренных задач связана также с тем, что иногда приходится заменять проблему решения нелинейных уравнений задачей поиска экстремума функции многих переменных. Например, когда невозможно найти решение с помощью функции Find, можно попытаться потребовать вместо точного выполнения уравнений условий минимизировать их невязку. Чтобы не нужно было реализовывать данную схему вручную (вместо встроенной функции Find использовать соответствующую постановку задачи для функции Minimize), разработчики Mathcad предусмотрели дополнительную встроенную функцию Minerr. Она применяется аналогично функции Find (см. разд. 5.1. Т), в частности, имеет тот же самый набор параметров и должна находиться в пределах вычислительного блока:
1. x1:=C1 ... хM:=CM — начальные значения для неизвестных.
2. Given — ключевое слово.
3. Система алгебраических уравнений и неравенств, записанная логическими операторами.
4. Minerr (x1, ... ,хM) — приближенное решение системы относительно переменных x1, ... ,хM, минимизирующее невязку системы уравнений.
Примечание 1
Примечание 1
В функции Minerr реализованы те же самые алгоритмы, что и в функции Find, иным является только условие завершения работы численного метода (как в случае функций Minimize и Maximize).
Примечание 2
Примечание 2
Согласно своему математическому смыслу, функция Minerr может применяться для построения регрессии серии данных по закону, заданному пользователем (см. главу 13).
Пример использования функции Minerr показан в листинге 6.9. Как видно, достаточно заменить в вычислительном блоке имя функции на Minerr, чтобы вместо точного (конечно, с поправкой на погрешность порядка TOL) получить приближенное решение уравнения, заданного после ключевого слова Given.
регуляризация некорректных задач
6.3. Пример: регуляризация некорректных задачЕще один широко распространенный круг задач на решение систем уравнений, называемых обратными, наиболее типичен для современной экспериментальной физики. Значительную часть обратных задач относят к классу некорректно поставленных (или просто некорректных), которые, благодаря своей принципиальной неустойчивости, требуют специального подхода. Как правило, общим принципом решения некорректных задач является их регуляризация, заключающаяся в их сведении к задаче минимизации.
Расчеты показаний прибора (коллаж
Рисунок 6.7. Расчеты показаний прибора (коллаж результатов листинга 6.17 для различных сочетаний параметров k и 0)
Примечание 1
Примечание 1
Модель измерений, представленная в третьей строке листинга 6.13, описывает, с математической точки зрения, типичное интегральное уравнение, в которое неизвестная функция у(х) входит в виде части подынтегральной функции. Класс обратных задач чаще всего (но не всегда) соответствует как раз интегральным уравнениям.
Примечание 2
Примечание 2
Неизвестная функция у (х) входит в модель, приведенную в листинге 6.13, линейным образом (в первой степени под знаком интеграла). В связи с этим рассматриваемая задача является линейной, а саму модель называют часто линейной схемой измерений. Линейность модели проявляется также в том, что ее дискретная форма записывается в виде матричного соотношения (см. листинг 6.14 ниже).
Из сказанного выше понятно, что в практических приложениях весьма актуальна задача восстановления сигнала у(х) по показаниям прибора b(х) (при наличии определенной дополнительной информации о физике измерения, т. е. об операторе S, выражающем действие прибора). Таким образом, в отличие от прямой задачи, выражающейся равенством (6.1), обратной задачей является восстановление функции у (х) по известной b(х).
Обычно сигнал (и, соответственно, его измерение) может зависеть от времени и/или пространственных координат. Эту зависимость мы обозначили как зависимость от х. При использовании численных методов непрерывные зависимости от х дискретизируются, заменяясь соответствующими векторами. Таким образом, задача отыскания неизвестной функции у(х) заменяется задачей поиска неизвестного вектора Y и может быть записана в матричном виде
S(Y)=B, (6.2)
где вектор у неизвестен, а оператор S (в линейном случае S(Y)=AY, где А — матрица) и вектор правых частей уравнений в известны. Таким образом, в дискретном случае обратная задача для рассматриваемой математической модели состоит в решении системы (в общем случае, нелинейных) уравнений (6.2). Построенная описанным способом дискретная задача представлена в листинге 6.14. Важно отметить, что, поскольку исходная задача линейна, дискретный вариант ее оператора записывается в виде матрицы А, а сама задача сводится к системе линейных алгебраических уравнений AY=B.
ПРИМЕЧАНИЕ
Рекомендуем читателю обратиться к соответствующему файлу Mathcad на прилагаемом к книге компакт-диске и сравнить графики сигнала и измерений, соответствующие непрерывной (интегральной) и дискретной (матричной) модели. Будет очень полезным осуществить расчеты для разных значений параметров, в том числе количества точек дискретизации м, а также разобраться, какова структура матрицы А.
Выбор численного метода минимизации
Рисунок 6.2. Выбор численного метода минимизации
Математические задачи в пакете MathCAD 12
Автоматическая генерация матриц
7.4.1. Автоматическая генерация матрицСамым наглядным способом создания матрицы или вектора является применение первой кнопки панели инструментов Matrix (Матрицы). Однако в большинстве случаев, в частности, при программировании сложных проектов, удобнее бывает создавать массивы с помощью встроенных функций.
Создание матриц на основе некоторой функции
Наиболее удобный прием автоматизации создания матриц заключается в предварительном определении функции f (i, j), аргументом которой должны быть индексы элементов матрицы:
Модуль вектора
7.2.1. Модуль вектораМодуль вектора (vector magnitude) по определению равен квадратному корню из суммы квадратов его элементов (листинг 7.8).
ВНИМАНИЕ!
Не путайте модуль вектора и определитель матрицы, который обозначается тем же символом (с/м. разд. 7,3.1). Это характерный пример оператора, действующего по-разному на векторы и квадратные матрицы.
Определитель квадратной матрицы
7.3.1. Определитель квадратной матрицыОпределитель (Determinant) матрицы обозначается стандартным математическим символом. Чтобы ввести оператор нахождения определителя матрицы, можно нажать кнопку Determinant (Определитель) на панели инструментов Matrix (Матрица) (листинг 7.14) или набрать на клавиатуре <|> (нажав клавиши
1. Переместите курсор в документе таким образом, чтобы поместить матрицу между линиями ввода (напоминаем, что линии ввода — это вертикальный и горизонтальный отрезки синего цвета, образующие уголок, указывающий на текущую область редактирования).
2. Введите оператор нахождения определителя матрицы.
3. Введите знак равенства (либо символьного вывода), чтобы вычислить определитель (численно или аналитически соответственно, как это показано в листинге 7.14).
ВНИМАНИЕ!
Не путайте операторы вычисления определителя квадратной матрицы и длины вектора. В Matncad 12 введен принудительный контроль действий пользователя при вводе этих операторов во избежание путаницы (т. к. один и тот же символ используется для этих двух операций). При попытке вычислить определитель матрицы с помощью оператора |А|, введенного с панели Calculator (Калькулятор), а не Matrix (Матрица), будет выдано сообщение об ошибке, а результат вычисления детерминанта появится только после того, как пользователь вызовет контекстное меню и подтвердит в нем, что он собирается вычислить именно определитель матрицы. То же самое касается и длины вектора, если попытаться ввести его не с панели Calculator (Калькулятор), а с панели Matrix (Матрица).
Транспонирование
7.1.1. ТранспонированиеТранспонированием называют операцию, переводящую матрицу размерности MxN в матрицу размерности NxM, делая столбцы исходной матрицы строками, а строки — столбцами. Несколько примеров транспонирования приведены в листинге 7.1. Ввод символа транспонирования (transpose) осуществляется с помощью панели инструментов Matrix (Матрица) или нажатием клавиш
Ранг матрицы
7.3.2. Ранг матрицыРангом (rank) матрицы называют наибольшее натуральное число к, для которого существует не равный нулю определитель k-ro порядка подматрицы, составленной из любого пересечения k столбцов и k строк матрицы.
Для вычисления ранга в Mathcad предназначена функция rank (листинг 7.15).
Разбиение и слияние матриц
7.4.2. Разбиение и слияние матрицИз матрицы или вектора можно выделить либо подматрицу, либо вектор-столбец, либо отдельный элемент. И обратно, можно "склеить" несколько матриц в одну.
Выделение подматрицы
Часть матрицы выделяется одним из следующих способов (листинг 7.22):
Скалярное произведение
7.2.2. Скалярное произведениеСкалярное произведение векторов (vector inner product) определяется как скаляр, равный сумме попарных произведений соответствующих элементов. Векторы должны иметь одинаковую размерность, скалярное произведение имеет ту же размерность. Скалярное произведение двух векторов u и v равно uv=|u||v|cos0, где 0— угол между векторами. Если векторы ортогональны, то их скалярное произведение равно нулю. Обозначается скалярное произведение тем же символом, что и умножение (листинг 7.9).
ВНИМАНИЕ!
Для обозначения скалярного произведения пользователю позволяется выбирать представление оператора умножения при помощи контекстного меню (подобно умножению скалярных величин). Однако никогда не применяйте для обозначения скалярного произведения символ х, который является общеупотребительным символом векторного произведения (см. разд. 7.2.3).
Сложение и вычитание
7.1.2. Сложение и вычитаниеВ Mathcad можно как складывать матрицы, так и вычитать их друг из друга. Для этих операторов применяются стандартные символы "+" или "—" соответственно. Матрицы должны иметь одинаковую размерность, иначе будет выдано сообщение об ошибке. Каждый элемент суммы двух матриц равен сумме соответствующих элементов матриц-слагаемых (листинг 7.2).
Результат унарной операции смены знака матрицы эквивалентен смене знака всех ее элементов. Для того чтобы изменить знак матрицы, достаточно ввести перед ней знак минуса, как перед обычным числом (нижняя строка листинга 7.2).
Обращение квадратной матрицы
7.3.3. Обращение квадратной матрицыПоиск обратной матрицы возможен, если матрица квадратная и ее определитель не равен нулю. Произведение исходной матрицы на обратную по определению является единичной матрицей. Для ввода оператора поиска обратной матрицы нажмите кнопку Inverse (Обратная матрица) на панели инструментов Matrix (Матрица). В листинге 7.16 приведен пример поиска обратной матрицы и последующая проверка правильности ее вычисления.
Сортировка элементов матриц
7.4.3. Сортировка элементов матрицЧасто бывает нужно переставить элементы матрицы или вектора, расположив их в определенной строке или столбце в порядке возрастания или убывания. Для этого имеются несколько встроенных функций, которые позволяют гибко управлять сортировкой матриц:
Примечание 1
Примечание 1
Если элементы матриц или векторов комплексные, то сортировка ведется по действительной части, а мнимая часть игнорируется.
Умножение
7.1.3. УмножениеПри умножении следует помнить, что матрицу размерности MxN допустимо умножать только на матрицу размерности NxP (р может быть любым). В результате получается матрица размерности MхP.
Чтобы ввести символ умножения, нужно нажать клавишу со звездочкой <*> или воспользоваться панелью инструментов Matrix (Матрица), нажав на ней кнопку Dot Product (Умножение). Умножение матриц обозначается по умолчанию точкой, как показано в листинге 7.5.
Векторное произведение
7.2.3. Векторное произведениеВекторное произведение (cross product) двух векторов u и v с углом 9 между ними равно вектору с модулем |u|-|v|sin0, направленным перпендикулярно плоскости векторов u и v. Обозначают векторное произведение символом х, который можно ввести нажатием кнопки Cross Product (Векторное произведение) в панели Matrix (Матрица) или сочетанием клавиш
Векторизация массива
7.2.4. Векторизация массиваВекторная алгебра Mathcad включает несколько необычный оператор, который называется оператором векторизации (vectorize operator). Этот оператор предназначен, как правило, для работы с массивами. Он позволяет провести однотипную операцию над всеми элементами массива (т. е. матрицы или вектора), упрощая тем самым программирование циклов. Например, иногда требуется умножить каждый элемент одного вектора на соответствующий элемент другого вектора, чтобы в результате также получился вектор. Непосредственно такой операции в Mathcad нет, но ее легко осуществить с помощью векторизации (листинг 7.12). Для этого:
1. Введите векторное выражение, как показано во второй строчке листинга 7.12 (обратите внимание, что в таком виде символ умножения обозначает оператор скалярного произведения векторов).
2. Переместите курсор таким образом, чтобы линии ввода выделяли все выражение, которое требуется подвергнуть векторизации.
3. Введите оператор векторизации, нажав кнопку Vectorize (Векторизация) на панели Matrix (Матрица) (листинг 7.12), или сочетанием клавиш
4. Введите <=>, чтобы получить результат.
Возведение квадратной матрицы в степень
7.3.4. Возведение квадратной матрицы в степеньК квадратным матрицам можно формально применять операцию возведения в степень п. Для этого n должно быть целым числом. Результат данной операции приведен в табл. 7.1. Ввести оператор возведения матрицы м в степень n можно точно так же, как и для скалярной величины: нажав кнопку Raise to Power (Возвести в степень) на панели Calculator (Калькулятор) или нажав клавишу <А>. После появления местозаполнителя в него следует ввести значение степени n.
Таблица 7.1. Правила возведения матрицы в степень
| n |
Мn |
| 0 |
Единичная матрица размерности матрицы M |
| 1 |
Сама матрица M |
| -1 |
M-1 — матрица, обратная M |
| 2,3,... |
MM, (MM)M, . . . |
| -2, -3, ... |
M-1M-1, (M-1M-1)M-1 ... |
Примеры возведения матрицы в степень приведены в листинге 7.17.
Вывод размера матрицы
7.4.4. Вывод размера матрицыДля получения сведений о характеристиках матриц или векторов предусмотрены следующие встроенные функции (листинги 7.28 и 7.29 соответственно):
Примечание 1
Примечание 1
Если матричные индексы нумеруются с 1, т. е. системная константа ORIGIN равна не о (по умолчанию), а 1, то число элементов вектора и индекс его последнего элемента совпадают.
Матричные нормы
7.3.5. Матричные нормыВ линейной алгебре используются различные векторные и матричные нормы (norm), которые ставят в соответствие матрице некоторую скалярную числовую характеристику. Норма матрицы отражает порядок величины матричных элементов. В разных специфических задачах линейной алгебры применяются различные виды норм. Mathcad имеет четыре встроенных функции для расчета разных норм квадратных матриц:
Примеры расчета различных норм двух матриц А и в с различающимися на два порядка элементами иллюстрирует листинг 7.18.
СОВЕТ
В большинстве задач неважно, какую норму использовать. Как видно, в обычных случаях разные нормы дают примерно одинаковые значения, хорошо отражая порядок величины матричных элементов. Конкретные формулы, определяющие нормы, заинтересованный читатель отыщет в справочниках по линейной алгебре или в Ресурсах Mathcad.
Число обусловленности квадратной матрицы
7.3.6. Число обусловленности квадратной матрицыЕще одной важной характеристикой матрицы является ее число обусловленности (condition number). Число обусловленности является мерой чувствительности системы линейных уравнений А-Х=Ь, определяемой матрицей А, к погрешностям задания вектора ь правых частей уравнений (см. главу 8). Чем больше число обусловленности, тем сильнее это воздействие и тем более неустойчив процесс нахождения решения линейной системы. Число обусловленности связано с нормой матрицы и вычисляется по-разному для каждой из норм:
Расчет чисел обусловленности для двух матриц А и В показан в листинге 7.19. Обратите внимание, что первая из матриц является хорошо обусловленной, а вторая — плохо обусловленной (два ее последних столбца очень близки между собой, с точностью до множителя 2). Вторая строка листинга дает формальное определение числа обусловленности как произведения норм исходной и обратной матриц. В других нормах определение точно такое же.
Примечание 1
Примечание 1
Как нетрудно понять, матрицы А и в из листинга 7.18 (см. предыдущий разд.) обладают одинаковыми числами обусловленности, т. к. в=100-А, и, следовательно, обе матрицы определяют одну и ту же систему уравнений.
Использование функции CreateMesh
Рисунок 7.3. Использование функции CreateMesh для построения графика трехмерной поверхности
Результатом обеих рассмотренных функций CreateMesh и CreateSpace является соответствующий вложенный массив, служащий в Mathcad для представления тензора. Каждая матрица из числа трех вложенных матриц, образующих вложенный массив данных, определяет х-, у- и z-координаты точек поверхности или кривой.
Создание диагональных матриц
В Mathcad легко создать матрицы, имеющие определенное простое строение, с помощью одной из встроенных функций. Примеры использования этих функций приведены в листинге 7.21:
Использование функции CreateSpace
Рисунок 7.2. Использование функции CreateSpace для построения графика трехмерной кривой
Функция создания матрицы для графика трехмерной поверхности устроена совершенно аналогично, за тем исключением, что для определения поверхности требуется не одна, а две переменных. Пример ее использования иллюстрирует Рисунок 7.3.
Линейная алгебра
Линейная алгебраЗадачи линейной алгебры, решаемые в Mathcad, можно условно разделить на два класса. Первый — это простейшие матричные операции, которые сводятся к определенным арифметическим действиям над элементами матрицы. Они реализованы в виде операторов (см. разд. 7.1 и 7.2) и нескольких специфических функций, предназначенных для создания, объединения, сортировки, получения основных свойств матриц и т. п. (см. разд. 7.4). Второй класс — это более сложные действия, которые реализуют алгоритмы вычислительной линейной алгебры, такие как вычисление определителей и обращение матриц (см. разд. 7.3), вычисление собственных векторов и собственных значений, решение систем линейных алгебраических уравнений и различные матричные разложения (см. главу 8).
Транспонирование векторов и матриц
Листинг 7.1. Транспонирование векторов и матриц
Скалярное произведение
Листинг 7.10. Скалярное произведение векторов, умноженное на третий вектор
Векторное произведение двух векторов
Листинг 7.11. Векторное произведение двух векторов
Использование оператора
Листинг 7.12. Использование оператора векторизации для перемножения элементов вектора
Большинство неспецифических функций Mathcad не требуют векторизации для проведения одной и той же операции над всеми элементами вектора. Например, аргументом тригонометрических функций по определению является скаляр. Если попытаться вычислить экспоненту от векторной величины, Mathcad осуществит векторизацию по умолчанию, возведя в степень е каждый элемент и выдав в качестве результата соответствующий вектор (листинг 7.13).
Векторизация аргумента
Листинг 7.13. Векторизация аргумента необязательна для большинства встроенных функций Mathcad
Вычисление определителя квадратной матрицы
Листинг 7.14. Вычисление определителя квадратной матрицы
Вычисление ранга матрицы
Листинг 7.15. Вычисление ранга матрицы
Вычисление обратной матрицы
Листинг 7.16. Вычисление обратной матрицы
Возведение квадратной матрицы в целую степень
Листинг 7.17. Возведение квадратной матрицы в целую степень
Вычисление различных норм матриц
Листинг 7.18. Вычисление различных норм матриц
Вычисление чисел
Листинг 7.19. Вычисление чисел обусловленности матриц (в различных нормах)
Сложение вычитание и смена знака матриц
Листинг 7.2. Сложение, вычитание и смена знака матриц
Кроме сложения матриц Mathcad поддерживает операцию сложения матрицы со скаляром (листинг 7.3). Каждый элемент результирующей матрицы равен сумме соответствующего элемента исходной матрицы и скалярной величины.
Создание матрицы на основе функции пользователя
Листинг 7.20. Создание матрицы на основе функции пользователя
Создание матриц для построения 3D графиков
Для создания матриц имеются еще две специфические функции, применяемые, в основном, для быстрого и эффектного представления каких-либо зависимостей в виде трехмерных графиков (типа поверхности или пространственной кривой). Все их аргументы, кроме первого (имени функции), необязательны. Рассмотрим первую из этих встроенных функций.
Пример использования функции CreateSpace показан на Рисунок 7.2. Заметьте, для построения графика кривой не потребовалось никакого дополнительного кода, кроме определения параметрической зависимости в вектор-функции F!
Создание единичной
Листинг 7.21. Создание единичной и диагональной матрицы заданной размерности
Доступ к отдельным
Листинг 7.22. Доступ к отдельным элементам, столбцам и строкам матрицы
Примечание 1
Примечание 1
Выделить из матрицы один столбец или строку можно и с помощью функции submatrix (листинг 7.23, нижняя строка).
Примечание 2
Примечание 2
Те же операции применимы к матрицам-векторам и матрицам-строкам. Следует помнить только, что размер их составляет Nx1 и 1xN соответственно.
Выделение подматрицы
Листинг 7.23. Выделение подматрицы
Слияние матриц
Для того чтобы составить из двух или более матриц одну, в Mathcad предусмотрена пара матричных функций (листинг 7.24):
Примеры слияния матриц
Листинг 7.24. Примеры слияния матриц
Специфические преобразования матриц
Еще две встроенных функции Mathcad позволяют создавать матрицы на основе некоторой имеющейся матрицы (листинг 7.25):
Примечание 3
Примечание 3
Размер NxM матрицы А для функции geninv должен быть таким, чтобы M>
M.
Создание матриц на основе другой матрицы
Листинг 7.25. Создание матриц на основе другой матрицы
Сортировка вектора
Листинг 7.26. Сортировка вектора
Сортировка матриц по строке и столбцу
Листинг 7.27. Сортировка матриц по строке и столбцу
Размер матриц
Листинг 7.28. Размер матриц
Размер векторов
Листинг 7.29. Размер векторов
Сложение матрицы со скалярной величиной
Листинг 7.3. Сложение матрицы со скалярной величиной
Иногда бывает нужно вычислить сумму всех элементов вектора или матрицы. Для этого существует вспомогательный оператор (листинг 7.4, первая и вторая строки соответственно), задаваемый кнопкой Vector Sum (Суммирование элементов вектора) на панели Matrix (Матрица) или сочетанием клавиш
+<4>
. Этот оператор чаще оказывается полезным не в матричной алгебре, а при организации циклов с индексированными переменными.
В том же листинге 7.4 (снизу) показано применение операции суммирования диагональных элементов квадратной матрицы. Эту сумму называют следом (trace) матрицы. Данная операция организована в виде встроенной функции tr:
Суммирование элементов
Листинг 7.4. Суммирование элементов и вычисление следа матрицы
Перемножение матриц
Листинг 7.5. Перемножение матриц
Обратите внимание (нижняя строка листинга 7.5), что попытка перемножить матрицы А и В несоответствующего (одинакового 2х3) размера оказалась безрезультатной: после введенного знака равенства находится пустой местозаполнитель, а само выражение в редакторе Mathcad выделяется красным цветом. При установке курсора на это выражение появляется сообщение о несовпадении числа строк первой матрицы с числом столбцов второй матрицы.
Еще один пример, относящийся к умножению вектора на матрицу-строку и, наоборот, строки на вектор, приведен в листинге 7.6.
ВНИМАНИЕ!
Тот же самый оператор умножения действует на два вектора по-другому (см. разд. 7.2.2).
Умножение вектора и строки
Листинг 7.6. Умножение вектора и строки
Аналогично сложению матриц со скаляром определяется умножение и деление матрицы на скалярную величину (листинг 7.7). Символ умножения вводится так же, как и в случае умножения двух матриц. На скаляр можно умножать матрицу любой размерности.
Умножение матрицы на скалярную величину
Листинг 7.7. Умножение матрицы на скалярную величину
Модуль вектора
Листинг 7.8. Модуль вектора
Скалярное произведение векторов
Листинг 7.9. Скалярное произведение векторов
С осторожностью перемножайте несколько (более двух) векторов. По-разному расставленные скобки полностью изменяют результат умножения. Примеры такого умножения приведены в листинге 7.10.
Простейшие матричные операции
7.1. Простейшие матричные операцииПростейшие операции матричной алгебры реализованы в Mathcad в виде операторов, причем их запись максимально приближена к математическому значению. Каждый оператор выражается соответствующим символом. Некоторые операции применимы только к квадратным матрицам NxN, некоторые допускаются только для векторов (например, скалярное произведение), а другие, несмотря на одинаковое написание, по-разному действуют на векторы и матрицы.
Векторная алгебра
7.2. Векторная алгебраВекторы являются частным случаем матриц размерности NXI, поэтому для них справедливы все те операции, что и для матриц, если ограничения особо не оговорены. Вместе с тем для векторов в линейной алгебре предусмотрен целый ряд специфических операций, и все они реализованы в системе Mathcad.
ВНИМАНИЕ!
Непосредственное проведение многих векторных операций над матрицами-строками, т. е. матрицами 1xN, невозможно; для того, чтобы превратить строку в вектор, ее нужно предварительно транспонировать.
Вспомогательные матричные функции
7.4. Вспомогательные матричные функцииПеречислим основные встроенные функции, предназначенные для облегчения работы с векторами и матрицами. Они нужны для создания матриц, слияния и выделения части матриц, получения основных свойств матриц и т. п.
Ввод матриц и основные операции
Рисунок 7.1. Ввод матриц и основные операции над ними осуществляются при помощи панели Matrix
Примечание 1
Примечание 1
Все матричные и векторные операторы, о которых пойдет речь, допустимо использовать как в численных, так и в символьных расчетах. Мощь символьных операций заключается в возможности проводить их не только над конкретными числами, но и над переменными. Смело используйте символьный процессор в качестве мощного математического справочника, когда вы хотите вспомнить какое-либо определение из области линейной алгебры. Именно по этой причине мы прибегаем к примерам символьных расчетов в большинстве иллюстраций к данному разделу.
Вычисление определителей и обращение квадратных матриц
7.3. Вычисление определителей и обращение квадратных матрицРассмотрим еще несколько исключительно важных действий линейной алгебры, связанных с понятием определителя матрицы. Несмотря на то, что некоторые из них реализованы в Mathcad также в виде операторов, они требуют (при проведении расчетов по численным алгоритмам) несравненно больше внимания, нежели операторы упомянутые в двух предыдущих разделах.
Математические задачи в пакете MathCAD 12
Переопределенные системы
8.2.1. Переопределенные системыНачнем разговор о "плохих" СЛАУ с переопределенными условиями, в которых число уравнений больше числа неизвестных.
О постановке задач
Чаще всего СЛАУ с прямоугольной матрицей размера MxN (при M>N, т. е. при числе уравнений большем числа неизвестных) вовсе не имеет решения, т. е. является несовместной, или переопределенной.
СЛАУ с треугольной матрицей
8.3.1. СЛАУ с треугольной матрицейНачнем разговор о решении СЛАУ посредством матричных разложений с простого, но исключительно важного частного случая, а именно, систем с треугольной матрицей, т. е. такой матрицей, по одну из сторон от диагонали которой находятся одни нули. В листинге 8.17 приведен пример верхнетреугольной L матрицы (первая строка листинга), а также ряд формул, по которым за N операций рассчитывается решение соответствующей линейной системы. Из этого примера ясно, что сведение задачи общего вида к СЛАУ с треугольной матрицей практически решает эту задачу, поскольку гарантировано получение результата за минимальное число операций.
Примечание 1
Примечание 1
Подчеркнем, что мы нарочно оформили расчет решения треугольной СЛАУ в виде пользовательской функции trg (A,b), для чего нам пришлось применить элементы программирования. Мы так поступили, чтобы иметь впоследствии возможность применять ее в качестве подпрограммы решения СЛАУ посредством различных матричных разложений, включая листинг 8.17 в последующие листинги. Более того, несложно модифицировать листинг 8.17 для решения нижнетреугольных систем, определив, таким образом, еще одну функцию itrg (А, b) (вы найдете соответствующий листинг на компакт-диске).
Примечание 2
Примечание 2
Алгоритм решения СЛАУ с треугольной матрицей называют иногда прямым ходом решения СЛАУ (часто подразумевая, что до него выполнены определенные преобразования, именуемые обратным ходом) либо просто подстановкой. В частности, решение еще одного часто встречающегося типа систем с трехдиагональной матрицей сводится к прямому и обратному ходу алгоритма, называемого прогонкой (см. разд. 11.2.2).
Вычислительный блок Given/ Find
8.1.1. Вычислительный блок Given/ FindДля того чтобы численным методом решить СЛАУ при помощи вычислительного блока (он был подробно описан в главе 5), следует после ключевого слова Given выписать ее, пользуясь логическими операторами. Рассмотрим в качестве примера систему трех уравнений, приведенную в листинге 8.1 (после ключевого слова Given). Неизвестными являются три компонента вектора х, поэтому именно эта векторная переменная является аргументом встроенной функции Find(x), решающей систему в последней строке листинга. Очень важно, что при использовании вычислительного блока Given/Find всем неизвестным требуется присвоить начальные значения, как это сделано в первой строке листинга 8.1.
Примечание 1
Примечание 1
Если матрица СЛАУ является невырожденной (точнее, если ее число обусловленности не слишком велико), то известно, что численное решение системы уравнений единственно. Поэтому начальные значения могут быть произвольными, т. к. результат работы численного метода все равно сойдется к точному решению.
Функция lsolve
8.1.2. Функция lsolveАльтернативой способу решения СЛАУ, введенному в предыдущем разделе, является применение встроенной функции isolve. Для этого система уравнений должна быть записана в матричной форме Аx=b:
Примечание 1
Примечание 1
В функции isolve запрограммирован численный метод LU-разложения (см. разд. 8.3.3), основанный на алгоритме последовательных исключений Гаусса. Он состоит в преобразовании матрицы А линейной системы к треугольному виду, т. е. к форме, когда все элементы ниже главной диагонали матрицы являются нулевыми (с/и. разд. 8.3.1). Точнее, исходная СЛАУ Ах=b заменяется эквивалентной системой с другой матрицей А* и другим вектором правых частей b*, но имеющей то же решение, что и исходная система. Очень важно заметить, что результат, выдаваемый методом Гаусса, является точным (конечно, с поправкой на неизбежно присутствующие ошибки численного округления, которые, в случае хорошо обусловленной матрицы А, являются ничтожными). Таким образом, в противоположность применению вычислительного блока Given/Find (в основе которого лежит приближенный итерационный алгоритм), функция isolve не нуждается в присвоении начальных значений вектору x.
Применение функции isolve показано в листинге 8.4. При этом матрица А может быть определена любым из способов, необязательно явно, как во всех примерах этого раздела. В последней строке листинга осуществляется вычисление нормы невязки, которая оказывается равной нулю. Заметим, что встроенную функцию isolve допускается применять и при символьном решении СЛАУ (листинг 8.5). В последнем случае в уравнениях допускается использовать параметры (т. е. имена переменных, которым не присвоены никакие значения).
Недоопределенные системы
8.2.2. Недоопределенные системыАльтернативным рассмотренному в предыдущем разделе классу СЛАУ с прямоугольной матрицей размера MxN, (при M
О постановке задач
Пример аналитического решения системы двух уравнений с тремя неизвестными при помощи символьного процессора приведен в листинге 8.11.
Разложение Холецкого
8.3.2. Разложение ХолецкогоРазложением Холецкого симметричной (т. е. содержащей одинаковые элементы на местах, расположенных симметрично относительно главной диагонали) матрицы А является представление вида A=LLT, где L — треугольная матрица. Алгоритм Холецкого реализован во встроенной функции choiesky:
Пример разложения Холецкого приведен в листинге 8.18. Обратите внимание, что в результате получается верхняя треугольная матрица (нули сверху от диагонали), а транспонированная матрица является нижней треугольной. В последней строке листинга приведена проверка правильности найденного разложения.
Примечание 1
Примечание 1
Исходя из математического вида разложения Холецкого, матрицу L иногда называют квадратным корнем матрицы А.
LUразложение
8.3.3.LU-разложениеLU-разложением матрицы А, или треугольным разложением, называется матричное разложение вида PA=LU, где L и U — нижняя и верхняя треугольные матрицы соответственно, ар— (диагональная) матрица перестановок, P, А, L, и — квадратные матрицы одного порядка:
Результатом работы встроенной функции LU-разложения является матрица, составленная из матриц L и и соответственно. Чтобы выделить сами матрицы LU-разложения, а именно, P, L, U, необходимо применить функцию выделения подматрицы submatrix (листинг 8.20).
Вырожденные и плохо обусловленные системы
8.2.3. Вырожденные и плохо обусловленные системыВернемся вновь к СЛАУ Aх=b с квадратной матрицей А размера MхN, которая, в отличие от рассмотренного выше "хорошего" случая (см. разд. 8. Г), требует специального подхода. Обратим внимание на два похожих типа СЛАУ:
Несмотря на то, что эти типы систем уравнений существенно отличаются друг от друга (для первого решение отсутствует, а для второго существует и единственно), с практической точки зрения вычислителя, между ними много общего.
Вырожденные СЛАУ
Вырожденная система — это система, описываемая матрицей с нулевым определителем |A|=0 (сингулярной матрицей). Поскольку некоторые уравнения, входящие в такую систему, представляются линейной комбинацией других уравнений, то фактически сама система является недоопределенной. Несложно сообразить, что, в зависимости от конкретного вида вектора правой части ь, существует либо бесконечное множество решений, либо не существует ни одного. Первый из вариантов сводится к построению нормального псевдорешения (т. е. выбора из бесконечного множества решений такого, которое наиболее близко к определенному, например, нулевому, вектору). Данный случай был подробно рассмотрен в разд. 8.2.2 (см. листинги 8.11—8.13).
QRразложение
8.3.4. QR-разложениеСреди матричных разложений особую роль играют ортогональные преобразования, обладающие свойством сохранения нормы вектора. Напомним из курса линейной алгебры, что матрица Q называется ортогональной, если QTQ=I, где I — единичная матрица. Свойство сохранения нормы вектора при ортогональных преобразованиях, т. е. |Qx|=|x|, дает рецепт поиска псевдорешения вырожденных СЛАУ, а именно, замену исходной задачи минимизации невязки с "плохой" матрицей |Аx-b| задачей |QT(Ax-b)|, в которой матрица уже будет "хорошей" благодаря специальному построению матрицы Q. Таким образом, ортогональные разложения используются при решении любых систем (в том числе с прямоугольной матрицей А, причем как переопределенных, так и недоопределенных).
Одним из важнейших вариантов ортогональных разложений некоторой матрицы А является QR-разложение вида A=QR, где Q — ортогональная матрица, а R — верхняя треугольная матрица:
Результатом действия функции qr (А) является матрица, составленная из матриц Q и R соответственно (подобно рассмотренному в предыдущем разделе LU-разложению). Выделить матрицы QR-разложения несложно при помощи встроенной функции выделения подматрицы submatrix (листинг 8.22).
SVD(сингулярное) разложение
8.3.5. SVD-(сингулярное) разложениеНаиболее эффективными (но и ресурсоемкими) средствами решения произвольных СЛАУ (с матрицей А размера NxM) по методу наименьших квадратов являются так называемые полные ортогональные разложения, имеющие, по определению, вид A=UKVT.
Здесь U и V — ортогональные матрицы размером NxN и MхM соответственно, а k— матрица размера NxM, имеющая следующую структуру:
причем w — матрица размера kxk, где k — ранг исходной матрицы А.
Самое известное из ортогональных, SVD- (singular value decomposition) или сингулярное разложение — разложение вида A=USVT, где S — диагональная матрица, состоящая из нулей и расположенных на диагонали сингулярных чисел матрицы А. Расчет сингулярного разложения в Mathcad осуществляется при помощи пары встроенных функций:
Пример поиска сингулярного разложения сингулярной матрицы приведен в листинге 8.25, причем его последняя строка представляет собой проверку правильности найденного разложения. Подчеркнем, что вычисленные сингулярные числа находятся на главной диагонали средней матрицы разложения, а ее остальные элементы, по определению, равны нулю. Сравнивая матрицы из листинга 8.25, вы без труда разберетесь, каким образом следует выделять искомые матрицы сингулярного разложения из результата, поставляемого функцией svd.
Графическое представление несовместной
Рисунок 8.7. Графическое представление несовместной системы двух уравнений с сингулярной матрицей
Рассмотрим второй случай, когда СЛАУ Aх=b с сингулярной квадратной матрицей А не имеет ни одного решения. Пример такой задачи (для системы двух уравнений) проиллюстрирован Рисунок 8.7, в верхней части которого вводятся матрица А и вектор b, а также предпринимается (неудачная, поскольку матрица А сингулярная) попытка решить систему при помощи функции isolve. График, занимающий основную часть рисунка, показывает, что два уравнения, задающие систему, определяют на плоскости (x0,xi) две параллельные прямые. Прямые не пересекаются ни в одной точке координатной плоскости, и решения системы, соответственно, не существует.
Примечание 1
Примечание 1
Во-первых, заметим, что СЛАУ, заданная несингулярной квадратной матрицей размера 2x2, определяет на плоскости пару пересекающихся прямых (см. Рисунок 8.9 ниже). Во-вторых, стоит сказать, что, если бы система была совместной, то геометрическим изображением уравнений были бы две совпадающие прямые, описывающие бесконечное число решений.
График функции f (х2) = |х| при
Рисунок 8.6. График функции f (х2) = |х| при условии выполнения СЛАУ из листинга 8.13
Принимая во внимание введенную технику
Рисунок 8.5. График функции f (x0) = |х| при условии, что xc-2xi=10
Принимая во внимание введенную технику решения недоопределенных СЛАУ, можно предложить для этих задач простой и понятный алгоритм, опирающийся на встроенную функцию Minimize. В листинге 8.12 решена задача численного отыскания псевдорешения рассматриваемого единственного уравнения (Рисунок 8.5), а в листинге 8.13 — решение недоопределенной системы двух уравнений с тремя неизвестными, которая исследовалась аналитически в листинге 8.11 (см. предыдущий разд.). Как уже отмечалось, смысл обоих листингов заключается в минимизации нормы искомого вектора при условии, что выполнена система равенств Aх=b. Графики функции f (х) = |х|, при условии выполнения СЛАУ из листингов 8.12 и 8.13, изображены на Рисунок 8.5 и 8.6 соответственно.
График хорошо обусловленной системы двух уравнений
Рисунок 8.9. График хорошо обусловленной системы двух уравнений
График минимизируемой функции невязки f (х) = | Ахb|
Рисунок 8.1. График минимизируемой функции невязки f (х) = | Ах-b|
График плохо обусловленной системы двух уравнений
Рисунок 8.10. График плохо обусловленной системы двух уравнений
Из Рисунок 8.10 видно, что прямые, соответствующие плохо обусловленной СЛАУ, располагаются в непосредственной близости друг от друга (почти параллельны). В связи с этим малые ошибки в расположении каждой из прямых могут привести к значительным погрешностям локализации точки их пересечения (решения СЛАУ) в противоположность случаю хорошо обусловленной системы, когда малые погрешности в наклоне прямых мало повлияют на место точки их пересечения (Рисунок 8.9).
Примечание 2
Примечание 2
Плохая обусловленность матрицы типична и при реконструкции экспериментальных данных, задаваемых переопределенными (несовместными) СЛАУ (например, в задачах томографии). Именно такой случай приведен в качестве примера в следующем разделе (см. листинг 8.16 ниже).
Метод регуляризации
Для решения некорректных задач, в частности, вырожденных и плохо обусловленных СЛАУ, разработан очень эффективный прием, называемый регуляризацией. В его основе лежит учет дополнительной априорной информации о структуре решения (векторе априорной оценки хо), которая очень часто присутствует в практических случаях. В связи с тем, что регуляризация была подробно рассмотрена в разд. 6.3.3, напомним лишь, что задачу решения СЛАУ Аx=b можно заменить задачей отыскания минимума функционала Тихонова:
?(х,?) = |Ах-b|2+?|х-х0|2. (8.3)
Здесь Я, — малый положительный параметр регуляризации, который необходимо подобрать некоторым оптимальным способом. Можно показать, что задачу минимизации функционала Тихонова можно, в свою очередь, свести к решению другой СЛАУ:
(АTА+?I)-х=АTВ+?х0, (8.4)
которая при ?->0 переходит в исходную плохо обусловленную систему, а при больших x, будучи хорошо обусловленной, имеет решение х0. Очевидно, оптимальным будет некоторое промежуточное значение А, устанавливающее определенный компромисс между приемлемой обусловленностью и близостью к исходной задаче. Отметим, что регуляризационный подход сводит некорректную задачу к условно-корректной (по Тихонову) задаче отыскания решения системы (8.4), которое, в силу линейности задачи, является единственным и устойчивым.
Приведем, без излишних комментариев, регуляризованное решение вырожденной системы, которая была представлена на Рисунок 8.8.
График сечений функции невязки f (х) = |Ахb|
Рисунок 8.8. График сечений функции невязки f (х) = |Ах-b|
Несложно догадаться, что в рассматриваемом сингулярном случае псевдорешений системы, минимизирующих невязку |Ax-b|, будет бесконечно много, и лежать они будут на третьей прямой, параллельной двум показанным на Рисунок 8.7 и расположенной в середине между ними. Это иллюстрирует Рисунок 8.8, на котором представлено несколько сечений функции f(x)= = | Аx-b |, которые говорят о наличии семейства минимумов одинаковой глубины. Если попытаться использовать для их отыскания встроенную функцию Minimize, ее численный метод будет всегда отыскивать какую-либо одну точку упомянутой прямой (в зависимости от начальных условий). Поэтому для определения единственного решения следует выбрать из всего множества псевдорешений то, которое обладает наименьшей нормой. Можно пытаться оформить данную многомерную задачу минимизации в Mathcad при помощи комбинаций встроенных функций Minimize, однако более эффективным способом будет использование регуляризации (см. ниже) или ортогональных матричных разложений (см. разд. 8.3).
Плохо обусловленные системы
Плохо обусловленная система — это система, у которой определитель А не равен нулю, но число обусловленности |А-1| |А| очень велико. Несмотря на то, что плохо обусловленные системы имеют единственное решение, на практике искать это решение чаще всего не имеет смысла. Рассмотрим свойства плохо обусловленных СЛАУ на двух конкретных примерах (листинг 8.14).
Способ выбора одного решения из
Рисунок 8.4. График всех решений уравнения x0-2x1=10
Нормальное псевдорешение
Способ выбора одного решения из бесконечного множества, изображенного на Рисунок 8.4, подсказывает, по аналогии с переопределенными СЛАУ (см. разд. 8.2. Т), сам физический смысл задачи, которую можно интерпретировать как м измерений с N неизвестными (M
Если априорной информации о примерной величине вектора х нет, единственным образом решить СЛАУ невозможно. Однако если о неизвестном векторе хоть что-то можно сказать, данная информация позволит доопределить систему уравнений и получить решение, учитывающее как систему, так и априорную информацию. Иными словами, следует ввести в задачу определенные ожидания о величине вектора х. Математически, не теряя общности, можно полагать ожидаемое значение вектора х нулевым, поскольку перейти от любого х к нуль-вектору можно простым линейным преобразованием переменных, которое изменит только вектор правой части b.
Таким образом, вполне логично объявить решением недоопределенной СЛАУ такое из решений, которое ближе всего находится к нулевому вектору, т. е. обладает минимальной нормой |х| -min. Это решение называют нормальным псевдорешением СЛАУ, и искать его следует, минимизируя норму вектора х на предварительно полученном семействе решений СЛАУ. Иными словами, решение недоопределенной СЛАУ сводится к условной минимизации функции |х| (Рисунок 8.5). Геометрический смысл нормального псевдорешения (в рассматриваемом случае одного уравнения с двумя неизвестными) очевиден: это точка, лежащая на пересечении прямой семейства всех решений и перпендикуляра к этой прямой, восстановленного из начала координат. На Рисунок 8.4 нормальное псевдорешение выделено пунктирными линиями.
Хорошо обусловленные системы с квадратной матрицей
8.1. Хорошо обусловленные системы с квадратной матрицейС вычислительной точки зрения, решение СЛАУ с квадратной матрицей А не представляет трудностей, если размерность А не очень велика. С большой матрицей проблем также не возникает, если она не очень плохо обусловлена (конечно, надо учитывать, что объем вычислений возрастает с увеличением размерности матрицы). В данном разделе будут рассмотрены именно такие системы, решение которых реализовано в Mathcad в двух вариантах:
При этом СЛАУ можно решать как в более наглядной форме (8.1), так и в более компактной матричной форме (8.2). Для первого способа следует использовать блок Given/Find (он может также применяться в случае систем уравнений и неравенств, а также при решении переопределенных СЛАУ), а для второго — как вычислительный блок, так и встроенную функцию isoive.
Изменение численного алгоритма для функции Minerr
Рисунок 8.3. Изменение численного алгоритма для функции Minerr
Во-вторых, приближенное решение СЛАУ посредством вычислительного блока Given/Minerr невозможно при наличии дополнительных условий, выражающих вспомогательную априорную информацию о постановке задачи. В частности, математически более правильным было решать нашу задачу о яблоках и грушах с дополнительным условием положительной определенности компонент неизвестного вектора (поскольку масса фруктов по определению больше нуля). В результате исходная задача сводится к условной минимизации функции f (х), что в Mathcad-программе соответствует появлению дополнительных неравенств после ключевого слова Given (см. пример ниже, решенный в листинге 8. 10). Однако все уравнения и неравенства, предшествующие функции Minerr, будут восприниматься численным процессором Mathcad одинаково, т. е. не в качестве жестких условий, а как выражения, которые должны выполняться лишь с некоторой точностью. В результате найденное решение может вовсе не отвечать условию положительной определенности (этот вопрос обсуждался в разд. 6.2, когда речь шла о задачах оптимизации).
В свете перечисленных проблем применение функции Minimize для поиска псевдорешения СЛАУ выглядит более обоснованным. К слову заметим, что выбор любого из трех нелинейных численных алгоритмов минимизации приводит к одинаковым результатам (листинг 8.9). Функция Minimize годится и для отыскания псевдорешения с дополнительными условиями, выражающими имеющуюся априорную информацию. Соответствующий пример иллюстрирует листинг 8.10, в котором осуществляется поиск псевдорешения СЛАУ, немного отличающейся от рассмотренной выше. Это отличие приводит к тому, что при использовании той же самой методики получается отрицательное решение (третья строка листинга). При добавлении в задачу дополнительных условий результат минимизации оказывается другим (последняя строка листинга 8.10).
Примечание 3
Примечание 3
Несколько иной подход к переопределенным системам, для которых имеется дополнительная информация другого типа (а именно, априорная оценка неизвестного вектора х), будет изложен в следующем разделе.
демонстрирует запись
Листинг 8.1 демонстрирует запись каждого уравнения системы (в промежутке между Given и Find), что очень неудобно, когда система содержит большое число уравнений. В последнем случае намного лучше применить матричную запись СЛАУ, как это показано в листинге 8.2. Первая строка листинга представляет собой определение матрицы СЛАУ А и вектора правых частей ь, а в остальном работа блока Given/Find полностью идентична предыдущему листингу.Решение СЛАУ с помощью вычислительного блока
Листинг 8.1. Решение СЛАУ с помощью вычислительного блока
Поиск псевдорешения
Листинг 8.10. Поиск псевдорешения при наличии априорной информации
Аналитический поиск
Листинг 8.11. Аналитический поиск семейства решений недоопределенной СЛАУ
Приведенную простую систему двух уравнений нам удалось без труда решить аналитически, однако для решения недоопределенных систем, состоящих из большого числа уравнений, необходимо уметь использовать численные алгоритмы.
Рассмотрим в качестве еще одного модельного примера единственное уравнение с двумя неизвестными x0-2x1=l0. Хорошей визуализацией, подчеркивающей специфику данной задачи, будет график геометрического места его решений на плоскости (x0,xi) (Рисунок 8.4). Заметим, что на этом и на следующем рисунке мы использовали обозначение (для корректного построения графика) x0=z. Очевидно, что решений уравнения бесконечно много, и все они находятся на прямой линии x1=(x0-10) /2.
Как и в предыдущем примере (листинг 8.11), нам удалось решить задачу аналитически, и опять-таки число решений получилось бесконечным. Для того чтобы получить возможность осмысленного численного решения подобных (уже не настолько тривиальных) задач, необходимо выделить из бесконечного множества решений одно, оправданное с математической точки зрения, и предложить алгоритм его поиска. Эта проблема решается посредством привлечения понятия нормального псевдорешения.
Поиск нормального
Листинг 8.12. Поиск нормального псевдорешения уравнения x0-2xi=10
Примечание 1
Примечание 1
Возвращаясь к примеру с грушами и яблоками (см. разд. 8.2), можно интерпретировать недоопределенную СЛАУ из листинга 8.12 как единственное измерение, которого недостаточно для однозначного определения веса одной груши и одного яблока. Однако если учесть априорную оценку об этих весах (пусть даже весьма грубую), это позволит отыскать решение, которое будет осмысленным. Конечно, в этом случае следует выбрать соответствующий вектор априорной оценки (в третьей строке листинга 8.12) и, кроме того, добавить дополнительное условие на положительную определенность неизвестных, как в листинге 8.10 (см. раза. 8.2.2).
Поиск нормального
Листинг 8.13. Поиск нормального псевдорешения недоопределенной СЛАУ
Примечание 2
Примечание 2
Если недоопределенная СЛАУ не имеет бесконечного множества решений, а является несовместной, то способ, предложенный в листинге 8.13, использовать нельзя, т. к. условие заведомо невыполнимо. Подход к решению таких задач заключается в поиске компромиссного решения, минимизирующего как норму невязки, так и норму решения (см. разд. 8.2.3).
Решение двух близких плохо обусловленных СЛАУ
Листинг 8.14. Решение двух близких плохо обусловленных СЛАУ
Каждая строка листинга 8.14 содержит решение двух очень близких плохо обусловленных СЛАУ (с одинаковой правой частью ь и мало отличающимися матрицами А). Несмотря на близость, точные решения этих систем оказываются очень далекими друг от друга. Надо заметить, что для системы двух уравнений точное решение получить легко, однако при решении СЛАУ большой размерности незначительные ошибки округления, неминуемо накапливаемые при расчетах (в том числе и "точным" алгоритмом Гаусса), приводят к огромным погрешностям результата. Возникает вопрос: имеет ли смысл искать численное решение, если заранее известно, что, в силу неустойчивости самой задачи, оно может оказаться совершенно неправильным?
Еще одно соображение, которое вынуждает искать специальные методы решения плохо обусловленных СЛАУ (даже приведенной в качестве примера в листинге 8.14 системы двух уравнений), связано с их физической интерпретацией как результатов эксперимента. Если изначально известно, что входные данные получены с некоторой погрешностью, то решать плохо обусловленные системы не имеет вовсе никакого смысла, поскольку малые ошибки модели (матрицы А и вектора ь) приводят к большим ошибкам решения. Задачи, обладающие такими свойствами, называются некорректными.
Чтобы лучше понять причину некорректности, полезно сравнить графическую интерпретацию хорошо (Рисунок 8.9) и плохо (Рисунок 8.10) обусловленной системы двух уравнений. Решение системы визуализируется точкой пересечения двух прямых линий, изображающих каждое из уравнений.
демонстрирует отыскание
Листинг 8.15 демонстрирует отыскание решения задачи (8.4), а полученная зависимость невязки и самого решения от параметра регуляризации Я показана на Рисунок 8.11 и 8.12 соответственно. Важно подчеркнуть, что решения исходной системы и, следовательно, системы (8.4) при ?=0 не существует.Регуляризация вырожденной СЛАУ
Листинг 8.15.Регуляризация вырожденной СЛАУ
Заключительным шагом регуляризации является выбор оптимального ?. Имеется, по крайней мере, два соображения, исходя из которых, можно выбрать параметр регуляризации, если опираться на зависимость от него невязки. В рассматриваемом примере применим критерий определения ?, опирающийся -на подбор нормы невязки, равной априорной оценке погрешностей задания входных данных: матрицы А и вектора b, т. е. величине |?A| + |5?|. Например, можно выбрать норму невязки и, соответственно, параметр ? и решение х(?), которые отмечены на Рисунок 8.11 и 8.12 пунктирами.
Примечание 3
Примечание 3
Другим вариантом выбора ?, не требующим никаких априорных соображений относительно погрешностей модели, является так называемый квазиоптимальный метод, рассмотренный в разд. 6.3.3.
Примечание 4
Примечание 4
Полезно убедиться в том, что формула (8.4) в случае линейной задачи дает тот же результат, что и общая формула (8.3). Для этого достаточно изменить в листинге 8.15 последнюю строку, выражающую решение СЛАУ (8.4), на код, реализующий минимизацию численным методом, как это показано в листинге 8.16. Расчеты (которые требуют значительно большего компьютерного времени) дают тот же самый результат, что был приведен на Рисунок 8.11 и 8.12.
Примечание 5
Примечание 5
Попробуйте в расчетах листингов 8.15 и 8.16 взять иную, например, более реалистичную, априорную оценку решения (вместо использованного в них нулевого вектора х0) и посмотреть, как это повлияет на результат.
Регуляризация СЛАУ
Листинг 8.16. Регуляризация СЛАУ при помощи алгоритма минимизации (продолжение листинга 8.15)
Решение СЛАУ с треугольной
Листинг 8.17. Решение СЛАУ с треугольной матрицей (прямой ход)
Разложение Холецкого
Листинг 8.18. Разложение Холецкого
Решение СЛАУ, если разложение Холецкого для него известно, основано на замене исходной системы Аx=b другой системой b-у=b (где у=LTх), что иллюстрируется листингом 8.19. В первой строке листинга задается вектор правой части b и вычисляется стандартным методом Гаусса решение системы. В оставшейся части листинга СЛАУ решается при помощи разложения Холецкого, проведенного в листинге 8.18. После нахождения (простой подстановкой, т. к. матрица L — треугольная) вектора у, опять-таки подстановкой в уравнение у=LTх (т. к. LT — тоже треугольная матрица) отыскивается вектор х.
ВНИМАНИЕ!
В листинге 8.19 использованы пользовательские функции решения треугольных СЛАУ, описанные в предыдущем разделе. Если вы набираете листинг "от руки", их можно заменить универсальной встроенной функцией isolve.
Решение СЛАУ при
Листинг 8.19. Решение СЛАУ при помощи разложения Холецкого (продолжение листингов 8.18 и 8.17)
Решение СЛАУ записанной в матричной форме
Листинг 8.2. Решение СЛАУ, записанной в матричной форме
Проверка правильности решения СЛАУ прямой подстановкой, причем в матричной форме, приведена в листинге 8.3. Обратите внимание на матрицу в первой строке листинга, представляющую рассматриваемую систему уравнений. Во второй строке листинга 8.3 производится вычисление нормы невязки, характеризующей точность полученного решения СЛАУ.
Примечание 2
Примечание 2
Такая большая невязка может вызвать совершенно обоснованное удивление читателя. На самом деле точность решения гораздо выше (в данном примере ~10-15, а полученное значение невязки -10-3 объясняется соответствующим представлением вещественных чисел результата на экране (по умолчанию с точностью до 3-го знака).
LUразложение
Листинг 8.20. LU-разложение
Треугольное разложение матрицы системы линейных уравнений производится при ее решении численным методом Гаусса. Фактически именно алгоритм LU-разложения заложен во встроенной функции isolve, применяемой для "точного" решения хорошо обусловленных систем (см. разд. 8.1.2). Таким образом, посредством LU-разложения можно решать СЛАУ с хорошо обусловленной матрицей д.
Почему метод LU-разложения является мощным средством решения СЛАУ и особенно важен при обработке соответствующих экспериментальных данных? Чтобы понять это, заменим исходную систему Аx=b эквивалентной системой PLUх=Pb, а ее, в свою очередь, парой других систем: Lу=Pb и Uх=у. Несложно сообразить, что обе системы решаются прямой подстановкой, т. к. матрицы PL и U — треугольные. Сначала из первой СЛАУ определяется промежуточный вектор у, а затем (из второй системы) — искомый вектор х. Главное преимущество метода LU-разложения заключается в том, что явный вид вектора правой части ь при решении СЛАУ используется только на заключительном этапе (в формулах прямого хода), а наиболее трудоемкие операции по вычислению самих матриц b и и вовсе не требуют знания вектора b. Таким образом, если решается серия СЛАУ с одной и той же матрицей А, но разными правыми частями b (что весьма характерно в обратных задачах интерпретации эксперимента), очень выгодно единожды вычислить LU-разложение матрицы А, а уже затем быстрой подстановкой решить каждую из конкретных систем. Сказанное иллюстрирует листинг 8.21, в котором решается две СЛАУ с матрицей из предыдущего листинга и различными векторами правых частей b.
QRразложение сингулярной матрицы
Листинг 8.22. QR-разложение сингулярной матрицы
Если бы исходная СЛАУ Aх=b не была вырожденной, то можно было сразу записать: QTQ-Rx=QTb, откуда следует (благодаря ортогональности матрицы Q): Rx=QTb. Так как матрица к — треугольная, решение данной системы получается по формулам прямого хода. Если использовать нашу пользовательскую функцию решения треугольной системы (см. разд. 8.3. Т), то результат исходной СЛАУ запишется в виде одной строки кода: trg(R,QTb) (соответствующий пример решения невырожденной СЛАУ вы найдете на компакт-диске).
Обратимся теперь к проблеме решения СЛАУ с сингулярной квадратной NxN или прямоугольной NxM матрицей А. Если ее ранг равен k (он может быть меньше N и м, как в листинге 8.22, где N=M=S, a k=2), то получающаяся треугольная матрица R имеет следующую структуру:
где R1 — верхняя треугольная матрица, a R2 — просто некоторая матрица, а нули обозначают, в общем случае, нулевые матрицы соответствующих размеров.
Если система вырожденная, то она имеет бесконечное множество псевдорешений (векторов, минимизирующих норму невязки). При помощи QR-разложения можно сразу выписать одно из них (правда, не обладающее минимальной нормой). В нашем примере последняя строка матрицы R содержит одни нули, поэтому последняя компонента вектора псевдорешения х может быть абсолютно любой. Если положить х2=0, то остальные компоненты х определятся из треугольной СЛАУ R1x=QTb, как это проиллюстрировано листингом 8.23.
Поиск одного из псевдорешений
Листинг 8.23. Поиск одного из псевдорешений вырожденной СЛАУ посредством QR-разложения (продолжение листинга 8.22 )
Для того чтобы выбрать из всего множества псевдорешений (минимизирующих невязку исходной СЛАУ) нормальное псевдорешение (т. е. обладающее минимальной нормой), необходимо решить соответствующую задачу минимизации (см. разд. 8.2.3). Если построено QR-разложение, сделать это намного легче. Если произвольную компоненту решения обозначить переменной у: х2=у, то она определится из соответствующей задачи оптимизации (листинг 8.24, 1—3 строки), а остальные составляющие самого решения х — из треугольной СЛАУ R1x=QTb-R2y. В последней строке листинга выводится полученное нормальное псевдорешение, а также его норма и соответствующая норма невязки (которые полезно сравнить с результатом прошлого листинга). Вспомогательный Рисунок 8.13 помогает понять структуру минимизируемой функции из листинга 8.24.
Нормальное псевдорешение
Листинг 8.24. Нормальное псевдорешение вырожденной СЛАУ (продолжение листингов 8.22 и 8.23)
Сингулярное разложение сингулярной матрицы
Листинг 8.25. Сингулярное разложение сингулярной матрицы
Венцом современных алгоритмов решения произвольных СЛАУ является SVD-разложение. Прежде чем прокомментировать соответствующий алгоритм, приведенный в листинге 8.26, обратим внимание на матрицу S, которая имеет блочную структуру. Согласно формуле (8.5), из матрицы s можно выделить подматрицу w с ненулевыми диагональными элементами. Дальнейшая последовательность действий по построению нормального псевдорешения выглядит так:
1. Нахождение единственного решения вспомогательной СЛАУ: Wy=UTb (первые два элементы вектора у во второй строке листинга 8.26, которая учитывает диагональность матрицы S).
2. Дополнение вектора нулевыми элементами до размера искомого вектора х.
3. Вычисление х простым умножением x=Vy (третья строка листинга).
Полученный результат (искомый вектор х и промежуточный у) выведен в конце листинга 8.26. Как вы можете убедиться, он совпадает с ответом, полученным в листинге 8.24 (см. предыдущий разд.) при помощи QR-разложения.
Решение вырожденной
Листинг 8.26. Решение вырожденной СЛАУ при помощи сингулярного разложения (продолжение листинга 8.25)
Собственные векторы
Листинг 8.27. Собственные векторы и собственные значения матрицы
Помимо рассмотренной проблемы поиска собственных векторов и значений иногда рассматривают более общую задачу, называемую задачей на обобщенные собственные значения: Ах=?Bх. В ее формулировке помимо матрицы А присутствует еще одна квадратная матрица в. Для задачи на обобщенные собственные значения имеются еще две встроенные функции, действие которых аналогично рассмотренным (листинг 8.28):
Поиск обобщенных
Листинг 8.28. Поиск обобщенных собственных векторов и собственных значений
Проверка правильности решения СЛАУ
Листинг 8.3. Проверка правильности решения СЛАУ
Численное решение СЛАУ
Листинг 8.4. Численное решение СЛАУ
Символьное решение
Листинг 8.5. Символьное решение СЛАУ (продолжение листинга 8.4)="6.gif">
демонстрирует что
Листинг 8.6 демонстрирует, что несовместные системы не могут быть решены ни при помощи встроенной функции isolve, ни посредством вычислительного блока Given/Find.Попытка решения несовместных СЛАУ
Листинг 8.6. Попытка решения несовместных СЛАУ
Примечание 1
Примечание 1
Конечно, в редких случаях система с прямоугольной матрицей может оказаться совместной (если выбран соответствующий вектор ь), как это показано в листинге 8.7. Любопытно, что итерационный алгоритм блока Given/Find справляется с такой задачей, а алгоритм исключения, заложенный в функции Isolve, — нет.
может описывать случай
Листинг 8.7 может описывать случай, когда погрешность эксперимента полностью отсутствует, и система трех уравнений с двумя неизвестными оказывается совместной. А листинг 8.6 является примером куда более типичной ситуации, когда погрешность каждого измерения приводит к тому, что итоговая СЛАУ оказывается несовместной, т. е. не имеет никакого точного решения.Примечание 2
Примечание 2
Простой пример с яблоками и грушами является типичным представителем класса обратных задач, подразумевающих, в частности, восстановление неизвестных входных данных эксперимента по наблюдаемым выходным характеристикам (получаемым в условиях наличия погрешности). Для таких задач развиты специальные методы решения, наиболее простой из которых мы приводим в этом и следующем разделах (не останавливаясь на его обосновании, которое потребовало бы привлечения дополнительных соображений из области математической статистики).
Псевдорешение (метод наименьших квадратов)
Напрашивающийся сам собой путь решения нашего простого примера с грушами и яблоками является хорошей иллюстрацией подхода к общей проблеме переопределенных СЛАУ. А именно, вместо точного решения системы уравнений следует организовать поиск такого вектора х, который будет наилучшим образом удовлетворять всем уравнениям, т. е. минимизировать их невязку (расхождение между вектором Aх и вектором правой части СЛАУ b). Поскольку невязка Аx-b является векторной величиной, то, исходя из практических соображений, минимизации надо подвергать ее норму (т. е. скаляр) |Аx-b|. Этот подход позволит, с одной стороны, получить разумное, с физической точки зрения, решение задачи, а, с другой — использовать полезную информацию, заключенную во всех уравнениях.
Таким образом, при интерпретации переопределенных СЛАУ принято искать не точное решение (которого, как уже отмечалось, при данной постановке задачи просто нет), а псевдорешение — вектор, минимизирующий норму невязки системы уравнений. Таким образом, задача решения линейной системы уравнений заменяется задачей отыскания глобального минимума функции f (x) = |Аx-b|. Повторимся еще раз, что, в полном соответствии с обозначениями, принятыми в Mathcad, х — это неизвестный вектор, а символ модуля (две вертикальные черты) означает операцию вычисления нормы (евклидовой длины вектора). Поскольку эта минимизируемая норма зависит от суммы квадратов компонент неизвестного вектора, то процедура поиска псевдорешения является ни чем иным, как реализацией метода наименьших квадратов (МНК).
График функции двух переменных f(x0,x1) показан в виде трехмерной поверхности на Рисунок 8.1, а несколько его сечений в окрестности минимума — на Рисунок 8.2. Нетрудно сообразить, почему структура функции оказывается именно такой, если вспомнить, что f(x)2 является квадратичной формой относительно неизвестных х0 и x1 Надо отметить, что если бы наша система имела большее число уравнений, то вычислительная задача соответствующим образом усложнилась бы, т. к. минимизацию следовало бы проводить не по двум, а по большему числу переменных.
Обращаясь к практической стороне дела, следует вспомнить, что для решения задач минимизации невязки системы уравнений (см. главу 6) в Mathcad предусмотрены две встроенные функции — Minerr и Minimize. Применение этих альтернативных средств иллюстрируется листингами 8.8 и 8.9 соответственно. В первом случае используется ключевое слово Given для ввода СЛАУ в матричной форме, а во втором — в явном виде определяется функция f(x), подлежащая минимизации. Обе встроенные функции, как вы помните, применяют итерационные численные алгоритмы, и поэтому требуют ввода начальных значений для всех неизвестных, т. е. нулевой итерации (вторая строка обоих листингов).
Пример нахождения
Листинг 8.7. Пример нахождения решения СЛАУ с прямоугольной матрицей
На практике (особенно в последнее время) задачи отыскания решения переопределенных СЛАУ встречаются довольно часто. Приведем простую интерпретацию переопределенной задачи, связанной с обработкой результатов какого-либо эксперимента, например, взвешивания предметов двух типов (для простоты и определенности, совершенно одинаковых яблок и одинаковых груш). Если, согласно постановке задачи, на весы можно положить любое количество предметов любого типа, то модель каждого акта взвешивания представится линейным уравнением, двумя неизвестными в которых будет масса яблока и масса груши. Очевидно, что чем больше взвешиваний мы проведем, тем точнее (в условиях присутствующей в эксперименте погрешности измерений) сможем определить искомые величины.
Обращаясь к числовым примерам листингов 8.6 и 8.7, легко сообразить, что они соответствуют трем актам взвешивания, когда в первый раз на весы кладется одно яблоко и две груши, во второй — три яблока и четыре груши, и в третий — пять яблок и шесть груш.
Поиск псевдорешения при помощи функции Minerr
Листинг 8.8. Поиск псевдорешения при помощи функции Minerr
Поиск псевдорешения при помощи функции Minimize
Листинг 8.9. Поиск псевдорешения при помощи функции Minimize="13.gif">
На первый взгляд, удобнее использовать функцию Minerr, поскольку для нее текст Mathcad-программы (листинг 8.8) выглядит более приближенным к изначальной постановке задачи (а именно, найти приближенное решение заданной системы уравнений). Между тем, выбор функции Minerr таит в себе, по крайней мере, две опасности.
Во-первых, сравнивая результаты, можно с недоумением обнаружить, что они абсолютно различны, причем более похож на правильный ответ, выдаваемый функцией Minimize (об этом можно судить, опираясь на соображение ожидаемой близости псевдорешения к решению системы из листинга 8.7, от которого мы отошли лишь немного). Разгадка заключается в особенностях применения численного алгоритма, заложенного в функцию Minerr. По умолчанию решение линейной системы уравнений производится при помощи линейного алгоритма. Чтобы сменить его на нелинейный, необходимо нажатием правой кнопки мыши вызвать из области имени функции контекстное меню и сменить тип метода Linear (Линейный) на один из нелинейных методов Nonlinear (Нелинейный) (Рисунок 8.3). Однако даже в этом случае, как показывает опыт, наиболее правильный ответ получается только для одного из трех доступных численных алгоритмов.
Матричные разложения
8.3. Матричные разложенияСовременная вычислительная линейная алгебра — бурно развивающаяся наука. Главная проблема линейной алгебры — это решение систем линейных уравнений. В настоящее время разработано множество методов, упрощающих эти задачи, которые, в частности, зависят от структуры матрицы СЛАУ. Большинство методов основано на представлении матрицы в виде произведения других матриц специального вида, или матричных разложениях (или, по-другому, факторизация*). Как правило, после определенного разложения матрицы задача решения СЛАУ существенно упрощается. Кроме того, прибегая к определенным разложениям матриц, можно получить универсальный вид решения, как для "хороших" (см. разд. 8.1), так и для "плохих" (см. разд. 8.2) СЛАУ.
В Mathcad имеется несколько встроенных функций, реализующих алгоритмы наиболее популярных матричных разложений; и мы рассмотрим их вместе с соответствующими типовыми задачами решения СЛАУ. Однако вначале сделаем некоторые важные замечания о решении систем с треугольной матрицей.
Норма псевдорешения в зависимости
Рисунок 8.13. Норма псевдорешения в зависимости от у (продолжение листинга 8.24)
Резюмируя практические аспекты применения QR-разложения, надо отметить, что алгоритмы решения СЛАУ на его основе практически одинаковы как для хорошо обусловленных, так и для сингулярных систем.
Примечание 1
Примечание 1
На прилагаемом к книге компакт-диске вы найдете дополнительные примеры построения QR-разложения как для квадратной, так и прямоугольной матрицы А.
Произвольные системы линейных уравнений
8.2. Произвольные системы линейных уравненийКлассические задачи решения СЛАУ, рассмотренные в предыдущем разделе, предполагают равное количество уравнений и неизвестных, т. е. квадратную матрицу А. Именно для таких систем доказано, что решение существует и единственно, если определитель матрицы |А| #0. Рассмотрим теперь задачи, в которых матрица А не является квадратной либо плохо обусловлена. Разберемся в этом разделе лишь с основными свойствами и идеологией подхода к таким системам, имея в виду, что наиболее эффективными способами их решения являются матричные разложения (см. разд. 8.3).
Регуляризованное решение в зависимости
Рисунок 8.12. Регуляризованное решение в зависимости от ? (продолжение листинга 8.15)
Сечения графика невязки f (х)
Рисунок 8.2. Сечения графика невязки f (х) для трех фиксированных значений х0
Системы линейных уравнений
Системы линейных уравненийОдной из центральных проблем вычислительной линейной алгебры является решение систем линейных уравнений (см. разд. 8.1 и 8.2), отыскание собственных векторов и собственных значений (см. разд. 8.4), а также различные матричные разложения (см. разд. 8.3). Все они будут рассмотрены в данной главе, являющейся, фактически, продолжением предыдущей (которая была посвящена простейшим матричным вычислениям).
Примечание 1
Примечание 1
К системам линейных уравнений сводится множество, если не сказать большинство, задач вычислительной математики. Один из таких примеров подробно рассмотрен в разд. 10.4.
Задачу решения систем линейных алгебраических уравнений (СЛАУ), т. е. систем N уравнений вида
ai1x1+ai2x2+.. .+aiNxN=bi (8.1)
можно записать в эквивалентной матричной форме:
Аx=b, (8.2)
где А — матрица коэффициентов СЛАУ размерности NxN; х — вектор неизвестных; b — вектор правых частей уравнений. Из общего курса линейной алгебры известно, что такая СЛАУ имеет единственное решение, если матрица А является невырожденной или, по-другому, несингулярной, т. е. ее определитель не равен нулю. Самый простой способ решения почти всякой несингулярной системы — использование алгоритма Гаусса, реализованного во встроенной функции isoive (см. разд. 8.1.2).
Примечание 2
Примечание 2
На практике, в основном при решении обратных задач (inverse problems), часто приходится сталкиваться не только со СЛАУ с квадратной матрицей А, но и с прямоугольной матрицей размера MxN, т. е. системами, в которых число неизвестных не равно числу уравнений (как больше, так и меньше него). Такие системы требуют специфического подхода, который будет рассмотрен в разд. 8.2 и 8.3.
Собственные векторы и собственные значения матриц
8.4. Собственные векторы и собственные значения матрицЗавершим главу, посвященную решению СЛАУ, еще одной задачей вычислительной линейной алгебры — задачей отыскания собственных векторов х и собственных значений А, матрицы А, т. е. решения матричного уравнения Ах=?х. Такое уравнение имеет решения в виде собственных значений ?1,?2, ... и соответствующих им собственных векторов x1,x2,... Для решения таких задач на собственные векторы и собственные значения в Mathcad встроено несколько функций, реализующих довольно сложные вычислительные алгоритмы:
Применение этих функций иллюстрирует листинг 8.27. В его конце приведена проверка правильности нахождения первого из собственных векторов и собственных значений, причем подстановка результата в выражение Аx=?x проведена дважды — сначала на числовых значениях х и ?, а потом путем перемножения соответствующих матричных компонентов.
Зависимость невязки регупяризованного
Рисунок 8.11. Зависимость невязки регупяризованного решения вырожденной СЛАУ от параметра А. (продолжение листинга 8.15)
Примечание 6
Примечание 6
Любопытно также применить вместо формулы (8.3) в качестве функционала Тихонова другую зависимость: ?(х,?) = |Ах-b|+?|х-х0 |. Соответствующий пример расчетов вы найдете на компакт-диске.
Биржевой анализ: Технический анализ - Инструменты - Софт
- Биржевой анализ - Технический анализ
- Обучение техническому анализу
- Индексы технического анализа
- Индикаторы технического анализа
- Методы технического анализа
- Графика в техническом анализе
- Технический анализ рынков
- Российский технический анализ
- Инструменты технического анализа
- Математика в биржевом анализе
- Разновидности биржевого анализа
- Mathematica в биржевом анализе
- MathCAD в биржевом анализе
- Maple в биржевом анализе
- Matlab в биржевом анализе