Лекция на тему Система Mathcad
Работа добавлена на сайт bukvasha.net: 2015-07-01Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Лекция №11.
СИСТЕМА MATHCAD
Интерфейс пользователя, документ в системе MathCAD, объекты входного языка, текстовый редактор, графический процессор, вычислитель
В последнее время широкое распространение получили пакеты математических программ (или математические системы), которые можно использовать для различных вычислений и вычерчивания графиков (Mathematica, Derive, Statistica, MathCAD, MathLAB и др.). В этих системах процесс вычислений сильно автоматизирован, что позволяет экономить время и больше внимания уделять физическому смыслу получаемого результата. Выбор системы зависит от характера решаемых задач, от вкуса, от практики.
Система MathCAD -разработка фирмы MathSoft. Примерно каждый год появляется новая версия этой системы. В настоящий момент известна версия Mathcad 12.
Назначение системы: MathCAD - это интегрированная система программирования, ориентированная на проведение математических и инженерно-технических расчетов. MathCAD содержит текстовый редактор, вычислитель, символьный процессор и графический процессор.
Вид окна системы MathCAD аналогичен окнам приложений ОС семейства Windows (Word, Exel и др.).
1. Интерфейс пользователя в системе MathCAD. Интерфейс пользователя состоит из:
строки заголовка
;
строки главного меню
;
из строки состояния
,
которая включается командой View/Status Bar, и на которой отображается следующая информация (слева направо): контекстно-зависимая подсказка о готовящемся действии, режим вычислений (AUTO (автоматический) или Calc 9 (ручной)), режим Gaps Lock (CAP), режим Num Lock (NUM,), номер страницы, на которой находится курсор (Page 1);
из панелей Standard, Formatting, Math, Controls, Recources:
На каждой из панелей имеется характерная вешка перемещения в виде выпуклой вертикальной черты в начале каждой панели. С помощью нее можно переносить панели в любое место окна редактирования или "прилепить" ее к любой стороне окна.
Настройка состава панелей инструментов. Установить курсор над нужной панелью и правой кнопкой вызвать контекстное меню, из которого выбрать пункт Customize (Настроить), появится диалоговое окно. В левой панели этого окна расположены еще не добавленные пиктограммы, в правой – добавленные. По команде Add пиктограмма переходит в правое окно, а по команде Remove пиктограмма возвращается в левую панель.
Пиктограммы панели дублируют основные команды главного меню. На панели собраны команды, предназначенные для форматирования текста, такие как изменение стиля и шрифта текста, выравнивание, создание списков.
Панель служит для вставки в документ стандартных элементов управления интерфейса пользователя (флажков, переключателей, полей ввода и т.п.).
Панель служит для вызова ресурсов MathCAD (примеров, учебников, но только на английском языке).
Наибольший интерес для нас в системе MathCAD представляет математическая панель . Она содержит перемещаемые палитры математических знаков, которые служат для ввода практически всех известных математических символов и шаблонов операторов и функций
1. – служит для ввода арифметических операций и часто используемых простых функций. Эта палитра фактически дублирует обычный калькулятор.
2 – содержит команды для построения семи типов графиков.
3. - для создания векторов и матриц и некоторые операции для работы с ними.
4. - для вставки операторов управления вычислениями и для ыставки пользовательских операторов..
5. - эта палитра содержит операции высшей математики (производные, интегралы, пределы и др.),а также знак бесконечности .
6. - для вставки операций сравнения и логических операций Not, And, Or
7. - инструменты программирования системы MathCAD.
8. - палитра для набора греческих символов.
9. - содержит ключевые слова, управляющие символьными вычислениями.
10 эта панель вместе с панелью содержит ключевые слова, используемые при символьных вычислениях. Здесь расположены команды, задающие тип символьной переменной.
2. Документ в системе MathCAD. Состоит из блоков, т.е. отдельных частей. В документе блоки имеют точку привязки, расположенную слева
Блоки м.б. трех типов - текстовые, вычислительные, графические. Текстовые блоки играют роль неисполняемых комментариев. Они служат лишь для повышения наглядности документа. Вычислительные блоки состоят из исполняемых математических выражений, например, формул, уравнений, равенств неравенств и т.д. Графические блоки также являются исполняемыми.
Блоки можно перемещать по документу и располагать в удобной для пользователя форме, но для правильного функционирования системы имеет большое значение правильный порядок расположения блоков. Например, если в некотором блоке содержатся операции, требующие данных из другого блока, то этот другой блок обязательно должен выполняться первым и располагаться перед использующим его блоком. Иная ситуация приведет к появлению ошибки. Сигнал ошибки имеет вид надписи, от которой отходит черта, указывающая место ошибки:
При манипуляциях с блоками на экране могут оставаться нежелательные искажения. Для их устранения следует использовать команду Refresch (обновить) меню View.
В документе MathCad эффективно решена проблема сквозной передачи данных от одного блока к другому, например, от одного математического выражения к другому, от него к таблицам, от таблиц к графикам и т.д. Поэтому изменение в любой формуле или в задании входных данных тут же ведет к пересчету задачи по всей цепи взаимодействия блоков (это не относится, однако к символьным операциям, реализуемым с помощью команд меню).
Размеры блоков устанавливаются автоматически в зависимости от числа входящих в них знаков, либо от заданных размеров графиков. Обычно границы блоков не видны, но можно установить подсвеченный режим показа блоков (команда View Regions)
Блоки не должны налагаться друг на друга
.
Если такое произошло, то надо воспользоваться командой разделения перекрывающихся областей в документе (Formatt/Separate Regions), предварительно выделив эти перекрывающиеся области.
Сразу после запуска система готова к созданию документа с необходимыми пользователю вычислениями. Соответствующее новому документу окно редактирования получает название Untitled: N , где N – порядковый номер документа.
При сохранении на диск документ системы MathCad записывается в файл с расширением .mcd.
Окно редактирования содержит (даже когда очищено) два важных объекта – курсор ввода в виде красного крестика и вертикальную линию, отделяющую текущую страницу от соседней (справа) . Если документ большой, то в некотором месте будет наблюдаться и прерывистая горизонтальная линия раздела страниц . Эти линии раздела показывают, каким образом будет осуществляться разбиение на страницы при распечатке документа на принтере. Изменить параметры страницы можно с помощью команды File/Page Setup.
В окне редактирования документа можно включить линейку с помощью команды View/Ruler . Масштаб документа можно изменить по команде View/Zoom.
3. Текстовый редактор служит для ввода и редактирования текстов. Именно тексты делают документы MathCad документами в общепринятом смысле этого слова.
В простейшем случае для ввода текста достаточно ввести символ " на английском регистре. Нередко пользователь начинает набор текстов, забыв установить кавычки. MathCad воспринимает такой набор как ввод математического выражения. Однако, нажав клавишу Пробел, можно тут же превратить набранный фрагмент в текстовый. Признаком текстового блока являются черные квадратики на правой и нижней границах блока, а курсор в текстовом блоке приобретает вид красной вертикальной черты .
Текст может состоять из слов, математических выражений и формул, спец. знаков. Русский текст вводится с помощью любого кириллического шрифта Courier, Times New Roman Cyr, Arial Cyr). Также для работы с текстом предусмотрены команды меню Format/Text и Format/Paragraph. Можно создать текстовую область (текст начинается на позиции курсора), создать текстовый параграф (текст начинается первой строкой на позиции курсора), форматировать текст (панель форматирования), внедрять в текст математические формулы (команда Insert/Math Region , при этом надо находится в текстовом блоке), проверять орфографию (Check Spelling) для англоязычных текстов, изменять размер шрифта, начертание, цвет текста и т.д. Т.е. для текстовых блоков используются типовые средства редактирования (как в любых текстовых редакторах).
4. Графический процессор служит для создания графиков. Это очень удобно для вывода результатов математических расчетов в графической форме. Графики могут размещаться в любом логически дозволенном месте документа, т.е. после тех вычислительных блоков системы, которые готовят исходные данные для построения графиков.
После включения графического процессора для двухмерного графика на экране появляется шаблон будущего графика в виде прямоугольной рамки с маленькими прямоугольниками, расположенными вдоль осей x и y .
Крайние задают пределы изменения переменных (пределы проставляются системой автоматически, но можно их изменять - для этого в диалоговом окне Formatting флажок "autoscale" надо отключить), а в средние надо ввести имена аргумента и функции. После нажатия Enter график будет построен. Для форматирования графика достаточно сделать двойной щелчок по полю графика, при этом появится диалоговое окно Formatting.
Если строятся графики нескольких функций в одном шаблоне, то имена функций следует разделять запятыми.
5. Вычислитель(формульный редактор) обладает поистине уникальными возможностями. Он обеспечивает вычисления по сложным математическим формулам, имеет большой набор встроенных математических формул, позволяет вычислять ряды, суммы и произведения, интегралы и производные, работать с комплексными числами, производить символьные преобразования, решать линейные и нелинейные уравнения, проводить минимизацию функций, выполнять векторные и матричные операции. В вычислитель входят и такие мощные средства, как линейная и сплайн-интерполяция, прямое и обратное быстрое преобразование Фурье.
Для запуска формульного редактора достаточно установить указатель мыши в любом свободном месте окна документа, щелкнуть левой кнопкой и начинать ввод. Поместить формулу в документ можно, просто начиная вводить символы, числа или операторы . Во всех этих случаях на месте курсора ввода создается математическая область (регион) с формулой, содержащей и линии ввода. В области формульного блока курсор ввода превращается в синий уголок, указывающий направление и место ввода. Клавиша Insert меняет направление охвата курсором объекта. Для расширения охваченной уголком области (вплоть до полного охвата выражения) нужно пользоваться клавишей Пробел .
Перемещать линии ввода внутри формульного блока можно также с помощью клавиш со стрелками или щелкая в нужном месте мышью.
Большинство операций редактирования формул реализованы естественным образом, однако некоторые из них несколько отличаются от общепринятых, что связано с особенностью MathCAD как вычислительной системы, например, вставка операторов. Операторы могут быть унарными (действующими на один операнд)и бинарными (действующими на два операнда) . При вставке нового оператора в документ MathCAD определяет, сколько операндов ему требуется. Если в точке вставки оператора один или оба операнда отсутствуют, MathCAD автоматически помещает рядом с оператором один или два местозаполнителя. То выражение в формуле, которое выделено линиями ввода в момент вставки оператора, становится его первым операндом
.
Как видно, MathCAD сам расставляет, если необходимо, скобки, чтобы часть формулы, отмеченная линиями ввода, стала первым операндом. Местозаполнители (черный квадратик – для символа и прямоугольная рамка – для оператора) появляются внутри незавершенных формул . Символ в черный квадратик вводится обычным образом, а чтобы в прямоугольную рамку ввести оператор, например +, необходимо курсор расположить перед этой прямоугольной рамкой .
6. Основные объекты входного языка системы MathCAD.
Фактически документы MathCad представляют собой программу, написанную на визуально-ориентированном языке программирования. Визуально- ориентированные языки программирования задают программу не в виде малопонятных кодов, а в виде визуально понятных объектов. Язык программирования MathCad ориентирован на математические вычисления и потому практически не отличается от обычного языка математических статей, отчетов и книг.
Входной язык MathCad относится к интерпретируемому типу. Это значит, что, когда система опознает какой-либо объект, она немедленно исполняет указанные в блоке операции.
Визуально-ориентированный язык общения системы MathCad надо отличать от языка реализации системы, т.е. обычного языка программирования высокого уровня, на котором написана система. Языком реализации системы MathCad является один из самых мощных языков высокого уровня – С++.
По существу входной язык системы – промежуточное звено между скрытым от пользователя языком документа и языком реализации системы. По мере того как пользователь создает (средствами текстового, формульного, символьного и графического редакторов) в окне редактирования объекты (тексты, формулы, таблицы и графики), система сама составляет программу на некотором промежуточном языке связи. Эта программа хранится в оперативной памяти до тех пор, пока не будет записана на диск в виде файла с расширением .mcd. Однако от пользователя не требуется знание языков программирования (реализации и связи), достаточно освоить приближенный к естественному математическому языку входной язык системы.
К основным объектам входного языка системы MathCAD можно отнести: алфавит, константы, переменные, операторы, функции.
Алфавит – строчные и прописные латинские буквы, цифры от 0 до 9, греческие буквы. Следует отметить, что MathCAD различает строчные и прописные буквы (X и x – разные переменные) и различает шрифт (X и X – тоже разные переменные). Также в алфавит входят символ бесконечности ¥, штрих ¢(набирается с помощью клавиш ctrl/F7), символ подчеркивания _, символ процента, нижний индекс (набирается с помощью клавиши «.», индекс в определении имени переменных и функций, например К2 , не надо путать с числовым индексом векторной переменной). Имя переменной или функции в системе MathCAD может быть любой длины, но:
имена не должны начинаться с цифры, символа подчеркивания, штриха или процента;
символ бесконечности может быть только первым в имени;
все буквы в имени должны иметь один стиль и шрифт;
имена не могут совпадать с именами встроенных функций, констант и размерностей, например, sin или TOL. Тем не менее, допускается их переопределение, но тогда одноименная встроенная функция не будет использоваться по первоначальному назначению;
MathCAD не различает имен переменных и функций: если сначала определить функцию f(x), а потом переменную f, то в оставшейся части документа будет утерян доступ к функции f(x);
в некоторых случаях желательно использовать имена переменных и функций, содержащие символы операторов MathCAD или другие символы, которые нельзя вставлять в имена непосредственно, для этого надо набрать комбинацию клавиш Ctrl/Shift/J, которая позволит вставить пару квадратных скобок с местозаполнителем внутри . Имя, составленное из любых символов и заключенное в эти квадратные скобки, MathCAD будет воспринимать корректно .
Константы – это числа и предварительно определенные системные константы:
.
Эти значения системных констант устанавливаются после загрузки системы.
- погрешность для условий ограничения при решении оптимизационных задач с применением функций Find, Minerr, Maximize, Minimize;
- ширина столбца, используемая при записи файлов функцией WRITEPRN;
- число значащих цифр при записи файлов функцией WRITEPRN.
Формат вывода системных констант можно изменить. Для этого достаточно дважды щелкнуть по числу в блоке вывода результата, при этом появится диалоговое окно, в котором надо будет установить число знаков после запятой
.
Таким же образом можно изменить формат вывода любых других результатов вычислений. По умолчанию формат вывода имеет три знака после запятой.
Значения некоторых системных констант можно изменить с помощью команды / в диалоговом окне
,
либо эти значения можно переопределить через оператор присваивания .
Переменные – это объект, числовое значение которого может меняться по ходу выполнения документа. Для присваивания переменной числа или результата выражения используется знак локального присваивания , который можно набрать с клавиатуры (клавиша «двоеточие» на латинском шрифте), с палитры и с палитры . Знак присваивания в системе MathCAD означает, что действие происходит справа налево (а не слева направо). Если при оформлении документа необходимо, чтобы присваивание выглядело на экране как знак равенства без двоеточия, то правой кнопкой надо вызвать контекстное меню и в диалоговом окне вместо пункта “Default” выбрать пункт “Equal”
.
Знак обычного равенства (который применяется в системе MathCAD в основном для вывода результата) можно использовать только для первого присваивания.
При локальном присваивании надо обязательно соблюдать правильное расположение блоков. Но иногда в документах возникает необходимость использовать значение некоторой переменной выше на листе, чем расположен оператор присваивания
.
В таких случаях вместо локального присваивания используется знак глобального присваивания , который можно набрать либо с клавиатуры (клавиша «волнистая черта»), либо с палитры . Если в документе используется глобальное присваивание, то MathCAD проводит вычисления в следующей последовательности: вычисляются сверху вниз все блоки с оператором глобального присваивания, а затем снова с самого начала документа вычисляются сверху вниз все оставшиеся блоки. Это означает, что в блоках с оператором глобального присваивания нельзя использовать результат вычислений из обычного блока.
В отличие от языков программирования система MathCAD не требует точного задания типов переменных: целочисленные, вещественные, комплексные, текстовые, логические. Тип переменной автоматически определяется присвоенным ей значением:
.
В нижней строке показан результат вывода соответствующей переменной. Целые переменные пояснений не требуют.
Вещественная переменная может быть набрана и как десятичное число с любым количеством десятичных цифр после точки , и в экспоненциальной форме, для чего после ввода числа надо напечатать символ умножения и ввести 10 в нужной степени .
При вводе комплексных переменных мнимая единица набирается с палитры , либо с клавиатуры как. Если просто набрать как , то она будет восприниматься как простая переменная. Форму представления мнимой единицы можно изменить . Для этого дважды щелкнуть в окне вывода с мнимой единицей и в диалоговом окне сделать соответствующий выбор
.
Текстовая переменная заключается в кавычки. Значением логической переменной может быть 0 (что соответствует «лжи») или 1 (что соответствует «истине»).
В MathCAD есть и специальный тип переменных, именуемых ранжированными или циклическими переменными, которые задаются следующим образом:
Ранжированная переменная, так же как и массив, хранит целый набор значений, но, в отличие от массивов, невозможно получить доступ к отдельному элементу этой переменной. С помощью ранжированных переменных можно задать значения всех элементов матрицы или вывести график по точкам
.
Верхняя граница ранжированной переменной необязательно должна быть элементом последовательности, это число просто ограничивает последовательность сверху (или снизу для убывающей последовательности).
Массивы. Большим преимуществом системы MathCAD является возможность оперировать не только скалярными величинами, но и с массивами. MathCAD поддерживает два вида массивов – одномерные (векторы) и двумерные (матрицы). Элементы массивов характеризуются числовыми индексами, которые вставляется с помощью клавиши “[”, либо командой с панели . Обычно нумерация идет с нуля. Нумерация задается значением системной переменной ORIGIN, которая по умолчанию равна нулю. V0- первый элемент вектора, M 0, 0- первый элемент матрицы. Можно обратиться не только к элементу массива, но и к его колонке, например, M<0>- первая колонка матрицы. Элементами массива могут быть числа, константы, переменные, математические выражения и даже другие массивы. Соответственно массивы могут быть численными и символьными. Основные операции для работы с векторами и матрицами собраны на панели .
Существует несколько способов создания массивов. Самый простой и наглядный способ создания матрицы с помощью команды Insert/Matrix . При вызове этой команды появляется диалоговое окно, в котором надо задать число строк и число колонок матрицы (вектор - это матрица с одной колонкой). Появится шаблон матрицы, в черные квадратики которого надо ввести значения элементов матрицы.
.
Добавление в уже созданную матрицу строк или столбцов производится точно так же. Для этого надо выделить элемент матрицы, правее и ниже которого будет осуществлена вставка столбцов и (или) строк
Для того, чтобы удалить строки и столбцы из матрицы, надо установить курсор на элемент матрицы, который находится в самом левом столбце из тех, которые нужно удалить и в самой верхней строке из тех, которые нужно удалить
Также матрицу можно создать через определение его элементов
Развернуть вложенные массивы можно, установив, флажок
(Разворачивать вложенные массивы) в окне
Есть и другие способы создания матриц – создание матрицы с помощью таблицы ввода, создание матрицы путем импорта данных.
Функции. В системе MatCAD различают встроенные функции (функции, заранее введенные разработчиком системы) и пользовательские функции (созданные пользователем).
Встроенные функции. Вставляются с помощью команды Insert/Function или набором с
клавиатуры. При этом следует помнить, что имена встроенных функций чувствительны к регистру, их следует вводить в точности, как они приведены в системе. Параметры встроенных функций заключаются в скобки. В качестве параметра м.б. константа, переменная или математическое выражение, при этом константа, переменная, выражение должны быть определены ранее
Функции пользователя. В MathCAD, как и в языках программирования, есть возможность задания функций пользователя. Имена функций пользователя подчиняются тем же правилам, что и имена переменных. Для задания функции пользователя нужно ввести имя, а затем в круглых скобках через запятую ввести все аргументы. Для аргументов можно использовать любые имена, подчиняющиеся тем же правилам, что и имена переменных. Далее, как обычно, надо ввести оператор присваивания и после него – выражение, зависящее от введенных аргументов. Все переменные, присутствующие справа в выражении определения функции, либо должны входить в список аргументов функции, либо должны быть определены ранее. В противном случае будет выведено сообщение об ошибке, причем имя неопределенной переменной будет выделено красным цветом
Операторы. Каждый оператор в MathCAD обозначает некоторое математическое действие в виде символа
.
Каждый оператор действует на одно или два числа (переменную или функцию), которые называются операндами. Если в момент вставки оператора одного или обоих операндов не хватает, то недостающие операнды будут отображены в виде местозаполнителей. Математические палитры содержат сгруппированные по смыслу математические операторы:
Операторы, обозначающие арифметические действия, называются арифметическими и вводятся с палитры .
Операторы, которые вставляются с палитры (Вычисления), называются вычислительными операторами (дифференцирование, интегрирование, суммирование, вычисление произведения, пределы).
Логические операторы – вводятся с палитры .
Матричные операторы – предназначены для совершения различных действий над векторами и матрицами, вводятся с палитры .
Операторы выражения – сгруппированы на панели (Evaluation – Выражения) (оператор численного вывода , оператор локального присваивания , оператор глобального присваивания , оператор символьного вывода).
Операторы пользователя. Запросы взыскательного пользователя могут не исчерпываться набором встроенных операторов MathCAD. Для вставки в документы заранее созданных операторов пользователя применяется панель. Оператор пользователя может иметь абсолютно любое имя. Присваивать оператору некоторое действие следует точно так же, как функции пользователя. Создание бинарного оператора выглядит
след. образом:
.
Унарный оператор пользователя создается аналогично
Вывод результатов вычислений и значений переменных осуществляется с помощью
знака обычного равенства . В различных задачах выводить результаты вычислений требуется в различном виде: как десятичную или простую дробь, десятичную дробь в обычной или экспоненциальной форме. Формат вывода задается командой Forma/Result. После вызова этой команды (двойной щелчок на нужном блоке) появляется диалоговое окно Result Format:
В списке Format слева можно выбрать один из пяти различных форматов отображения числа, а с помощью полей и флажков справа можно настроить выбранный формат.
General – это используемый по умолчанию формат результатов вычислений. Число представляется в виде десятичной дроби. Количество знаков после запятой задается в поле . Если установлен флажок , то дробь будет при необходимости дополнена нулями до количества знаков, указанных выше . Поле задает границу перехода ET (Exponential threshold) к экспоненциальной форме (такую форму числа приобретают, если их значение больше 10ET и меньше 10-ET). При установленном флажке в экспоненциальной форме записи используются только порядки, кратные трем . Это является стандартной инженерной формой записи, поскольку для физических величин в системе CИ со степенями, кратными трем, связаны различные стандартные приставки: кило-, мега-, милли- и др.
Decimal – формат вывода результата в виде десятичной дроби без экспоненты.
Scientific – в этом формате результат всегда выводится в экспоненциальной форме.
Engineering – также используется только экспоненциальная форма записи дробей, но при этом используются только порядки, кратные трем.
Fraction – в этом формате результат выводится в виде простой дроби
В диалоговом окне Result Format также можно изменять представление машинного нуля для комплексных чисел CT (Complex threshold) (если Re(Z)/Im(Z) > 10CT, то Z выводится
как реальное, если наоборот, то как мнимое) и значение машинного нуля ZT (Zero threshold)
.
Формат вывода может быть глобальным и локальным. Чтобы установить локальный формат, можно сделать двойной щелчок по блоку, при этом появится диалоговое окно Result Format. Данный блок будет иметь локальный формат, а все остальные - глобальный.
Управление процессом вычислений. После запуска MathCAD находится в режиме автоматических вычислений. Это означает, что при внесении каких-либо изменений в документ, все видимые в данный момент формульные блоки и графики пересчитываются и строятся заново. В некоторых случаях такой режим работы может быть нежелательным, например, если в документе есть сложные вычисления, требуется обработка больших объемов данных или выполняются операции, занимающие много времени. В таких случаях работать с документом оказывается очень неудобно, и возникает необходимость запретить автоматическое вычисление либо всего документа, либо для блоков, содержащих наиболее сложные вычисления.
Для того чтобы отключить/включить режим автоматического вычисления для всего документа, надо выбрать команду меню //. При отключенном режиме автоматического вычисления, для того чтобы пересчитать все блоки в документе можно выбрать команду меню //. Для того чтобы пересчитать не весь документ, а лишь тот блок, в котором находится курсор, следует выбрать команду меню // (если курсор находится в свободном месте рабочей области документа, то пересчитаны будут все блоки, которые в данный момент видны на экране).
Для того чтобы временно отключить вычисление одного блока, можно воспользоваться командой контекстного меню . После выбора этой команды MathCAD при просчете документа вообще не будет «обращать внимания» на данный блок и производить вычисления так, как будто его удалили. Для того чтобы возобновить вычисление «отключенного» блока, нужно выбрать команду контекстного меню .
Прервать вычисление можно клавишей <Esc>. При этом оставшаяся часть формул будет подсвечена красным цветом.
Единицы измерения физических величин. При проведении физико-технических расчетов почти всегда имеют дело не просто с абстрактными числами, а с некоторыми физическими величинами. Для того чтобы число в выражении рассматривалось как некоторая физическая величина, нужно ввести единицы измерения следующим образом: после введенного числа ввести знак умножения, выбрать команду /, в диалоговом окне в списках и выбрать нужную единицу измерения . Над размерными переменными можно производить любые корректные с физической точки зрения расчеты . Нельзя складывать переменные разной размерности, будет получено сообщение об ошибке . Но позволяется складывать, например, амперы с кило амперами .
Для любого результата вычислений есть возможность изменить его единицы измерения. Если щелкнуть на формульном блоке, содержащем результаты вычислений, то справа от единиц измерения результата появится черный квадратик – поле ввода единиц измерения, к которым необходимо привести результат. Если введенные здесь единицы измерения не будут соответствовать единицам результата, то MathCAD автоматически допишет нужный коэффициент . В MathCAD по умолчанию все результаты вычислений представлены в системе СИ. Однако систему измерений можно изменить с помощью команды / и диалогового окна
.
Вопросы
Назначение системы MathCAD. Какие еще пакеты математических программ вы знаете?
Интерфейс пользователя в системе MathCAD.
Документ в системе MathCAD(заголовок, расширение при сохранении на диск, типы и расположение блоков, точка привязки блока, размеры блоков, сквозная передача данных в документе).
Объясните, что такое входной язык системы MathCAD и язык реализации системы MathCAD?
Перечислите основные объекты входного языка системы MathCAD. Расскажите об алфавите языка и о встроенных и пользовательских функциях системы MathCAD. Что такое определение функции и обращение к функции?
Константы и переменные в системе MathCAD? Как задаются типы данных в MathCAD? Что такое глобальное и локальное присваивание переменных в документе MathCAD? Как вставляется мнимая единица для комплексных чисел? Что такое ранжированная переменная и как она задается?
Как задаются массивы в MathCADе? Как можно добавлять строки и столбцы в готовые матрицы? Как удаляются строки и столбцы из матриц?
Перечислите операторы входного языка системы MathCAD?
Как осуществляется вывод результатов в системе MathCAD? Как можно настроить формат вывода результатов? Как осуществляется управление процессом вычислений в системе MathCAD?
Как работать с единицами измерений физических величин в системе MathCAD?
Подробно охарактеризуйте текстовые, графические и математические блоки.
Лекция №12
Построение и форматирование графиков
Почти ни один технический расчет не обходится без построения графиков. Графики являются удобнейшим средством представления любой информации. MathCAD обладает обширным арсеналом средств для построения двух- и трехмерных графиков и диаграмм.
На графиках могут быть изображены как функции, так и наборы данных (массивы), хотя в действительности при изображении функций они преобразуются в набор точек, т.е. в тот же массив.
Графики функций одной переменной (двухмерные графики).
Графики в декартовой системе координат.
При построении графика функция представляется в виде набора точек на плоскости. Т.е. для построения графика перебирается определенное количество значений аргумента, и для каждого из них вычисляется значение функции. При упрощенном способе построения, когда диапазон аргумента задается автоматически, по оси абсцисс выбирается диапазон [-10, 10], а количество точек равно 100. Для того, чтобы иметь возможность при построении графика управлять количеством точек, аргумент надо задать как ранжированную переменную. При этом количество точек можно менять либо через шаг ранжированной переменной, либо непосредственно задавать количество точек N.
Изображение нескольких функций на одном графике. Для этого нужно ввести их в поле ввода функции через запятую (при этом каждая из них может зависеть от своего аргумента). Если необходимо, можно также через запятую ввести аргументы каждой функции в поле ввода аргументов. Максимально можно изобразить на одном графике 16 различных функций. Функции, построенные на одном графике, изображаются линиями различного цвета и типа. Цвета и типы линий можно изменить.
Ранжированные переменные дают возможность построить не только график функции, но и графически изобразить одномерный массив или вектор. В этом случае ранжированная переменная играет роль индекса – номер элемента вектора. Поэтому ее шаг обязательно должен равняться единице.
Масштаб.
Черные уголки на графике означают, что границы по осям выбираются автоматически. Границы можно изменить, для этого вместо старого значения надо ввести новое. Если необходимо, чтобы граница снова устанавливалась автоматически, то нужно щелкнуть на этой границе и удалить введенное в нее число, оставив незаполненным поле ввода. Если после этого установить курсор где-нибудь вне графика, то удаленная граница будет выбрана автоматически.
Есть другой более удобный способ изменения масштаба графика: установить курсор на поле графика, вызвать контекстное меню, выбрать команду Zoom, появится диалоговое окно; после чего на поле графика выбрать область, которую надо увеличить, а в диалоговом окне выбрать кнопку Zoom.
Чтобы увеличить масштаб всего графика, надо пользоваться черными квадратиками, расположенными справа и внизу по границе графика.
Трассировка.
Трассировка позволяет очень точно изучить строение графика. Для того, чтобы включить режим трассировки, щелкните в области графика правой кнопкой мыши и выберите в контекстном меню пункт Trace. В результате появится окно трассировки, а в окне графика вы увидите две пересекающиеся пунктирные линии. Перемещая указатель по графику, вы тем самым передвигаете точку пересечения линий трассировки. При этом координаты точки указываются с высокой точностью в окне трассировки в полях X-Value иY-Value. Нажатие кнопки Copy X или Copy Y копирует соответствующее число в буфер обмена. В дальнейшем его можно вставить в любое место документа или в маркер.
2. Графики в полярной системе координат (Polar Plot).
В полярной системе координат каждая точка задается двумя координатами: радиус-вектором и полярным углом. При изображении графика в полярной системе координат функция обычно задает зависимость радиус-вектора от угла. Если аргумент не был описан ранее как ранжированная переменная, то выбирается стандартный диапазон изменения угла - 2p. Для полярного графика можно изменять границы только радиус-вектора. Поля для изменения этих границ расположены справа от графика. Здесь проявляется особенность полярных графиков в MatCAD – возможность установки для нижней границы радиус-вектора значений, отличных от нуля, т.е. можно получить график, для которого в начале координат радиус будет равняться, например, пяти.
3. График параметрически заданной функции.
В выше приведенных графиках при их построении в одном поле ввода задавали функцию, а в другом – аргумент. Но, кроме явного, существуют и другие способы задания функции. Например, можно задать функцию параметрически, т.е. указать зависимость обеих координат от некоторого параметра. В MathCAD можно построить график неявно заданной функции, если ввести в оба поля ввода функции, зависящие от одного параметра
Выше приведенные команды Zoom и Trace также справедливы для полярных графиков и для параметрически заданных.
Форматирование двухмерных графиков.
Вызов диалогового окна для форматирования графика осуществляется двойным щелчком мыши по полю графика.
Можно форматировать оси графика (X-Y Axes), линии на графике (Traces) – это форматирование понятно из контекста.
Для нанесения текстовых подписей используется вкладка Labels. Текстовые подписи форматируются стилем Variable, который используется для всех буквенных выражений в вычисляемых блоках. Для того чтобы этот стиль правильно отображал русские буквы, установите курсор на любом буквенном выражении в блоке формул или на графике. При этом в поле, отображающем текущий стиль, должно быть написано – Variable. Теперь выберите из раскрывающегося списка шрифтов шрифт, поддерживающий кириллицу, Times New Roman Cyr. После этого все введенные на русском языке подписи к графикам отобразятся правильно. Этот способ вставки подписей имеет несколько существенных недостатков: нельзя изменить их положение относительно осей, нельзя изменить форматирование шрифта конкретной подписи, нельзя создать подписи непосредственно в области осей координат для большей наглядности графика. Поэтому есть также другой, лишенный перечисленных недостатков, способ – ввести все необходимые подписи в виде текстовых блоков, отформатировать их нужным образом, а затем «перетащить» их в нужное место графика. После надо вызвать контекстное меню и выбрать команду «Bring to Front» (поместить перед графиком), иначе подпись будет невидимой, она закрыта полем графика.
Графики функций двух переменных (трехмерные графики).
Не все графики, называемые трехмерными в MathCAD, являются трехмерными в действительности. Они называются трехмерными только потому, что отображают функции двух переменных (или матрицы). В MathCAD есть следующие типы трехмерных графиков.
Surface Plot (График поверхности) – график в виде трехмерной поверхности;
Contour Plot – (Контурный график или линии уровня) – также график поверхности, но спроектированный на одну из координатных плоскостей, а изменение функции по оставшейся оси изображается в виде линии уровня;
Scatter Plot – отображение набора точек в трехмерном пространстве;
Vector Field Plot – изображение двухмерного векторного поля;
Bar Plot – трехмерная гистограмма;
Patch Plot - также гистограмма, но отображающая только верхние грани столбиков.
Для каждого из этих графиков, кроме Patch Plot, есть отдельная кнопка на панели инструментов Graph. Также можно выбрать тип графика уже после создания в окне форматирования.
После выбора соответствующего типа графика появится шаблон с тремя координатными осями и местозаполнителем. В этот местозаполнитель следует ввести либо имя z функции двух переменных z(x,y) для быстрого построения трехмерного графика, либо имя матричной переменной Z, которая задает распределение данных ZX,Y на плоскости XY. Для графиков, основой которых служат матрицы, шкалу плоскости XY приходится задавать вручную. MathCAD просто рисует поверхность, точки в пространстве или линии уровня, основываясь на двумерной структуре этой матрицы. При быстром же построении графиков имеется возможность строить их в различном диапазоне аргументов, подобно двумерным графикам.
Вид трехмерного графика зависит от того, как он развернут относительно точки просмотра. Можно: 1) задавать угол обзора из окна форматирования мышью; 2) при нажатой клавише Ctrl можно мышью удалять или приближать объект к наблюдателю; 3) при нажатой клавише Shift можно инициировать анимацию («живую» картинку), для останова вращения надо щелкнуть кнопкой мыши.
Если строится графики нескольких функций в одном шаблоне, то имена функций следует разделить запятыми.
График линий уровня. Линией уровня функции двух переменных X, Y называется геометрическое место точек в плоскости xOy, в которых функция принимает одно и то же значение. Линии уровня функции z = f(x,y) определяются уравнением f(x,y) = c, где с = const.
Показ цифр на графике можно включить вкладки окна форматирования трехмерного графика.
Векторное поле.
График векторного поля несколько отличается от остальных типов двухмерных графиков. Его смысл заключается в построении некоторого вектора в каждой точке плоскости XY. Чтобы задать вектор на плоскости, требуется два скалярных числа. Поэтому в MathCAD принято, что векторное поле задает комплексная матрица. Действительные части каждого ее элемента определяют проекцию вектора на ось X, а мнимые – на ось У.
Можно матрицу набрать вручную. А можно ее представить и как векторную функцию.
График параметрически заданной поверхности и график параметрически заданной кривой.
Для параметрического задания поверхности требуется три функции двух переменных. Каждая из этих функций задает одну из координат точек поверхности. Эти три функции нужно ввести в поле ввода трехмерного графика через запятую. Но для того, чтобы они воспринимались как одна поверхность, их нужно взять в скобки. Диапазон изменения параметрических переменных, так же как и в случае простого графика поверхности, можно изменить с помощью полей вкладки в окне форматирования трехмерного графика.
Кроме параметрической поверхности, можно также изобразить на трехмерном графике параметрическую кривую. Для этой цели подойдет трехмерный график типа Scatter Plot (точечный график). Параметрическая кривая в пространстве задается тремя функциями одной переменной. Для того чтобы получить приведенный выше график, на вкладке окна форматирования графика в группе Range был установлен диапазон изменения параметрической переменной от 0 (поле ввода Start) до 20 (поле End) и количество точек – 50.
Остальные типы графиков (точечные, гистограмма) пояснений не требуют.
Форматирование трехмерных графиков.
MathCAD представляет очень богатые возможности для форматирования трехмерных
графиков. Для вызова диалогового окна форматирования трехмерного графика достаточно по полю графика сделать двойной щелчок мышью. В этом окне доступно большое количество параметров, изменение которых способно очень сильно повлиять на внешний вид графика. Они сгруппированы по принципу действия на нескольких вкладках.
Вкладка позволяет изменить тип графика (поле Plot), ориентацию графика в пространстве (Rotation – вращение, Tilt – наклон, Twist – поворот, Zoom - масштаб), менять стиль осей (Perimeter – периметр, Corner – углом, None – оси отсутствуют), можно задать изображение куба (флажок Show Box).
Вкладка содержит три вложенных вкладки , в которых задаются параметры для каждой из трех координатных осей.
Вкладка (Внешний вид) задает стиль заливки и стиль линий. При выборе переключателя (заливка поверхности) из группы (опции заливки) вы получите доступ к опциям цвета (в группе ). Если выбрать переключатель (одни цвет), то выполняется однотипная заливка поверхности. Если установить переключатель (цветовая схема или градиентная заливка), то поверхность или контурный график будут залиты разными цветами и оттенками, причем выбрать цветовую схему можно на вкладке (освещение). На вкладке также можно изменять формат линий и формат точек данных .
На вкладке надо включить флажок . После этого станут активными все параметры на вкладке. Здесь можно включить и настроить до восьми различных источников света, для каждого из них есть отдельная вкладка и т.д. Но для того чтобы быстро создать освещение для графика, лучше воспользоваться заготовленными схемами освещения. Их можно выбрать из раскрывающегося списка (схема освещения).
Во вкладке (дополнительно) имеется доступ к управлению несколькими специальными эффектами оформления графиков, благодаря которым они смотрятся более красиво, например: - сияние, значение можно менять в пределах 0¸128; (туман); (прозрачность), задается процент прозрачности графика и др.
Во вкладке задается заголовок графика, который можно расположить как сверху графика, так и снизу.
Во вкладке (плоскость заднего плана) задается показ проекций координатной сетки на три скрытые плоскости трехмерного графика.
Во вкладке можно изменить диапазон изменения координат X и Y. На этой вкладке есть группы элементов (диапазон 1) и (диапазон 2). В полях ввода Start и End этих групп можно указать диапазоны изменения обеих переменных. Также здесь можно указать тип координатной системы : - Декартова, - Сферическая, - Цилиндрическая.
Пример:
На этом рисунке представлен один и тот же график до и после форматирования. Для форматирования были применены следующие действия:
во вкладке установить переключатель и ;
во вкладке в группе установлен переключатель (это приведет к тому, что положение осей перестанет быть жестким, теперь они будут располагаться по периметру куба, ограничивающего график, и всегда на его передних гранях);
во вкладке на каждой из вкладок в группе установить флажок (отобразить линии), это приведет к отображению линий сетки, активизируя поле можно установить необходимый цвет линий сетки;
во вкладке включить флажок , из раскрывающегося списка выбрать схему освещения ;
на не отформатированном графике линии на графике изображены в виде так называемого каркаса (вкладка ), это очень загромождает график. Лучше линии отобразить в виде линий уровня по оси z. Для этого во вкладке в группе (параметры линий уровня) выбрать из раскрывающегося списка - линии уровня по z, далее в этой же группе следует установить флажок (отобразить линии); если плотность линий уровня оказалась слишком маленткой или слишком большой, то надо сбросить флажок и в поле ввода ввести необходимое число, в нашем случае это число 19.
Анимация
Во многих случаях самый зрелищный способ представления результатов математических расчетов – это анимация. MathCAD позволяет создавать анимационные ролики и сохранять их в видеофайлах.
Основной принцип анимации – покадровая анимация – это просто последовательность кадров, представляющих собой некоторый участок документа, который выделяется пользователем. Расчеты производятся обособленно для каждого кадра, причем формулы и графики, которые в нем содержатся, должны быть функцией от номера кадра. Номер кадра задается системной переменной , которая может принимать лишь натуральные значения. По умолчанию, если не включен режим подготовки анимации, =0.
Рассмотрим последовательность действий для создания ролика анимации, например, демонстрирующего перемещение гармонической волны. При этом каждый момент времени будет задаваться переменной .
Введите в документ необходимые выражения и графики, в которых участвует переменная номера кадра . Подготовьте часть документа, которую вы желаете сделать анимацией, таким образом, чтобы она находилась в поле вашего зрения на экране. В нашем примере подготовка сводится к определению функции f(x,t) = sin(x-t) и создании ее декартова графика f(x,FRAME).
Выполните команду Tools|Animation|Record.
В диалоговом окне Animate задайте номер первого кадра в поле From(От), номер последнего кадра в поле To (До) и скорость анимации в поле At (Скорость) в кадрах в секунду.
Выделите протаскиванием указателя мыши область в документе, которая станет роликом анимации.
В диалоговом окне Animate нажмите кнопку Animate. После этого в окошке диалогового окна Animate будут появляться результаты расчетов выделенной области, сопровождающиеся выводом текущего значения переменной . По окончании этого процесса на экране появится окно проигрывателя анимации.
Запустите просмотр анимации в проигрывателе нажатием кнопки воспроизведения в левом нижнем углу окна проигрывателя.
В случае если вид анимации вас устраивает, сохраните ее в виде видеофайла, нажав кнопку Save As в диалоговом окне Animate.
Закройте диалог Animate.
Сохраненный видеофайл можно использовать за пределами MathCAD. Если в Проводнике Windows дважды щелкнуть на имени этого файла, он будет загружен в проигрыватель видеофайлов Windows, и вы увидите его на экране компьютера. Таким образом, запуская видеофайлы обычным образом, можно устроить красочную презентацию результатов работы как на своем, так и на другом компьютере.
Ввод/вывод во внешние файлы.
Для общения с внешними файлами в MathCAD встроены следующие функции:
READPRN (“file”) – чтение данных в матрицу из текстового файла;
WRITEPRN(“file”) – запись данных в текстовый файл;
APPENDPRN(“file”) – дозапись данных в существующий текстовый файл,
где file – путь к файлу.
Вопросы
Каким образом представляется функция при построении графика? График в декартовой системе координат: создание, задание аргумента по умолчанию, в виде ранжированной переменной, изображение нескольких функций на одном графике, работа с командами «масштаб» и «трассировка».
Построение графика в полярной системе координат и графика параметрически заданной функции.
Форматирование 2-х мерных графиков. Размещение надписей на поле графика.
Перечислите графики функций двух переменных, которые может строить MathCAD. Объясните, как строятся график поверхности? Каким образом на трехмерном графике можно изменить масштаб изображения, угол поворота? И как можно задать «живую» картинку?
Расскажите о контурных и векторных графиках в MathCAD. Объясните их.
Как строятся в MathCAD графики параметрически заданной поверхности и параметрически заданной кривой?
Расскажите о форматировании 3-хмерных графиков.
Что такое анимация и как она создается в системе MathCAD?
Как осуществляется ввод/вывод во внешние файлы в системе MathCAD?
Лекция №13
Задачи линейной алгебры
В задачах линейной алгебры практически всегда возникает необходимость выполнять различные операции с матрицами. Панель операторов с матрицами находится на панели Math.
Операторы , вам уже знакомы. Напомним только, что оператор вычисляет только детерминант матрицы, а модуль вектора, который равен квадратному корню из суммы квадратов его элементов, вычисляется с помощью оператора , который расположен на панели Calculator. К сожалению, по внешнему виду они не отличаются.
При попытке вычислить модуль вектора с панели Matrix будет ошибочное состояние. Точно также будет ошибочное состояние при попытке вычислить детерминант матрицы с панели Calculator.
Рассмотрим неизвестные вам до сих пор операторы панели Matrix.
- скалярное и векторное произведение векторов. Скалярное произведение векторов определяется как скаляр, равный сумме попарных произведений соответствующих элементов (идентичен обычному оператору умножения). Векторы должны иметь одинаковый размер. Для обозначения скалярного произведения используется символ «точка». Векторное произведение двух векторов u и v с углом q между ними равно вектору с модулем , направленным перпендикулярно плоскости векторов u и v. Векторное произведение векторов применимо только для трехкомпонентных векторов. Обозначают векторное произведение символом х, который можно ввести нажатием кнопки на панели Matrix/
- сумма элементов вектора.
- оператор векторизации. Он позволяет провести однотипную операцию над всеми элементами массива (т.е. матрицы или вектора), упрощая тем самым программирование циклов. Например, иногда требуется умножить каждый элемент одного вектора на соответствующий элемент другого вектора. Непосредственно такой операции в MathCAD нет, но ее легко осуществить с помощью векторизации. Оператор векторизации можно использовать только с векторами и матрицами одинакового размера.
Для решения задач линейной алгебры в MathCAD встроены матричные функции. Их можно разделить на три основные группы:
функции определения (генерации) матриц и операции с блоками матриц;
функции вычисления различных числовых характеристик матриц;
функции, реализующие численные алгоритмы решения задач линейной алгебры.
Из каждой группы приведем по несколько, наиболее часто используемых функций.
Первая группа:
matrix(m, n, f) – создает и заполняет матрицу размерности m x n, элемент которой, расположенный в i-ой строке и j-ом столбце равен значению f(i, j) функции f(x, y);
diag(v) – создает диагональную матрицу, элементы главной диагонали которой хранятся в векторе v;
identity(n) – создает единичную матрицу порядка n;
augment(A, B) –объединяет матрицы A и B; матрица B располагается справа от матрицы A, при этом матрицы должны иметь одинаковое число строк;
stack(A, B) – объединяет матрицы A и B, матрица В располагается внизу под матрицей А, при этом матрицы должны иметь одинаковое число столбцов;
submatrix(A, ir, jr, ic, jc) – формирует матрицу, которая является блоком матрицы А, расположенным в строках с ir по jr и в столбцах с ic по jc, причем ir £ jr, ic £ jc.
Вторая группа:
last(v) – вычисляет номер последнего элемента вектора V;
length(v) – вычисляет количество элементов вектора V;
min(v), max(v) – вычисляет минимальное и максимальное значения вектора V;
Re(v) – создает вектор из реальных частей комплексных элементов вектора V;
Im(v) - создает вектор из мнимых частей комплексных элементов вектора V;
sort(V) – сортировка элементов вектора V по возрастанию;
reverse (sort(v)) – сортировка элементов вектора V по убыванию;
csort (A,n) – сортировка элементов n – го столбца матрицы А по возрастанию (перестановкой строк);
rsort (A,n) – сортировка элементов n – ой строки матрица А по возрастанию (перестановкой столбцов);
rows(A) – вычисляет число строк в матрице А;
cols(A) – вычисляет число столбцов в матрице А;
max(A), min(A) – определяет максимальное и минимальное значения матрицы А;
tr(A) – вычисляет след квадратной матрицы А (след матрицы равен сумме ее диагональных элементов по главной диагонали);
mean(A) – среднее значение элементов матрица А.
Действие функций второй группы ясно из их названия, поэтому примеры для них приводить не будем.
Третья группа:
rref(A) – приведение матрицы к ступенчатому виду с единичным базисным минором (выполняются элементарные операции со строками матрицы: перестановка строк, умножение строки на число, сложение строк);
rank(A) – вычисляет ранг матрицы А (количество линейно-независимых строк или это число ненулевых строк ступенчатой матрицы rref(A));
eigenvals(A) – вычисление собственных значений квадратной матрицы А;
eigenvecs (A) – вычисление собственных векторов квадратной матрицы А, значением функции является матрица, столбцы которой есть собственные векторы матрицы А, причем порядок следования векторов отвечает порядку следования собственных значений, вычисленных с помощью функции eigenvals(A);
eigenvec(A,e) – вычисление собственного вектора матрицы А, отвечающего собственному значению e;
normi(A) – max – норма, или ¥ - норма (infinity norm). в линейной алгебре используются различные матричные нормы, которые ставят в соответствие матрице некоторую скалярную числовую характеристику;
lsolve (A,b) – решение системы линейных алгебраических уравнений вида .
Функции третьей группы реализуют, как правило, довольно сложные вычислительные алгоритмы. Приведем примеры на использование функций rref и функций для вычисления собственных значений и собственных векторов матрицы. Задача поиска собственных значений и собственных векторов матрицы очень часто встречается в вычислительной практике.
В самом простом виде задача на собственные значения матрицы формулируется следующим образом: требуется найти такие значения l, чтобы матричное уравнение имело решение. В таком случае число l называют собственным числом матрицы А, а n- компонентный вектор Х, приводящий уравнение с заданным l в тождество – собственным вектором. В вышеприведенном примере собственные вектора матрицы А получены в матрице MS. Проверка проведена для первого столбца матрицы MS и соответствующего ему собственного числа l0=5.439.
Решение систем линейных алгебраических уравнений. Этот вопрос является центральным в вычислительной линейной алгебре.
В математике рассматриваются системы линейных уравнений двух видов - однородные и неоднородные.
Неоднородная система уравнений в матричном виде записывается следующим образом: . Здесь А – матрица коэффициентов системы, В – вектор свободных членов, Х – вектор неизвестных системы.
Неоднородная система имеет одно единственное решение, если определитель матрицы отличен от нуля. Для нахождения точного решения неоднородных систем линейных уравнений в линейной алгебре используются три основных метода:
метод обратной матрицы, он вам уже известен;
метод исключений Гаусса;
метод Крамера.
Неоднородная система линейных уравнений в случае равенства ее определителя нулю имеет множество решений, если ранг матрицы системы равен рангу расширенной матрицы системы, либо не имеет решения, если это условие не выполняется. Решить такие системы в MatCADe можно методом Гаусса.
В выше приведенном примере получили систему из трех уравнений с пятью неизвестными, поэтому решение системы будет иметь два свободных параметра (x4, x5).
Однородная система линейных алгебраических уравнений может быть представлена в виде , т.е. правая часть уравнения представляет вектор из нулевых элементов. Как известно, для того чтобы однородная система линейных уравнений имела решение, определитель соответствующей матрицы должен равняться нулю. Это означает, что количество независимых уравнений в системе (т.е. ранг матрицы) меньше, чем количество неизвестных (т.е. порядок матрицы): rank(A) < n. Но вначале нужно выделить в системе эти самые независимые уравнения. Это делается с помощью функции rref, которая с помощью метода исключений Гаусса приводит матрицу к ступенчатому виду.
Приближенное решение систем линейных уравнений. Точные методы решения линейных систем применяют для решения линейных систем относительно небольшой размерности. Для решения систем большой размерности используют итерационные методы. Итерационные методы хороши для систем с разреженными матрицами. Простейший итерационный метод – метод простых итераций.
Метод состоит в том, что система уравнений преобразуется к виду и ее решение вычисляется как предел последовательности
В качестве условия окончания итерационного процесса можно взять условие
,
где e - заданная погрешность приближенного решения.
Для сходимости метода простых итераций достаточно, чтобы выполнялось условие
normi(A) < 1.
Рассмотрим следующий пример:
Вопросы
Поясните работу команд панели Matrix – скалярное и векторное произведение, детерминант матрицы, сумма элементов вектора, операция векторизации.
Перечислите три основные группы матричных функций. Расскажите о матричных функциях, возвращающих числовые характеристики. Приведите примеры.
Матричные функции, реализующие генерацию матриц и операции работы с блоками матриц.
Перечислите матричные функции, реализующие численные алгоритмы решения задач линейной алгебры. Объясните, как работают функции rref и rank.
Какие функции вычисляют собственные вектора и собственные числа квадратной матрицы?
Решение в системе MathCAD неоднородных систем линейных уравнений, когда определитель матрицы не равен нулю. Три способа.
Как осуществляется в системе MathCAD решение неоднородных систем линейных уравнений, когда определитель равен нулю и при условии, что ранг матрицы системы равен рангу расширенной матрицы системы?
Как осуществляется в системе MathCAD решение однородных систем линейных уравнений, когда определитель матрицы равен нулю (т.е. ранг матрицы должен быть меньше порядка матрицы)?
Лекция № 14
Символьные вычисления
Для символьных преобразований в системе MathCAD имеется символьный процессор, являющийся, по сути, системой искусственного интеллекта. Он позволяет решить многие задачи математики аналитически, без применения численных методов и, соответственно, без погрешностей вычислений. Символьное решение подразумевает возможность вычислять и преобразовывать выражения с буквенными параметрами, не подставляя при этом их значения, и в итоге получать результат в виде аналитической зависимости от этих параметров (а не число или набор чисел, как при стандартных численных расчетах).
Способы символьных вычислений.
Символьные вычисления в MathCAD можно осуществить в двух различных вариантах:
с помощью команд меню;
Последняя команда в меню “Evaluation Style” определяет стиль вывода результата: результат можно располагать вертикально (сверху или снизу вычисляемого выражения) или горизонтально.
с помощью оператора символьного вывода ®, ключевых слов символьного процессора и обычных формул. Оператор символьного вывода можно ввести несколькими способами: с помощью клавиш Ctr+< . >, с панелей <Evaluation> или <Symbolic>
При вводе ключевых слов с панели Symbolic нужно помнить, что вместе с ними вставляется и знак символьного вывода, т.е. вводить его отдельно перед вставкой ключевого слова не следует.
Первый способ более удобен, когда требуется быстро получить какой-либо аналитический результат для однократного пользования, не сохраняя сам ход вычислений. Второй способ более нагляден, т.к. позволяет записывать выражения в традиционной математической форме и сохранять символьные вычисления в документах MathCAD. Кроме того, аналитические преобразования, проводимые через меню, касаются только одного, выделенного в данный момент выражения (или его части, или отдельной его переменной). Соответственно, на них не влияют формулы, находящиеся в документе выше этого выделенного выражения. По этой причине символьным преобразованиям через меню недоступны предварительно определенные функции пользователя. Оператор символьного вывода, напротив, учитывает все предыдущее содержимое документа и выдает результат с его учетом, в частности ему доступны и функции пользователя.
Наличие меню символьных вычислений - своего рода дань прежним версиям MathCAD.
Не всякое выражение поддается аналитическим преобразованиям. Если это так (либо в силу того, что задача вовсе не имеет аналитического решения, либо она оказывается слишком сложной для символьного процессора MathCAD), то в качестве результата выводится само выражение.
Алгебраические вычисления.
Simplify (Упростить)
2. Expand (разложение выражений по степеням).
В ходе операции символьного разложения раскрываются все суммы и произведения, а сложные тригонометрические зависимости раскладываются с помощью тригонометрических тождеств.
3. Factor (разложение выражений на множители)
Эта операция позволяет разложить полиномы на произведение более простых полиномов, а целые числа – на простые сомножители.
В вышеприведенном примере местозаполнитель после ключевого слова factor надо удалить.
4. Collect (приведение подобных слагаемых ).
После ключевого слова collect допускается задание нескольких переменных через запятую. В этом случае приведение подобных слагаемых выполняется последовательно по всем переменным.
5. Polynomial Coefficients (коэффициенты полинома)
Если выражение является полиномом относительно некоторой переменной х, заданным не в обычном виде , а как произведение других, более простых полиномов, то коэффициенты легко определяются символьным процессором MathCAD. Коэффициенты сами могут быть функциями других переменных. Результатом выполнения данной команды является вектор, состоящий из полиноминальных коэффициентов , причем первым элементом вектора является свободный член .
6. Ряды и произведения.
Шаблоны для ввода сумм и произведений находятся на панели Calculus. Там же находится символ ¥.
Если в пределы сумм и произведений входят только числа, то можно применить знак = (численный расчет сумм и произведений). Если в предел входит ¥, то можно решить только символьно.
7. Convert to Partial Fractions (Разложение на элементарные дроби)
8. Substitute (подстановка переменной)
9. Матричная алгебра
Символьно можно осуществлять следующие матричные операции:
Transpose (транспонирование)
Invert (Обратная матрица)
Determinant (Определитель)
Аналогично производятся две другие матричные операции.
Математический анализ.
Наиболее ярким проявлением возможностей символьного процессора являются аналитические вычисления пределов, производных, интегралов и разложений в ряд, а также символьное решение алгебраических уравнений и неравенств, систем алгебраических уравнений.
1. Пределы последовательностей и функций.
Вычисление пределов является одной из основных задач математического анализа. Система MathCAD позволяет с высокой эффективностью находить любые пределы.
Операторы MathCAD для вычисления пределов расположены на панели Calculus. Данная панель содержит три кнопки:
Two-sided Limit (двухсторонний предел), Left-sided Limit (левосторонний предел) и Right-sided (правосторонний предел), при нажатии на которые появляются соответственно
Необходимо помнить, что пределы, в отличие от большинства математических операций в MathCAD, можно вычислить только в символьном виде, а при попытке вычислить предел численно (с помощью знака “=”) будет выдано сообщение об ошибке.
Предел последовательности. Фактически предел последовательности, если он существует, - это число, к которому приближаются элементы последовательности при значении индекса n, стремящегося к ¥. Для вычисления предела последовательности надо ввести шаблон для двухстороннего предела, заполнить его, затем ввести соответствующую команду из символьного меню или знак символьного вывода ®.
Если последовательность не имеет предела, то будет выдано слово undefined (не определено).
Знак символьного вывода позволяет использовать функцию пользователя.
Предел функции в точке. Необходимость вычисления пределов функции возникает в задачах даже чаще, чем пределов последовательностей. В точках, где функция непрерывна, все три предела будут иметь одинаковое значение – значение функции в этой точке.
Но во многих задачах можно столкнуться с функциями, значение которых в тех или иных точках с формальной математической точки зрения не определено (особые точки типа 0/0 или ¥/¥, точки разрыва функции). Для того, чтобы получить правильное значение функции в особой точке, следует вычислить ее предел в этой точке. При вычислении пределов в особых точках также используется двухсторонний предел.
Как видно из вышеприведенного примера, значения функций f(x) и g(x) в точке x равно 0. Это происходит потому, что MathCAD вычисляет вначале числитель, и если он равен 0, то и всей дроби присваивается значение 0, знаменатель даже не вычисляется.
Если возникает необходимость построить график функции, которая содержит особую точку, то из-за упомянутой выше особенности MathCAD при вычислении дробей график будет содержать дефект. Исправить эту ошибку и получить правильный график на всем интервале можно, если при вычислении функции в особой точке заменить значение функции на значение предела. Это можно сделать с помощью встроенной функции If.
Для анализа точек разрыва служат односторонние пределы. В точках разрыва не определено не только значение самой функции, но и значение ее двухстороннего предела. Поэтому для исследования точек разрыва функции вычисляют левый и правый пределы в этой точке.
2. Дифференцирование.
Применение MathCAD для дифференцирования функций может не только сэкономить время и силы, но и избежать возможных ошибок, неизбежно возникающих при сложных ручных расчетах. Система MathCAD позволяет производить дифференцирование функций как в символьном виде, так и численно.
Символьное дифференцирование можно осуществить тремя способами:
Вставить шаблон из панели Calculus, заполнить его и применить команду из меню
Symbolics/Simplify или Symbolics/Evaluate/Symbolically
Вставить шаблон из панели Calculus, заполнить его и применить команду символьного вывода ® или ключевое слово simplify c панели Symbolics (кардинальская шапка);
Набрать выражение для функции, выделить переменную, по которой необходимо провести операцию дифференцирования и дать команду из меню
Symbolics/Variable/Differentiate.
В вышеприведенном примере показано и численное дифференцирование функции в точке x=2, при этом символьная производная запоминается в функции D(x), затем происходит обращение к этой функции и дается команда численного вычисления (знак “=”). Для численного дифференцирования MathCAD применяет довольно сложный алгоритм Риддера, вычисляющий производную с колоссальной точностью до 7-8 знака после запятой. Существенно, что погрешность дифференцирования не зависит от констант TOL и CTOL, в противоположность большинству остальных численных методов, а определяется непосредственно алгоритмом.
Возможности MathCAD позволяют продифференцировать любую непрерывную функцию, но иногда возникает необходимость находить производную от функции вблизи точки разрыва. В математике для дифференцирования функции вблизи точки разрыва используют операцию односторонней производной. В MathCAD нет встроенных операторов для вычисления односторонних производных, но вычислить их все-таки можно. Для этого следует скомбинировать оператор обычной производной с операторами односторонних пределов, как это сделано в нижеприведенном примере
Производные высших порядков. Для вычисления производных высших порядков в MathCAD предусмотрен специальный оператор на панели Calculus. Шаблон этого оператора содержит на два поля ввода больше, чем оператор обычной производной. В эти два поля может быть вписан порядок производной, причем достаточно ввести значение в одном из них, а в другом оно появится автоматически. Производные высших порядков можно вычислять и в символьном виде, и численно, но при численных расчетах вы можете вычислить производную не выше пятого порядка. Это связано с тем, что используемый алгоритм численного дифференцирования очень быстро теряет точность при росте порядка производной. В символьном же виде вычисление производных высших порядков производится так же просто и точно, как и производной первого порядка.
Частные производные. С помощью обоих процессоров MathCAD можно вычислять производные функций любого количества аргументов. В этом случае, как известно, производные по разным аргументам называются частными. Чтобы вычислить частную производную, необходимо, как обычно, ввести оператор производной с панели Calculus и в соответствующем местозаполнителе напечатать имя переменной, по которой должно быть осуществлено дифференцирование. Для того, чтобы изменить вид оператора дифференцирования на представление частной производной, необходимо выбрать из контекстного меню для области оператора дифференцирования пункт View Derivative As (Изображать производную как), в появившемся подменю выбрать пункт Partial Derivative (Частная производная).
Частные производные высших порядков рассчитываются точно так же, как и обычные производные высших порядков.
3. Интегрирование.
Как и большинство математических операций, интегрирование в MathCAD может проводиться как численно, так и в символьном виде. Каждый способ вычислений имеет свои преимущества и недостатки и, в отличие от дифференцирования, здесь нельзя сказать однозначно, как лучше всего проводить вычисления. Какой способ интегрирования вы выберите для той или иной функции в своих задачах, будет зависеть от вашего опыта, интуиции, а также требований конкретной задачи.
Численное интегрирование. Численно можно вычислить с большей или меньшей точностью любой сходящийся определенный интеграл с конечными или бесконечными пределами интегрирования. Пределы интегрирования обязаны быть действительными, подынтегральная функция может иметь и комплексные значения, поэтому и значение интеграла может быть комплексным.
Для вычисления определенного интеграла надо вставить в документ шаблон оператора определенного интеграла с панели Calculus. После заполнения всех полей ввода для вычисления интеграла следует ввести знак “=”.
При численном интегрировании основная проблема состоит в том, что интегрирование с высокой точностью сложных функций требует значительного времени. В таких случаях приходится искать компромисс между точностью и скоростью расчета. В MathCAD вы сами можете контролировать точность проводимых вычислений. Для этого служит встроенная переменная TOL. Но нельзя сказать однозначно, какой будет точность вычисления того или иного интеграла при заданном значении TOL. Все численные методы интегрирования в MathCAD строятся на последовательных приближениях, и значение переменной TOL указывает, какой должна быть разница между двумя последовательными приближениями для остановки вычислений. Поэтому не стоит воспринимать значение этой переменной как точность вычисления интеграла, можно лишь с уверенностью сказать, точность будет не ниже значения TOL. Также следует помнить, что слишком низкое значение TOL может привести к тому, что MathCAD не сможет вычислить интеграл и выдаст ошибку, поэтому для большинства однократных интегралов значение TOL лучше выбирать в диапазоне 10-3¸10-4.
Точность численного интегрирования также зависит от численного метода, который используется для вычисления интеграла. Существует великое множество различных численных методов интегрирования, и для того или иного интеграла сложно заранее определить, каким методом его можно вычислить наиболее быстро и точно. В MathCAD встроено несколько основных методов численного интегрирования. Каждый из этих методов предназначен для своего класса интегралов. По умолчанию MathCAD автоматически выбирает тот или иной метод в зависимости от введенной подынтегральной функции и границ интегрирования (вариант Auto Select). При желании можно выбрать численный метод вручную, но в большинстве случаев это только ухудшит результат. Для того, чтобы выбрать численный метод для вычисления интеграла, вызовите его контекстное меню, которое содержит кроме стандартных команд, еще и команды выбора численного метода.
Символьное интегрирование. Символьный процессор MathCAD позволяет вычислить как неопределенные, так и определенные интегралы. Для вычисления неопределенного интеграла также существует свой оператор, как и для определенного. Он находится на панели Calculus и позволяет вставить шаблон с двумя полями ввода.
Командой для символьных вычислений интегралов является символьный оператор ®. Результат (т.е. первообразная от подынтегрального выражения) выводится справа от стрелки. Если первообразную функцию нельзя записать в аналитическом виде, то справа от стрелки будет еще раз переписан тот же интеграл.
Для того, чтобы вычислить в символьном виде определенный интеграл, MathCAD сначала вычисляет первообразную, т.е. повторяет действия неопределенного интеграла. Далее, из значения первообразной на верхней границе вычисляется ее значение на нижней границе. Полученное в результате выражение и возвращается как ответ.
Значение переменной TOL не имеет никакого значения для символьных вычислений.
Вычисление интеграла – это, по-видимому, самая сложная задача для символьного процессора MathCAD. Надо отметить, что символьное интегрирование возможно только для небольшого круга несложных подынтегральных функций. Поэтому некоторые интегралы не могут быть вычислены в символьном виде. Стоит отметить, что существует несколько интегралов, которые не имеют аналитического выражения, но часто встречаются в практических задачах. Эти интегралы в математике носят определенные названия и заданы в MathCAD в виде специальных символьных функций или констант. Таким образом, многие интегралы, которые не имеют аналитического выражения через элементарные функции, будут все же вычислены символьным процессором и записаны с использованием специальных символьных функций MathCAD.
Однако следует помнить, что результат символьного интегрирования в данном случае является лишь удобной записью того же интеграла. Если понадобится определить значение одной из этих функций в точке на числовой оси, то придется вычислять соответствующий интеграл численными методами.
Интегрирование функций с параметром. Следует помнить, что MathCAD воспринимает все неопределенные параметры в функциях как произвольные комплексные функции. Поэтому интеграл от функции с параметром будет вычислен только в том случае, если он существует при всех значениях параметра на комплексной плоскости. Такое условие выполняется далеко не для всех функций. Решение данной проблемы является использование модификатора символьных вычислений assume. С его помощью можно наложить определенные ограничения на значения параметров, входящих в подынтегральное выражение.
Вводится интеграл, знак символьного вычисления с полем ввода для модификатора, в которое вводится ключевое слово assume и через запятую условие, накладываемое на параметр подынтегрального выражения или несколько условий через запятую.
Расходящийся интеграл. Если интеграл расходится (равен бесконечности), то вычислительный процессор может выдать сообщение об ошибке, а символьный процессор справляется с этим интегралом, совершенно правильно находя его бесконечное значение.
Кратные интегралы. Кроме однократных интегралов в MathCAD есть возможность вычислять двойные, тройные интегралы, а также интегралы более высокой точности. Для вычисления кратных интегралов не предусмотрено отдельного оператора, для этого служит уже знакомый оператор определенного интеграла, в шаблоне которого в поле ввода подынтегральной функции вводится следующий шаблон определенного интеграла ит.д.
Кратные интегралы являются сложной задачей как для символьного процессора, так и для численных расчетов. Стоит вначале попытаться вычислить интеграл в символьном виде, и если результат получен не будет, вычислить его численно, задав требуемое значение TOL.
Дополнительные возможности символьного процессора.
1. С помощью символьного процессора можно рассчитать численное значение выражения (действительное или комплексное). Иногда такой путь считается более удобным, чем применение численного процессора.
Вычисления по команде complex позволяют представить выражение в виде a+jb. Вышеприведенные действия можно осуществить и с помощью соответствующих команд из меню Symbolic.
2. Последовательности символьных команд.
Символьные вычисления допускается проводить с применением цепочек из ключевых слов. Для этого ключевые слова, соответствующие последовательным символьным операциям, должны быть введены по очереди с панели Symbolic. Последовательности символьных команд допускают введение дополнительных условий в расчеты, например, таких как ограничения на действительную или комплексную форму результата. Это делается с помощью ключевого слова assume.
3. Решение неравенств в символьной форме
4. Решение систем уравнений в символьной форме
Вопросы
Что такое символьные вычисления? Какие способы символьных вычислений имеются в системе MathCAD? В чем преимущество вычислений с помощью оператора символьного равенства перед вычислениями с помощью меню Symbolic?
Какой оператор осуществляет численные вычисления? И какой – символьные вычисления?
Какие алгебраические символьные вычисления может делать система MathCAD? Можно ли вычислить сумму или произведение ряда с помощью оператора численного вычисления, если верхний предел равен ¥ ?
Какие матричные операции можно осуществить символьно?
Какие операторы предусмотрены для вычисления пределов в MathCADе? Можно ли вычислить предел численно?
Как осуществляется вычисление предела последовательности? Функции в точке, когда функция непрерывна, и в точках разрыва? Как можно обойти на графике особые точки функции (типа 0/0)?
Назовите три способа символьного дифференцирования. Приведите пример. Как можно определить производную в точке? Влияют ли константы TOL и CTOL на точность численного дифференцирования? Как можно определить производную вблизи точки разрыва?
Как вычисляются в MathCADе производные высших порядков и частные производные? Производные только каких порядков можно вычислить численно и почему?
Что такое численное интегрирование в MathCADе и как оно осуществляется? С помощью какой встроенной переменной можно контролировать точность численного интегрирования? От чего еще зависит точность численного интегрирования?
Назовите три способа символьного вычисления неопределенного интеграла в системе MathCAD. Приведите пример. Как осуществляется вычисление определенного интеграла с помощью оператора символьного равенства?
Как вычисляются интегралы с параметром, расходящиеся интегралы, кратные интегралы?
Как можно с помощью символьного процессора рассчитать численное значение выражения (вещественное или комплексное)?
Как создаются последовательности символьных команд? Приведите примеры.
Как решаются в MathCADе уравнения, неравенства и системы уравнений в символьной форме?
Лекция № 15
Решение дифференциальных уравнений в MathCAD
Дифференциальные уравнения являются основой огромного количества расчетных задач из самых различных областей науки и техники.
В MathCAD нет средств символьного (точного) решения дифференциальных уравнений, но достаточно хорошо представлены численные методы их решения.
Дифференциальные уравнения – это уравнения, в которых неизвестные являются не переменные (т.е. числа), а функции одной или нескольких переменных. Эти уравнения (или системы) включают соотношения между искомыми функциями и их производными. Если в уравнения входят производные только по одной переменной, то они называются обыкновенными дифференциальными уравнениями (ОДУ). В противном случае говорят об уравнениях в частных производных. Таким образом, решить (иногда говорят проинтегрировать) дифференциальное уравнение – значит, определить неизвестную функцию на определенном интервале изменения ее переменных.
Как известно, одно обыкновенное дифференциальное уравнение или система ОДУ имеет единственное решение, если помимо уравнения определенным образом заданы начальные или граничные условия. Имеется два типа задач, для которых возможно численное решение ОДУ с помощью MathCAD:
задачи Коши, для которых определены начальные условия на искомые функции, т.е. заданы значения этих функций в начальной точке интервала интегрирования уравнения;
краевые задачи, для которых заданы определенные соотношения сразу на обеих границах интервала.
Из дифференциальных уравнений в частных производных есть возможность решать только уравнения с двумя независимыми переменными: одномерные параболические и гиперболические уравнения, такие как уравнения теплопроводности, диффузии, волновые уравнения, а также двухмерные эллиптические уравнения (уравнения Пуассона и Лапласа).
В MathCAD нет универсальной функции для решения дифференциальных уравнений, а есть около двадцати функций для различных видов уравнений, дополнительных условий и методов решения. Эти функции можно найти в библиотеке Insert/Function, категория “Differential Equation Solving (решение дифференциальных уравнений).
Решение Обыкновенных Дифференциальных Уравнений (ОДУ)
ОДУ первого порядка.
ОДУ первого порядка называется уравнение
F(x,y,y’)=0
F – известная функция трех переменных;
x – независимая переменная на интервале интегрирования[a,b];
y – неизвестная функция;
y’ – ее производная.
Функция y(x) является решением дифференциального уравнения, если она при всех xÎ[a,b] удовлетворяет уравнению
F(x,y(x),y’(x))=0
График решения y(x) называется интегральной кривой дифференциального уравнения. Если не заданы начальные условия, таких решений y(x) будет множество. При известных начальных условиях y(x0)= y0 решение y(x) будет единственным.
Вычислительный процессор MathCAD может работать только с нормальной формой ОДУ. Нормальная форма ОДУ – это ОДУ, разрешенное относительно производной
y’=f(x,y)
ОДУ высших порядков.
Обыкновенным дифференциальным уравнением n-го порядка называется уравнение вида
F(x,y,y’,y’’, …,y(n))=0
F – известная функция n+2 переменных;
x – независимая переменная на интервале интегрирования[a,b];
y – неизвестная функция;
n – порядок уравнения.
Функция y(x) является решением дифференциального уравнения, если она при всех xÎ[a,b] удовлетворяет уравнению
F(x, y(x), y’(x), y’’(x),…, y(n)(x))=0
Нормальная форма ОДУ высшего порядка имеет вид
Y(n) =f(x, y, y’, …, y(n-1))
Если не заданы начальные условия, то дифференциальное уравнение n – го порядка имеет бесконечное множество решений, при задании начальных условий y(x0)= y0, y’(x0)= y0,1, y’’(x0)= y0,2, …, y(n-1)(x0)= y0,n-1 решение становится единственным (задача Коши).
Задача Коши для дифференциального уравнения n – го порядка может быть сведена к задаче Коши для нормальной системы n дифференциальных уравнений 1 го порядка, которая в векторной форме имеет вид
Y’ = F(x, Y), Y(x0) = Y0
Y(x0) = Y0 – вектор начальных условий;
Y’=(y’1, y’2, …, y’n) – вектор первых производных;
F(x, Y) = (y2, y3, …, yn, f(x,y1, … , yn) – вектор правых частей;
Y = (y2, y3, …, yn) – вектор искомого решения.
Эта система получается в результате следующей замены:
,где
Для численного интегрирования ОДУ в MathCAD имеется выбор – либо использовать вычислительный блок Given/Odesolve, либо встроенные функции. Оба способа обладают одинаковыми возможностями, но при использовании блока решения запись уравнений более привычна и наглядна, однако отдельная функция может быть использована в составе других функций и программ. Рассмотрим оба варианта решения.
Вычислительный блок Given/Odesolve
Ниже приведены два примера для решения дифференциальных уравнений первого и второго порядка с использованием вычислительного блока решения Given/Odesolve.
Вычислительный блок для решения одного ОДУ состоит из трех частей:
ключевое слово given;
ОДУ и начальные условия, записанные с помощью логического равенства;
встроенная функция Odesolve(x, b) относительно независимой переменной x на интервале [a, b]; b – верхняя граница отрезка интегрирования. Допустимо и даже предпочтительнее задание функции Odesolve(a, b, step) с тремя параметрами, где step – внутренний параметр численного метода, определяющий количество шагов; чем больше step, тем с лучшей точностью будет получен результат, но тем больше времени будет затрачено на его поиск.
Функция Odesolve возвращает решение задачи в виде функции. Эта функция не имеет символьного представления и может только вернуть численное значение решения уравнения в любой точке интервала интегрирования.
Функция Odesolve использует для решения дифференциальных уравнений наиболее популярный алгоритм Рунге-Кутта четвертого порядка, описанный в большинстве книг по методам вычислений. Он обеспечивает малую погрешность для широкого класса систем ОДУ за исключением жестких систем. Если щелчком правой кнопки мыши на блоке формул с функцией Odesolve вызвать контекстное меню, то можно изменить метод вычисления решения, выбрав один из трех вариантов: Fixed – метод Рунге-Кутта с фиксированным шагом интегрирования (этот метод используется по умолчанию), Adaptive – также метод Рунге-Кутта, но с переменным шагом, изменяемым в зависимости от скорости изменения функции решения, Stiff – метод, адаптированный для решения жестких уравнений и систем (используется так называемый метод PADAUS).
Альтернативный метод решения ОДУ заключается в использовании одной из встроенных функций: rkfixed, Rkadapt, или Bulstoer. Все они решают задачу Коши для системы дифференциальных уравнений первого порядка, но каждая из них использует для этого свой метод. Для простых систем не играет большой роли, какой метод использовать – все равно получите решение достаточно быстро и с высокой точностью. Но для сложных или специфических систем бывает, что некоторые методы вообще не могут дать удовлетворительного решения за приемлемое время. Именно для таких сложных, но не редких случаев в MathCAD и введено несколько различных методов решения систем ДУ.
rkfixed – метод Рунге-Кутта с фиксированным шагом интегрирования. Самый простой и быстрый метод, но далеко не всегда самый точный. Полностью аналогичен использованию функции Odesolve с выбранным в контекстном меню методом Fixed.
Rkadapt – метод Рунге-Кутта с переменным шагом интегрирования. Величина шага адаптируется к скорости изменения функции решения. Данный метод позволяет эффективно находить решения уравнений, в случае если оно содержит как плавные, так и быстро меняющиеся участки. Там, где решение меняется слабо, шаги выбираются более редкими, а в областях его сильных изменений – частыми. В результате для достижения одинаковой точности требуется меньшее число шагов, чем для rkfixed. Полностью аналогичен использованию функции Odesolve с выбранным в контекстном меню методом Adaptive.
Bulstoer – метод Булирша – Штера. Этот метод более эффективен, чем метод Рунге-Кутта, в случае если решение является плавной функцией.
Имена функций Rkadapt и Bulstoer начинаются с прописной буквы. В MathCAD для некоторых имен функций неважно, с какой буквы они записаны, но для перечисленных функций это принципиально, т.к. в MathCAD также существуют функции с такими же именами, только записанные с маленькой буквы – rkadap, bulstoer. Эти функции используются в тех случаях, когда важным является решение задачи в конечной точке интервала интегрирования.
Выше приведены примеры решения тех же дифференциальных уравнений первого и второго порядка, которые были решены с использованием вычислительного блока Given/Odesolve.
Применение встроенных функций в документах MathCAD выглядит сходным образом, т.е. функции Rkadapt и Bulstoer имеют тот же синтаксис, что и выше приведенная функция rkfixed. Назначение аргументов в этих встроенных функциях следующее:
y – вектор начальных значений неизвестных функций, входящих в систему. В случае одного уравнения и одной неизвестной функции – это просто число.
а – начало отрезка, на котором ищется решение системы (отрезка интегрирования). Именно в этой точке значения неизвестных функций принимаются равными элементам вектора y.
b – конец отрезка интегрирования.
n – количество частей, на которые разбивается отрезок [a, b] при решении системы. Чем больше это число, тем точнее получается решение, но расчет занимает больше времени.
F(x,y) – векторная функция, элементы которой содержат правые части уравнений системы в нормальной форме (когда левые части – первые производные от соответствующих функций, а в правых частях производные отсутствуют). Аргументами этой функции являются вектор y, элементы которого соответствуют различным неизвестным функциям системы, и скалярный аргумент x , соответствующий независимой переменной в системе. В случае одного уравнения функция F может быть скалярной функцией, зависящей от двух скалярных переменных x и y.
Возвращаемым значением всех вышеперечисленных встроенных функций является матрица. Первый столбец этой матрицы – это точки, на которые разбивается отрезок [a, b], а остальные столбцы – это значения функций системы в этих точках. Если в аргументе функции rkfixed было указано количество частей n = 100, то матрица будет содержать 101 строку вместе с начальной.
Решение систем обыкновенных дифференциальных уравнений.
Для численного интегрирования систем ОДУ в MathCAD также имеется выбор – либо использовать вычислительный блок Given/Odesolve, либо встроенные функции rkfixed, Rkadapt и Bulstoer.
При решении систем ОДУ MathCAD требует, чтобы система ОДУ была представлена в нормальной форме (когда левые части – первые производные от соответствующих функций, а в правых частях производные отсутствуют):
где Y и Y’ – соответствующие неизвестные векторные функции переменной t, а F – вектор правых частей системы уравнений первого порядка. Именно векторное представление используется для ввода системы ОДУ в среде MathCAD.
Если в систему ОДУ входят и уравнения высших порядков, то оно тоже сводится к системе уравнений первого порядка, как было показано выше. При этом количество нулевых условий для вычислительного блока Given/Odesolve, а также размер вектора начальных условий y и размер вектора правых частей F(x,y) для встроенных функций rkfixed, Rkadapt и Bulstoer должны быть равны сумме порядков всех уравнений.
Вначале покажем решение систем ОДУ первого порядка с использованием вычислительного блока Given/Odesolve
Функция Odesolve для системы ОДУ имеет несколько иной, по сравнению с одним уравнением, синтаксис. Теперь она возвращает вектор функций, составляющих решение системы. Поэтому в качестве первого аргумента функции нужно ввести вектор, состоящий из имен функций, использованных при вводе системы. Второй и третий аргументы то же самое, что и в задаче с одним ОДУ.
Решение системы ОДУ показано на графике слева. Как известно, решения ОДУ часто удобнее изображать не в таком виде, а в фазовом пространстве, по каждой из осей которого откладываются значения каждой из найденных функций (как показано на рисунке справа). При этом аргумент входит в них лишь параметрически. В рассматриваемом случае двух ОДУ такой график – фазовый портрет системы – является кривой на фазовой плоскости. В общем случае, если система состоит из N ОДУ, то фазовое пространство является N – мерным. При N > 3 наглядность теряется, и для визуализации фазового портрета приходится строить его различные проекции.
Рассмотрим решение этой же системы ОДУ первого порядка с использованием встроенной функции rkfixed.
Полученное решение полностью соответствует вышеприведенному решению с использованием вычислительного блока Given/Odesolve. Следует отметить, что начальные условия здесь задаются в виде вектора y, а функциям x(t) и y(t) соответствуют элементы этого вектора y1 и y2. Вектор начальных условий y и вектор правых частей F имеют размер равный двум, т.к. система состоит из двух уравнений первого порядка. Для системы ОДУ, состоящей из двух уравнений второго порядка, размер этих векторов будет равен четырем
Решение жестких ОДУ и систем ОДУ .
Сложно дать математически точное определение жесткости, поскольку задачи, входящие в этот класс, весьма разнообразны. Чаще всего жесткими дифференциальными уравнениями называются уравнения, в решении которых есть плавно меняющаяся компонента, а также быстро затухающие возмущения.
Для жестких систем (stiff) не работает обычный метод Рунге-Кутта или Булирша-Штера. Наличие быстро затухающего возмущения приводит к тому, что эти численные методы дают расходящееся решение. Для жестких задач разрабатываются специальные методы. В MathCAD предусмотрены три различные функции для решения жестких задач:
Radau – метод Radaus для жестких систем. Полностью аналогичен использованию функции odesolve с выбранным в контекстном меню методом Stiff.
Stiffb – метод Булирша-Штера, адаптированный для жестких систем.
Stiffr – метод Розенброка.
Краевые задачи для ОДУ
Постановка краевых задач для ОДУ отличается от задач Коши, рассмотренных выше, тем, что граничные условия для них ставятся не в одной начальной точке, а на обеих границах расчетного интервала. Если имеется система N ОДУ первого порядка, то часть из N условий может быть поставлена на одной границе интервала, а оставшиеся условия – на противоположной границе. В связи с тем, что условия поставлены не на одной, а на обеих границах интервала, краевые задачи нельзя решить изложенными выше методами, предназначенными для задач Коши. Для решения краевой задачи в MathCAD нет отдельной функции. Однако есть функции, позволяющие превратить краевую задачу в задачу Коши. Эти функции «угадывают» недостающие начальные условия, исходя из того, что решение должно удовлетворять заданным условиям в конечной точке интервала интегрирования. Простейшей из функций, предназначенных для приведения краевой задачи к задаче Коши, является функция sbval. Для того, чтобы решить двухточечную краевую задачу с помощью этой функции, следует выполнить следующие действия:
Задайте вектор v с количеством элементов равным количеству недостающих начальных условий. Значения элементов этого вектора – это начальные приближения, исходя из которых будет происходить поиск недостающих начальных условий. На данном этапе не конкретизируется, какой из элементов вектора будет соответствовать начальному значению той или иной неизвестной функции в задаче.
Задайте функцию F(x,y). Эта функция уже описывалась выше. Она представляет собой вектор, каждый элемент которого – это правая часть одного из уравнений системы.
Задайте еще одну векторную функцию load(x,v). Это функция от скалярного аргумента x и вектора v, который имеет столько же компонент, сколько недостающих начальных условий в системе. Сам вектор load должен содержать такое же количество элементов, как и вектор F, т.е. столько, сколько должно быть начальных условий в задаче. Если начальное значение какой-либо из функций известно, то соответствующий элемент вектора load должен содержать это значение. Для функций, начальное значение которых неизвестно, соответствующий элемент вектора load должен содержать один из элементов вектора v.
Следует задать еще одну некоторую функцию score(x,y). Аргументы этой функции – скаляр x и вектор y, который имеет столько элементов, сколько уравнений в системе. Количество компонент вектора score должно равняться количеству граничных условий, заданных в конечной точке отрезка интегрирования. На самом деле каждая компонента этого вектора задает одно из граничных условий в конечной точке. Например, если в задаче есть граничной условие yi(b)=c, то один из элементов вектора score должен быть функцией, которая обращается в нуль при значениях x=b и y(b)=c. Конкретный вид этой функции не играет особой роли, поэтому проще всего задавать ее в таком виде: scorek(x,y):=yi-c. Таким же образом должны быть заданы все элементы вектора score для всех конечных условий задачи.
Теперь все введенные величины нужно использовать как аргументы в функции sbval. Использование этой функции выглядит следующим образом: Y:=sbval(v,a,b,F,load,score). Аргументы a и b – это начало и конец отрезка интегрирования.
Результатом функции sbval будет вектор, содержащий недостающие начальные значения. Их последовательность задается той последовательностью, в которой были использованы компоненты вектора v в функции load.
Постройте вектор начальных значений, используя известные начальные значения, а также элементы вектора Y, там где значения были неизвестны.
Теперь можно решить полученную задачу как задачу Коши, с помощью, например, функции Rkadapt.
Ниже приведено решение дифференциального уравнения на отрезке [0,3] с начальным условием y(0)=1 и граничным условием y(3)=4. Недостающее начальное условие – y’(0).
Решение уравнений в частных производных.
Постановка задач для уравнений в частных производных включает определение самого уравнения (или системы нескольких уравнений), а также необходимого количества краевых условий (число и характер которых зависит от специфики уравнения). Согласно своему названию, уравнения должны содержать частные производные неизвестной функции u (или нескольких функций, если уравнений несколько) по различным аргументам, например, пространственной переменной x и времени t. Соответственно, для решения задачи требуется вычислить функцию нескольких переменных, например, u(x,t) в некоторой области определения аргументов 0 £ x £ L и 0£ t £ T. Граничные условия определяются как заданные временные зависимости функции u, или производных этой функции, на границах расчетной области 0 и L, а начальные – как заданная функция u(x,0).
Сами уравнения в частных производных (несколько условно) можно разделить на три основных типа:
параболические – содержащие первую производную по одной переменной и вторую – по другой, причем все эти производные входят в уравнение с одинаковым знаком;
гиперболические – содержащие первую производную по одной переменной и вторую – по другой, входящие в уравнения с разными знаками;
эллиптические – содержащие только вторые производные, причем одного знака.
Средства MathCAD позволяют решать одномерные параболические и гиперболические уравнения (с одной пространственной и одной временной переменной), а также двумерное уравнение Пуассона. Такой, казалось бы, узкий круг решаемых задач на самом деле охватывает подавляющее большинство задач, возникающих в физике и технике.
Дифференциальные уравнения параболического типа.
Для решения дифференциальных уравнений в частных производных параболического типа можно построить группу решения с функцией pdesolve. Такая группа решения состоит из следующих элементов.
Ключевое слово given
Уравнение, которое нужно решить. Уравнение должно иметь такой вид: . Для ввода производных в данном случае нельзя пользоваться обычным оператором производной, а нужно пользоваться нижним индексом, как это обычно делается в литературе для записи уравнений в частных производных. При этом нижний индекс набирается не как числовой, а как буквенный (точка).
Граничные условия для функции u(x,t). Если уравнение второго порядка по x, то граничных условий должно быть два. Можно использовать как граничные условия Дирихле (u(x0,t) = w(t)), так и граничные условия Неймана (ux(x0,t) = w(t)) или их комбинацию, как в вышеприведенном примере.
Начальное значение для неизвестной функции – u(x,0).
функция pdsolve(u,x,xrange,t,trange,xpts,tpts). Ее аргументы имеют следующее назначение
u – имя функции, относительно которой решается уравнение. Для системы уравнений здесь должен быть вектор имен функций (как в odesolve).
X- имя пространственной переменной.
Xrange – двухкомпонентный вектор, задающий начало и конец интервала изменения пространственной переменной.
T – имя временной переменной. Основная разница между пространственной и временной переменными в данном случае – это то, что все уравнения могут содержать только первые производные по временной переменной.
Trange – еще один двухкомпонентный вектор. Этот вектор задает начало и конец временного интервала, на котором решается задача.
Xpts, tpts – количество точек, разбивающих для интегрирования пространственный и временной интервалы соответственно. Эти два параметра можно не указывать, тогда количество точек будет выбрано автоматически из соображений достаточной точности. Рекомендуется задавать эти параметры во всех задачах, кроме простых, поскольку во многих случаях высокая точность вычислений теряет смысл из-за погрешности, вносимой самим методом.
Выше приведен пример решения одномерной задачи теплопроводности для одного бруска, один конец которого теплоизолирован, а ругой поддерживается при определенной температуре
Дифференциальные уравнения гиперболического типа.
Функция pdsolve также позволяет решать системы ДУ в частных производных первого порядка по времени. Такая возможность может быть использована для решения задач с ДУ гиперболического типа. Ведь поскольку уравнения гиперболического типа содержат вторую производную по времени, то они не могут быть напрямую введены для решения функцией pdsolve. ДУ гиперболического типа должно быть приведено к системе из двух уравнений первого порядка по времени (как это делалось ранее для обычных ДУ высоких порядков). А далее полученная задача может быть решена с помощью функции pdsolve как система уравнений.
Помимо вычислительного блока given/pdsolve, для решения параболических и гиперболических уравнений можно использовать встроенную функцию numol.
Эллиптические уравнения.
Решение эллиптических уравнений в частных производных реализовано только для единственного типа задач – двумерного уравнения Пуассона. Это уравнение содержит вторые производные функции u(x,y) по двум пространственным переменным. Для его решения в MathCAD есть отдельные встроенные функции multigrid и relax.
Вопросы
Какие дифференциальные уравнения называются ОДУ первого порядка? Высшего порядка? Что такое нормальная форма ОДУ первого и высшего порядка? К чему сводятся ОДУ высшего порядка при решении?
Можно ли решить дифференциальные уравнения в MathCADе символьно?
Как решаются ОДУ с помощью вычислительного блока Given/Odesolve? Какой метод решения реализует функция Odesolve? Как можно изменить метод решения для этой функции?
Как решаются ОДУ с помощью встроенной функции rkfixed? Чем функция rkfixed отличается от функции Rkadapt?
Как осуществляется решение системы ОДУ с помощью вычислительного блока Given/Odesolve? Приведите примеры.
Как осуществляется решение системы ОДУ с помощью функции rkfixed? Приведите примеры.
Лекция № 16
Программирование в MathCAD
MathCAD – это система, ориентированная на пользователя, который не обязан знать абсолютно ничего о программировании. Создатели MathCAD изначально поставили перед собой такую задачу, чтобы дать возможность профессионалам – математикам, физикам и инженерам самостоятельно проводить сложные расчеты, не обращаясь за помощью к программистам. Несмотря на блестящее воплощение этих замыслов, выяснилось, что совсем без программирования MathCAD серьезно теряет в своей силе, в основном, из-за недовольства пользователей, знакомых с техникой создания программ.
В очень ранних версиях MathCAD встроенного языка программирования не было. Чтобы применять привычные операции проверки условий и организовывать циклы, приходилось изобретать причудливую смесь из встроенных функций if и until, а также комбинаций ранжированных переменных. Но надо отметить, что использование ранжированных переменных – мощный аппарат MathCAD, похожий на применение циклов в программировании. В подавляющем большинстве случаев намного удобнее организовать циклы с помощью ранжированных, чем заниматься для этого программированием.
И тем не менее встроенный язык программирования MathCADпозволяет решать самые различные, в том числе и довольно сложные, задачи и является серьезным подспорьем для расчетов. Поэтому последние версии MathCAD имеют не очень мощный, но весьма элегантный собственный язык программирования.
Для вставки программного кода в документы MathCAD имеется специальная панель инструментов
.
Большинство кнопок этой панели выполнено в виде текстового представления операторов программирования, поэтому их смысл легко понятен. Операторы программирования могут быть введены только с этой панели, но никак не с клавиатуры (можно еще их вводить с помощью сочетаний клавиш, которые приведены в тексте всплывающей подсказки).
Создание программного блока начинается с команды . Нажатие этой клавиши приведет к тому, что в рабочей области документа появится вертикальная черта, а справа от нее – два пустые поля ввода
Вертикальная черта означает, что строки, находящиеся справа от нее, образуют линейную программную последовательность операций. Эта черта является особенностью программ MathCAD. В полях ввода можно ввести две первые строки программы, а если требуется большее число строк, то необходимо нажимать клавишу столько раз, сколько необходимо строк. Не стоит забывать, что программа является полноценным выражением MathCAD. Это выражение может быть использовано для присвоения значения скалярной или векторной переменной или определения функции, или даже в составе другого выражения, в том числе и другой программы.
Для определения функции это будет выглядеть следующим образом:
Внутри программы можно использовать глобальные переменные документа, но изменить их значение внутри программы никак нельзя. Можно создать в программе другие переменные, доступ к которым может осуществляться только из самой программы. Эти переменные называются локальными переменными. Локальные переменные «не видны» извне. Локальная переменная создается с помощью знака локального присвоения с панели Programming. Для оператора локального присваивания, так же как и для операторов обычного и глобального присваивания, можно изменить внешний вид так, чтобы он выглядел как обычный знак равенства. Для этого достаточно вызвать контекстное меню этого оператора и в нем выбрать команду View Definition As/Equal.
Последняя строка любой программы не должна содержать никаких управляющих операторов. Эта строка задает значение, возвращаемое программой. В качестве этого значения может быть скаляр (число или переменная), вектор или матрица. Таким образом, последняя строка программы может содержать имя локальной переменной либо некоторое математическое выражение, куда входят как локальные, так и глобальные переменные, либо вектор или матрицу.
Вставить строку программного кода в уже созданную программу можно в любой момент с помощью той же самой кнопки Add Line. Для этого следует поместить на нужное место внутри программы линии ввода.
Если вертикальная линия ввода находится в начале текущей строки, то нажатие кнопки приведет к появлению новой строки перед текущей строкой, если вертикальная линия ввода находится в конце строки, то нажатие кнопки приведет к появлению новой строки после текущей. Можно выделить только часть текущей строки, что повлияет на положение новой строки в программе (например, если необходимо для некоторого условия выполнить не одно действие, а несколько). Таким образом, основной принцип создания программных модулей заключается в правильном расположении строк кода. Ориентироваться в их действии довольно легко, т.к. фрагменты кода одного уровня сгруппированы в программе с помощью вертикальных черт.
Проверка условий в программах.
Программы в MathCAD могут быть не только линейными, но и разветвленными. Одним из вариантов ветвления в программах является проверка условия. Условия могут проверять значения как локальных, так и глобальных переменных, а также выражений, содержащих эти переменные.
Для проверки условий в программах MathCAD служит оператор if . В поле ввода справа нужно ввести условие. Для ввода условий служит панель Boolean. На этой панели есть кнопки, предназначенные для проверки условий , а также кнопки, предназначенные для вставки логических операций (логическое отрицание, операция «и», операция «или», операция «исключающее или»). Вторые позволяют создавать сложные условия. В поле ввода слева нужно ввести строку программы, которая должна выполняться, если введенное условие истинно.
Если для условия «истинно» необходимо выполнение нескольких строк программы, надо воспользоваться кнопкой
.
Если невыполнение условия должно привести к выполнению какого-либо иного программного кода, можно в строке, следующей за оператором if, вставить оператор . В поле ввода слева от этого оператора необходимо ввести строку программы, которая будет выполняться только в том случае, если не выполнилось условие, заданное в операторе if.
Следует помнить, что если в программе введено подряд несколько строк с оператором if
,
то выражение слева от оператора otherwise будет выполнено только в том случае, если не выполняются условия, заданные во всех операторах if.
Примеры:
Создание циклов.
Другим очень важным элементом при создании нелинейных программ являются циклы. Циклы позволяют повторять несколько раз выполнение одного и того же программного блока. Для создания циклов в MathCAD предусмотрено два оператора for и while.
Цикл for – цикл со счетчиком.
В таких циклах создается некоторая переменная-счетчик, значение которой изменяется после каждого выполнения тела цикла. Выход из цикла происходит при достижении этой переменной заданного значения. Этот оператор вводится с панели Programming клавишей for . В поле ввода после слова for следует указать имя переменной – счетчика. Это может быть любое имя, которое не использовалось ранее в программе. Внутри цикла можно использовать эту переменную в любых выражениях, нельзя только присваивать ей никакого значения. В поле ввода после знака следует указать диапазон значений переменной-счетчика. Вводить диапазон в данном случае следует так же, как и при создании ранжированной переменной. Вместо диапазона в данном поле ввода можно указать имя некоторого массива (вектора или матрицы). В этом случае переменная-счетчик будет последовательно принимать значения всех элементов этого массива. Возможность перебора элементов массива не может быть реализована с помощью цикла while, поэтому именно в таких случаях цикл for и является незаменимым. В поле ввода под словом for следует ввести тело цикла.
Пример: Заполнить вектор числами от xнач до xкон с шагом h. Затем определить сумму элементов этого вектора и найти их среднее арифметическое значение.
Цикл while – цикл, который выполняется до тех пор, пока выполняется определенное условие.
В поле ввода справа от слова while следует ввести условие. Это условие строится по тем же правилам, что и в операторе if. Оно будет проверяться после каждого выполнения тела цикла и в тот момент, когда условие перестанет выполняться, повторение тела цикла прекратится. В поле ввода ниже слова while следует ввести тело цикла (напомним, что для ввода нескольких строк в теле цикла надо воспользоваться кнопкой Add Line).
Пример1: Вычислить сумму с точностью е.
Пример2: Найти первый элемент, превышающий определенный порог.
Использование операторов break и continue.
Иногда возникает необходимость повлиять на выполнение цикла некоторым образом, например, прервать его выполнение по какому-либо условию или выполнять некоторые итерации не так, как другие. Для этого и служат операторы break и continue.
Оператор break, если он расположен внутри цикла, означает немедленное прекращение выполнения текущей итерации и выход из цикла. Если есть необходимость прекратить выполнение цикла по какому-либо условию, то следует использовать конструкцию следующего вида break if (условие).
Пример: Выделить из массива все элементы от начала и до первого вхождения в него заданного числа.
Оператор continue используется для того, чтобы немедленно перейти в начало цикла и начать следующую итерацию. Этот оператор также обычно используется в составе конструкции вида continue if (условие). Оператор continue используется в случаях, когда необходимо чтобы некоторые вычисления производились для одних итераций и не производились для других.
Пример: Требуется заполнить элементы квадратной матрицы в шахматном порядке.
Оператор return (возврат значения).
Как мы уже указывали, результат выполнения программного модуля помещается, как правило, в последней его строке. Но можно прервать выполнение программы в любой ее точке (например, с помощью условного оператора) и выдать некоторое значение, применив оператор return. В этом случае при выполнении указанного условия значение, введенное в поле ввода после return, возвращается в качестве результата, и никакой другой код больше не выполняется. Вставляется в программу оператор return с помощью одноименной кнопки панели Programming . Пример:
Обработка ошибок.
Система MathCAD предоставляет пользователю некоторый контроль над ошибками, которые могут возникнуть при вычислении выражений или при выполнении программ. Для этой цели служит оператор on error, который можно вставить с помощью одноименной кнопки панели Programming . В поле ввода справа следует ввести выражение или программу, которые необходимо вычислить (известно, что это выражение может содержать ошибку при определенных значениях входных параметров). В поле ввода слева следует ввести выражение, которое будет выполнено вместо правого выражения, если при выполнении последнего возникнет ошибка. Пример: Если аргументу функции присвоено нулевое значение, то в программе возникает ошибка – деление на нуль. Но за счет оператора on error сообщение не выводится, а функции в этой точке присваивается значение, указанное слева от оператора on error – значение машинной бесконечности.
В поле ввода слева может быть введено текстовое выражение, сообщающее об ошибке
Конечно, если программа содержит только простейшие математические операции, то никаких ошибок, кроме деления на нуль или превышения наибольшего допустимого числа в ней возникнуть не может. В таких программах оператор on error используется редко. Но для более сложных программ, которые содержат функции решения дифференциальных уравнений, аппроксимации или другие сложные функции MathCAD, использование on error может избавить от многих трудностей.
Иногда может возникнуть ситуация обратная той, которая была описана выше, т.е. необходимо, чтобы при определенных условиях результатом выражения было сообщение об ошибке, хотя в действительности при этом не возникает ни одной стандартной ошибки MathCAD. Для таких случаев в MathCAD предусмотрена встроенная функция error. В качестве аргумента этой функции нужно в кавычках указать текст сообщения об ошибке, который должен быть выведен. Таким образом, если необходимо, чтобы программа возвращала ошибку при определенном условии, то следует использовать конструкцию вида: error («текст ошибки») if (условие).
Пример:
Для того, чтобы иметь возможность нормально вводить текст на русском языке в аргумент функции error (а также во все другие функции со строками), следует изменить шрифт, который используется во встроенном стиле Constant. Для того чтобы этот стиль правильно отображал русские буквы, установите курсор на любом числе или строковом выражении в формульном блоке. При этом в поле на панели инструментов Formatting, отображающем текущий стиль, должно быть написано – Constant. Теперь выберите из раскрывающегося списка шрифтов шрифт, поддерживающий кириллицу.
Примеры программирования.
1. Вычислить функцию sin(x) с точностью е.
2. Даны массивы А(5) и В(5). Получить массив С, в который записаны сначала элементы
массива А в порядке возрастания, а затем элементы массива В порядке убывания
3. По введенным значениям коэффициентов А, В, С определить корни квадратного уравнения
4. Дан массив натуральных чисел В(10). Определить, есть ли в нем 4 последовательных числа (например, 1, 2, 3, 4, и т.п.). Напечатать такие группы чисел.
Вопросы
Какая панель служит для вставки программного кода в документ MathCAD? Можно ли операторы программирования набрать с клавиатуры?
С какой команды начинается создание программного блока? Как с ее помощью можно создавать разветвленный программный блок?
Что такое определение программного блока? Обращение к программному блоку?
Что такое глобальные и локальные переменные для программного блока? Что может содержать последняя строка программного блока?
Как работает оператор if в программном блоке? Приведите пример.
Создание цикла с параметром в программном блоке. Приведите пример.
Создание цикла while в программном блоке. Приведите пример.
Для чего служат операторы break, continue в программном блоке? Приведите примеры.
Как работает оператор return в программном блоке? Приведите пример.
Как осуществляется обработка ошибок в программном блоке? Приведите пример.
Лекция №3
(установочная лекция)
Численные методы решения задач.
Обработка экспериментальных данных средствами MathCAD
Развитие электронной вычислительной техники, создание алгоритмических языков программирования и обширного математического обеспечения ЭВМ позволяет широко использовать численные методы вычислительной математики при решении различного рода прикладных задач в науке, технике, производстве.
Численные методы – это методы решения задач через последовательность элементарных операций, которые многократно повторяются до тех пор, пока не будет получен конечный результат с наперед заданной точностью.
Численными методами часто приходится решать следующие математические задачи:
решение нелинейных (алгебраических и трансцендентных) уравнений;
вычисление определенных интегралов;
решение обыкновенных дифференциальных уравнений;
решение дифференциальных уравнений в частных производных;
решение задач оптимизации;
обработка массивов числовых данных.
Каждая из этих задач может представлять собой самостоятельную прикладную задачу или являться составной частью более сложных прикладных задач.
Решение нелинейных уравнений
Обычно нелинейные уравнения делят на трансцендентные и алгебраические. Нелинейные уравнения, содержащие тригонометрические функции или другие специальные функции, например, lg(x) или ex, называются трансцендентными. Методы решения нелинейных уравнений такого типа делятся на аналитические и численные.
Первые позволяют найти решение непосредственно с помощью формул и всегда обеспечивают получение точного решения. Известным примером такого рода является формула корней квадратного уравнения. В численных методах задается процедура решения в виде многократного применения некоторого алгоритма. Задача отыскания корней нелинейного уравнения f(x) = 0 считается решенной, если мы сумеем определить корни с нужной степенью точности.
Для решения нелинейных уравнений известны следующие численные методы: метод половинного деления (метод дихотомии), метод хорд, метод касательных (Ньютона), метод секущих, метод простой итерации. Рассмотрим метод половинного деления.
Графическая интерпретация метода показана на рис.1.
Рис.1 Графическая интерпретация метода половинного деления
В этом методе отыскание корня уравнения f(x) = 0 проходит в два этапа. На первом этапе необходимо отделить корень, т.е.выделить интервал на оси абсцисс, на котором функция f(x) меняет свой знак. Для отделения корня следует провести вычисление функции f(x) в точках, расположенных через равные интервалы по оси x, до тех пор, пока не будут найдены два последовательных значения функции f(xn) и f(xn+1), имеющие противоположные знаки.
На втором этапе производится уточнение корня. Найденный интервал [xn, xn+1], содержащий корень, делится пополам
Затем по разности знаков функции на концах интервала определяем, на каком из полученных двух интервалов находится корень уравнения. Найденный интервал снова делится пополам и т.д.. В результате интервал, на котором находится корень сужается. Процесс повторяется до тех пор, пока f(xср) не станет достаточно близким к нулю. Блок-схема алгоритма метода показана на рис.2.
Рис.2 Блок-схема алгоритма метода половинного деления
Численное интегрирование
К численному интегрированию обращаются, когда нельзя через элементарные функции аналитически записать первообразную интеграла
или когда подобная запись имеет сложный вид.
Сущность большинства численных методов вычисления определенных интегралов состоит в замене подынтегральной функции f(x) аппроксимирующей функцией j(x), для которой можно легко записать первообразную в элементарных функциях, т.е.
Используемые на практике методы численного интегрирования можно сгруппировать в зависимости от способа аппроксимации подынтегральной функции. Дадим краткую характеристику групп наиболее распространенных методов.
1. Методы Ньютона - Котеса. Эти методы требуют, чтобы значения x были заданы с постоянным шагом. Они основаны на полиномиальной аппроксимации подынтегральной функции. Алгоритмы методов просты и легко поддаются программной реализации.
2. Методы Гаусса – Кристоффеля – методы наивысшей алгебраической точности. Эти методы используют неравно отстоящие узлы, расположенные по алгоритму, обеспечивающему минимальную погрешность интегрирования. Требуют большего объема памяти, чем методы первой группы.
3. Методы Монте-Карло. В этих методах узлы выбираются с помощью датчика случайных чисел. Ответ носит вероятностный характер. Методы эффективны при вычислении большой кратности.
Рассмотрим методы первой группы. По этому методу интервал разбивается на n равных отрезков, длина каждого из которых . Для вычисления каждой элементарной площади подынтегральную функцию на данном отрезке заменяют с некоторой степенью точности более простой функцией, интеграл от которой можно вычислить, используя только ординаты на концах отрезка. Метод Ньютона -Котеса дает три формулы для приближенного вычисления определенного интеграла
1. При замене f(x) на каждом отрезке прямой, параллельной оси x (рис.3,а), получим формулу прямоугольников
2. При замене f(x) на каждом отрезке прямой, соединяющей ординаты концов отрезка (рис.3,б), получим формулу трапеций
3. При замене f(x) дугой параболы, проведенной через концы трех ординат (рис.3,в), получим формулу Симпсона. При этом число отрезков должно быть четным
Точность вычисления интеграла тем выше, чем больше n и меньше h, и в пределе при n ® ¥ h ® 0 указанные формулы дадут точную величину определенного интеграла.
Рис.3 Численное определение интеграла
Блок схема алгоритма численного определения интеграла с заданной степенью точности представлена на рис. 4. На блок-схеме a,b,e,n – исходные данные, е – заданная точность, n – число разбиений, i1 – начальное значение интеграла, его можно задать равным нулю, I - вычисленное значение интеграла.
Для достижения заданной точности число разбиений удваивают до тех пор, пока будет удовлетворено условие |i – i1|<e.
Рис.4 Блок схема алгоритма численного определения интеграла с заданной степенью точности по формуле прямоугольников
Обработка экспериментальных данных средствами MathCAD.
Инженеру на практике часто приходится сталкиваться с необходимостью определения функции, которая задана таблично. Т.е. известны экспериментально снятые аргумент и функция в узловых точках, а в промежутках эта функция неизвестна и ее надо найти.
Для анализа экспериментальных зависимостей и приведения их к наглядному виду часто используются такие средства, как интерполяция, сглаживание и аппроксимация. В некоторых задачах для анализа зависимости бывает необходимо найти ее Фурье-компоненту. Все перечисленные средства анализа можно реализовать средствами MathCad.
Интерполяция.
Интерполяцией называют заполнение отрезками кривых промежутков между заданными точками по тому или иному закону. Для проведения интерполяции в первую очередь должна быть задана экспериментальная зависимость в виде набора точек на плоскости. Для этого должны быть заданы два одномерных массива (вектора) – vx и vy, содержащие соответственно значения координат x и y каждой точки. При этом важно, чтобы значения в векторе vx были заданы в порядке возрастания.
Система MathCad позволяет проводить линейную интерполяцию и сплайн-интерполяцию наборов экспериментальных точек.
Простейшим вариантом интерполяции является линейная интерполяция. Она заключается в простом соединении точек между собой отрезками прямых. Для реализации такой интерполяции в MathCad существует встроенная функция linterp(vx,vy,x) , где vx vy – уже известные векторы, содержащие координаты последовательности точек, x – координата точки, в которой нужно вычислить значение интерполирующей функции. Пример построения линейной интерполяции приведен на рис.5
Рис.5 Линейная интерполяция
На практике линейная интерполяция применяется редко.
Из всех видов интерполяции наиболее часто используется интерполяция, где экспериментальные точки попарно соединяются отрезками полиномов. Чаще всего для этого выбирают полиномы третьей степени(поэтому такая кривая и называется кубическим сплайном). Для того чтобы найти коэффициенты этих полиномов, очевидно, недостаточно того условия, что кривая должна проходить через экспериментальные точки. Поэтому на сплайн накладываются дополнительные условия сшивки – первая и вторая производные слева и справа от каждой экспериментальной точки должны быть равны между собой. Но и после этого количество условий остается на два меньше, чем количество неизвестных коэффициентов. Дополнительные два условия должны быть наложены в начальной и конечной экспериментальных точках, поскольку в них нет условий сшивки. Эти условия можно выбрать по-разному. В MaqthCad существуют три различных функции для построения кубических сплайнов с различными дополнительными условиями.
lspline(vx,vy) – в начальной и конечной точках накладывается условие линейности, т.е. вторая производная от функции равна нулю. Первая буква в названии функции – l , означает linear (линейный).
pspline(vx,vy) – на первом и последнем интервале кривая является параболой, т.е. полиномиальный коэффициент при x3 равен нулю. Буква p означает parabolic (параболический).
cspline(vx,vy) – полиномиальные коэффициенты при x3 на первых двух интервалах равны между собой точно так же, как на последних двух интервалах. Буква c означает cubic (кубический).
Результатом каждой из перечисленных функций является вектор, содержащий значения вторых производных от интерполяционной кривой во всех точках, заданных в массиве vx. Для того чтобы исходя из этого вектора построить кривую, нужно воспользоваться встроенной функцией interp(v,vx,vy,x), где vx и vy – массивы экспериментальных точек, v – массив, полученный как результат одной из трех функций, перечисленных выше, x- координата, в которой нужно вычислить значение интерполяционной кривой. Пример интерполяции кубическим сплайном приведен на рис.6.
Рис.6 Интерполяция кубическим сплайном
В приведенном примере использована функция pspline. В большинстве случаев от того, какую функцию вы используете, слабо зависит поведение кривой внутри интервала экспериментальных значений. Заметное отличие появляется лишь за границами этого интервала.
Кубический сплайн является эффективным средством построения интерполяционной кривой в подавляющем большинстве случаев. Но иногда использование кубического сплайна может привести к нежелательным результатам. Чаще всего это происходит в тех случаях, когда данные очень неравномерно распределены вдоль оси x. В таких случаях на кривой кубического сплайна могут появляться острые экстремумы в промежутках между экспериментальными точками. В некоторых подобных случаях получить лучщую интерполяционную кривую помогает использование другого вида интерполяции – В-сплайна. Основное отличие В-сплайна от всех описанных выше методов – сшивка отрезков кривых происходит не в экспериментальных точках, а между ними, в специально заданных точках. В MathCad для реализации интерполяции В-сплайном служит функция bspline(vx.vy,u,n), где vx,vy – векторы, содержащие координаты экспериментальных точек, u – вектор, содержащий координаты точек сшивки, n – порядок полинома. Результатом функции bspline является вектор, который далее следует использовать как аргумент функции interp. В-сплайн в MathCad можно построить из отрезков прямых, парабол или кубических парабол, т.е. допустимые значения параметра n – 1,2 или 3. Количество точек сшивки не является произвольной величиной и должно быть всегда на n-1 меньше, чем количество экспериментальных точек. Также на координаты точек сшивки накладываются следующее условие: первая точка сшивки должна быть не правее первой экспериментальной точки, а последняя не левее последней экспериментальной точки. Остальные точки сшивки могут произвольным образом располагаться внутри отрезка. Пример использования В-сплайна приведен на рис.7.
Экстраполяция.
Интерполяция дает возможность вычислять значения неизвестной функции в промежутках между экспериментальными точками, но иногда возникает необходимость вычислять значения функции вне области, ограниченной этими точками. Для этого используют так называемые методы экстраполяции.
При построении кубического сплайна, значение интерполяционной кривой может быть вычислено также и в любой точке за пределами «пограничной» области. Конечно, данный способ экстраполяции можно использовать только на очень небольшом расстоянии от «пограничных» точек, поскольку кривая является кубической параболой и быстро уходит в область очень больших значений, не имеющих ничего общего с реальной зависимостью.
Рис.7 Сравнение эффективности кубического сплайна и В-сплайна
Также в MathCad есть одна встроенная функция для проведения экстраполяции – predict(v,m,n), где v – вектор значений функции на том отрезке, где она известна (значения аргумента в данной функции не задаются, и считается, что точки распределены равномерно), m – количество элементов вектора v, на основании которых проводится экстраполяция ( естественно, выбираются точки, ближайшие к правой границе), n – количество точек в рассчитываемом векторе. Пример экстраполяции от осциллирующей функции приведен на рис.8
k,101+i
Рис.8 Экстраполяция с помощью функции predict
Результатом функции predict является вектор, состоящий из n элементов и задающий значения функции справа от границы выборки, т.е. в области, где она была не известна. Алгоритм, используемый в функции predict, наилучшим образом подходит для экстраполяции различного рода осциллирующих зависимостей. В некоторых случаях можно получить удовлетворительный результат экстраполяции даже для негладких зависимостей, таких как пилообразный или прямоугольный сигнал. Зато для непериодических зависимостей приемлемый результат можно получить очень редко и только на очень небольшом расстоянии.
Регрессия
Результаты экспериментов всегда содержат некоторую случайную погрешность. Причем часто погрешность оказывается величиной одного порядка с измеряемой величиной. В таких случаях интерполяционная кривая будет весьма далека от истинной зависимости. Поскольку подобные ситуации возникают довольно часто, то интерполяция редко используется при анализе результатов экспериментов. Гораздо шире здесь применяется регрессионный анализ. Регрессией называется подгон параметров той или иной простой функции для наилучшей аппроксимации экспериментальных данных (от латинского approximo – приближаюсь). Если аппроксимирующая функция выбрана удачно, то значения ее параметров могут быть источником разнообразной информации об измеряемой величине.
Система MathCad содержит большое количество встроенных функций для проведения регрессионного анализа с использованием любых аппроксимирующих функций и их комбинаций. Все функции MathCad для поиска оптимальных значений параметров функций используют метод наименьших квадратов, можно еще применить метод медиан.
Линейная регрессия
Линейная регрессия является наиболее простой, но, тем не менее, используется чаще любого другого вида регрессии. Она заключается в нахождении таких значений параметров a и b, чтобы прямая y = a+bx наилучшим образом аппроксимировала заданной набор точек. Для проведения линейной регрессии по методу наименьших квадратов в MathCad существует функция line(vx,vy). Результатом функции line будет вектор, содержащий значения параметров a и b для построения регрессионной прямой. Пример линейной регрессии представлен на рис.9
Рис.9 Линейная регрессия с помощью функции line
На рис.9 для анализа эффективности линейной регрессии построена псевдоэкспериментальная последовательность точек. Для этого к точным значениям линейной функции прибавлены случайные числа, сгенерированные с помощью функции rnorm.Затем проведена линейная регрессия полученного набора точек. Ее результат можно сравнить с исходной прямой. Как видно из рис., параметры регрессионной прямой заметно отличаются от исходных, но на графике обе прямые проходят достаточно близко.
Для линейной регрессии в MathCad реализован также метод медиан с помощью функции medfit(vx,vy). Результатом этой функции является вектор, аналогичный результату line. Нельзя утверждать, что один из двух методов регрессии более точен. Метод наименьших квадратов является наиболее универсальным, поэтому функция line считается в MathCad основной функцией для проведения линейной регрессии.
Полиномиальная регрессия.
Кроме аппроксимации неизвестной функции с помощью прямой, широкое применение находит и аппроксимация с помощью полиномов различной степени. Для этой цели в MathCad существует функция regress(vx,vy,n). Последний аргумент данной функции задает степень полинома. Можно использовать полином любой степени, но не большей, чем число точек в выборке минус один. При n = 1 получится линейная регрессия. На практике наибольшее применение находит полиномиальная регрессия от второй до пятой степени.
Результатом функции regress является вектор, содержащий коэффициенты аппроксимирующего полинома. Эти коэффициенты располагаются в векторе, начиная с четвертого элемента в порядке возрастания степеней. Первые три элемента данного вектора являются служебными и используются для того, чтобы результат функции regress можно было использовать как первый аргумент функции interp по аналогии со сплайн-интерполяцией. Пример полиномиальной регрессии представлен на рис.10.
Рис.10 Полиномиальная регрессия
На рис.10 для иллюстрации полиномиальной регрессии построена псевдоэкспериментальная последовательность точек. В качестве теоретической функции был использован полином третьей степени с коэффициентами 0,1,-2,1. Как видно из примера, коэффициенты, рассчитанные функцией regress, значительно отличаются от коэффициентов исходного полинома. Тем не менее в области экспериментальных точек обе кривые достаточно близки, но за пределами этой области резко расходятся.
Аппроксимация набора точек различными элементарными функциями
Физические величины зачастую подчиняются зависимостям отличным от линейных или полиномиальных. Поэтому в MathCad существует несколько функций, позволяющих выполнить регрессию с использованием зависимостей, наиболее часто встречающихся на практике. Таких функций в MathCad всего шесть. Вот некоторые из них:
expfit(vx,vy,vg) – регрессия экспоненциальной функцией y = a*eb*x+c.
sinfit(vx,vy,vg) – регрессия синусоидальной функцией y = a*sin(x+b)+c.
pwrfit(vx,vy,vg) - регрессия степенной функцией e = a*xb +c.
Перечисленные функции используют трехпараметрическую аппроксимирующую функцию, нелинейную по параметрам. При вычислении оптимальных значений трех параметров регрессионной функции по методу наименьших квадратов возникает необходимость в решении сложной системы из трех нелинейных уравнений. Такая система часто может иметь несколько решений. Поэтому в функциях MathCad, которые проводят регрессию трехпараметрическими зависимостями, введен дополнительный аргумент vg. Данный аргумент – это трехкомпонентный вектор, содержащий приблизительные значения параметров a,b и c, входящих в аппроксимирующую функцию. Неправильный выбор элементов вектора vg может привести к неудовлетворительному результату регрессии. На рис.11 приведен пример проведения экспоненциальной регрессии с помощью функции expfit, регрессия проведена для двух различных значений вектора vg.
Рис.11 Экспоненциальная регрессия
Аппроксимация набора точек функциями, заданными пользователем.
В MathCad существуют средства для проведения регрессии самого общего вида. Это означает, что можно использовать любые функции в качестве аппроксимирующих и находить оптимальные значения любых их параметров, как линейных, так и нелинейных. В том случае, если регрессионная функция является линейной по всем параметрам, т.е. представляет линейную комбинацию жестко заданных функций, провести регрессию можно с помощью встроенной функции linfit(vx,vy,F). Аргумегт F – это векторная функция, из элементов которой должна быть построена линейная комбинация, наилучшим образом аппроксимирующая заданную последовательность точек. Результатом работы функции linfit является вектор линейных коэффициентов. Каждый элемент этого вектора – коэффициент при функции, стоящей на соответствующем месте в векторе F. Таким образом, для того чтобы получить регрессионную функцию, достаточно скалярно перемножить эти два вектора. Пример такой аппроксимации представлен на рис.12.
Рис.12 Использование функции linfit
Сглаживание
Система MathCad применяется для обработки различного рода сигналов. При этом очень важной процедурой является очистка сигнала от шумов. Один из вариантов решения данной задачи – это использование алгоритмов сглаживания (smoothig). Существует множество алгоритмов сглаживания данных, причем не всегда можно заранее сказать, какой из них будет наиболее эффективен для той или иной задачи. В MathCad реализовано три алгоритма сглаживания и соответственно существует три функции для их выполнения.
medsmooth(vy,n) – реализует алгоритм «бегущих» медиан. Параметр n определяет ширину «окна» сглаживания, т.е. количество точек, которые используются при вычислении сглаженного значения в каждой точке. Параметр n должен быть целым нечетным числом. Данный алгоритм лучше всего подходит для сглаживания наборов точек, в которых лишь некоторые точки резко выбиваются из общей гладкой последовательности (см.рис.13).
ksmooth(vx,vy,b) – алгоритм Гауссового ядра. В данном алгоритме сглаженное значение в каждой точке вычисляется как весовое среднее от всего набора данных с ядром в виде функции Гаусса. Параметр b - это параметр ширины функции ядра. Данный метод наилучшим образом подходит для фильтрации зашумленного сигнала (см.рис.14).
supsmooth(vx,vy) – в данном алгоритме значение в каждой точке заменятся на значение регрессионной прямой, построенной с использованием некоторого количества близлежащих точек, причем данное количество выбирается по-разному для каждой точки с помощью адаптивного алгоритма.
Рис.13 Сглаживание сигнала с узкими нерегулярностями
Рис.14 Сглаживание зашумленного сигнала
Дискретное преобразование Фурье
Еще одна операция, широко применяемая при обработке сигналов , - вычисление Фурье-спектра. Для проведения данной операции с сигналами, заданными в виде массивов данных, система MathCad содержит численный алгоритм, называемый быстрым преобразованием Фурье (Fast Fourier Transform FFT). Для реализации данного алгоритма в MathCad существует несколько различных функций.
В том случае, если набор данных v состоит из 2m элементов, а также все числа в наборе данных действительны, то для проведения Фурье-преобразования следует пользоваться функциями fft(v) или FFT(v). Обе эти функции выполняют Фурье-преобразование, а различие между ними заключается лишь в нормировке результата. Результатом функций fft и FFT будет массив из 2m -1+1 комплексных чисел.
Если какое-либо из условий, перечисленных выше, не выполняется, т.е. массив содержит комплексные числа или не может быть расширен до размерности 2m, то следует пользоваться функциями cfft(v) и CFFT(v). Результатом функций cfft и CFFT будет массив комплексных чисел той же размерности, что и исходный.
Результатом каждой из перечисленных функций будет массив комплексных чисел. Исходя из этого массива, можно построить амплитудно-частотную (АЧХ) или фазово-частотную (ФЧХ) характеристику сигнала. Для построения АЧХ следует вычислить абсолютное значение каждого элемента в массиве. Пример такого построения приведен на рис.15.
Рис.15 Использование функции fft для построения АЧХ - сигнала
На рис 16 проведена фильтрация сигнала, построенного на рис.15. Конечно, такой метод фильтрации можно использовать, только если уровень шума ощутимо ниже уровня сигнала.
Рис.16 Амплитудная фильтрация сигнала