МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Ãîñóäàðñòâåííîå îáðàçîâàòåëüíîå ó÷ðåæäåíèå âûñøåãî ïðîôåññèîíàëüíî...
276 downloads
1126 Views
552KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Ãîñóäàðñòâåííîå îáðàçîâàòåëüíîå ó÷ðåæäåíèå âûñøåãî ïðîôåññèîíàëüíîãî îáðàçîâàíèÿ ÑÀÍÊÒ-ÏÅÒÅÐÁÓÐÃÑÊÈÉ ÃÎÑÓÄÀÐÑÒÂÅÍÍÛÉ ÓÍÈÂÅÐÑÈÒÅÒ ÀÝÐÎÊÎÑÌÈ×ÅÑÊÎÃÎ ÏÐÈÁÎÐÎÑÒÐÎÅÍÈß
А. И. Панферов, А. В. Лопарев, В. К. Пономарев
ПРИМЕНЕНИЕ MATHCAD В ИНЖЕНЕРНЫХ РАСЧЕТАХ Учебное пособие
Ñàíêò-Ïåòåðáóðã 2004
УДК 681.3.068 ББК 32.973 П16 Ïàíôåðîâ À. È., Ëîïàðåâ À. Â., Ïîíîìàðåâ Â. Ê. П16 Ïðèìåíåíèå Mathcad â èíæåíåðíûõ ðàñ÷åòàõ: Учеб. пособие /
СПбГУАП. СПб., 2004. 88 с.: ил. Учебное пособие содержит описание основных возможностей прикладного пакета Mathcad 2000 с подробными рекомендациями по его использованию в инженерных расчетах. Приводятся алгоритмы решения стандартных задач, примеры и необходимые сведения из курса высшей математики. Пособие предназначено для студентов технических специальностей 1812, 1903, 1310. Рецензенты: кафедра автоматики и процессов управления Санкт-Петербургского государственного электротехнического университета; кандидат технических наук С. Г. Кучерков (ГНЦ РФ – ЦНИИ "Электроприбор") Утверждено редакционно-издательским советом университета в качестве учебного пособия Учебное издание
Панферов Александр Иванович Лопарев Алексей Валерьевич Пономарев Валерий Константинович
ПРИМЕНЕНИЕ MATHCAD В ИНЖЕНЕРНЫХ РАСЧЕТАХ Учебное пособие Редактор А. В. Подчепаева Компьютерный набор и верстка Н. С. Степановой Сдано в набор 04.06.04. Подписано в печать 08.10.04. Формат 60×84 1/16. Бумага офсетная. Печать офсетная. Усл. печ. л. 5,2. Усл. кр.-отт. 5,3. Уч.-изд. л. 5,6. Тираж 100 экз. Заказ № 444 Редакционно-издательский отдел Отдел электронных публикаций и библиографии библиотеки Отдел оперативной полиграфии СПбГУАП 190000, Санкт-Петербург, ул. Б. Морская, 67
© ГОУ ВПО «Санкт-Петербургский государственный университет аэрокосмического приборостроения», 2004
2
ОГЛАВЛЕНИЕ Предисловие ........................................................................................... 1. ВВЕДЕНИЕ В MATHCAD ................................................................ 1.1. Окно Mathcad .......................................................................... 1.2. Примеры простых действий .................................................. 1.3. Графики ................................................................................... 1.4. Текстовые области ................................................................. 2. ВЕКТОРЫ И МАТРИЦЫ ................................................................. 2.1. Задание массивов ................................................................... 2.2. Векторные и матричные операторы и функции ................. 2.3. Дискретные аргументы .......................................................... 3. ОПЕРАТОРЫ ...................................................................................... 4. ВСТРОЕННЫЕ ФУНКЦИИ ............................................................. 4.1. Тригонометрические функции ............................................ 4.2. Логарифмические и показательные функции .................... 4.3. Специальные функции и функции усечения ...................... 4.4. Дискретное преобразование Фурье ...................................... 4.5. Преобразование Фурье в вещественной области ............... 4.6. Альтернативные формы преобразования Фурье ................. 4.7. Кусочно-непрерывные функции ........................................... 4.8. Статистические функции ...................................................... 4.9. Плотности распределения вероятности ............................... 4.10. Функции распределения ...................................................... 4.11. Интерполяция и функции предсказания ........................... 4.12. Функции регрессии .............................................................. 5. РЕШЕНИЕ УРАВНЕНИЙ ................................................................ 5.1. Численное решение уравнения с одним неизвестным ...... 5.2. Нахождение корней полинома .............................................. 5.3. Решение систем уравнений ................................................... 5.4. Решение дифференциальных уравнений ............................ 6. СИМВОЛЬНЫЕ ВЫЧИСЛЕНИЯ .................................................... 6.1. Расчеты .................................................................................... 6.2. Преобразования Фурье и Лапласа ........................................ 6.3. Прямое и обратное z-преобразования .................................. 7. ПРОГРАММИРОВАНИЕ .................................................................. Библиографический список ..................................................................
4 6 7 8 10 13 15 15 17 26 31 38 38 39 40 41 42 44 44 47 47 48 48 52 56 56 60 61 64 72 75 79 81 83 88 3
ПРЕДИСЛОВИЕ Эффективная работа инженера в настоящее время немыслима без персональных компьютеров (ПК) и развитых телекоммуникационных средств. Работа самого ПК обеспечивается операционной системой (например, MS-DOS, OS/2, Be OS, Linux, Windows и др.), а для решения прикладных задач используют специальные пакеты прикладных программ. Естественно, квалифицированный пользователь, владеющий в достаточной степени одним из языков программирования (например, С, Pascal, Fortran, Lisp, Prolog и др.), может самостоятельно разработать и отладить отдельную программу или комплекс программ, позволяющий реализовать на ПК алгоритм его задачи. Причем в ряде случаев разработанная пользователем узкоспециализированная программа может работать существенно быстрее, чем программа из программного пакета. Однако такой подход требует, как правило, больших трудозатрат на программирование, отладку и тестирование каждой программы, значительно сокращая долю творческого труда по решению конкретной технической задачи. Для сокращения времени программирования создано большое количество прикладных пакетов, области использования которых в значительной степени перекрываются. Для наиболее эффективного использования вычислительной техники необходимо правильно выбрать наилучший пакет программ на самой ранней стадии решения прикладной задачи. Наиболее известные пакеты прикладных программ, используемые в настоящее время при инженерных расчетах, – это Mathcad, Matlab, Derive, Maple V, Mathematica, VisSim известных зарубежных фирм и пакеты российских производителей СПО Динамика и CLASSIC (разработка СПГЭТУ). При исследовании систем автоматического регулирования, вычислительных математических задач наиболее эффективно использование программной системы Matlab с обширными предметно-ориентирован4
ными библиотеками (toolbox) и инструментом визуального моделирования Simulink. Для визуального моделирования и моделирования совместно с реальной аппаратурой наиболее удобен VisSim, бесплатная академическая версия которого доступна в университете. Для анализа и синтеза линейных систем управления наиболее удобен CLASSIC. Аналитические преобразования позволяют выполнять многие пакеты программ, например Mathcad, Matlab, Mathematica, но наиболее мощным средством для автоматизации аналитических расчетов считается пакет Maple V. Более простым специализированным пакетом для аналитических преобразований является Derive. Все указанные выше пакеты поддерживаются и развиваются крупными фирмами. В Internet имеется достаточное количество страниц, на которых по названию пакета можно найти библиотеки свободно распространяемых программ, учебные пособия, дополнения и исправления к новым версиям программ (patch), ссылки на телеконференции. Данное учебное пособие знакомит с популярным пакетом программ Mathcad, содержит большое количество примеров. При изучении пособия рекомендуется проделать все примеры на ПК.
5
1. ВВЕДЕНИЕ В MATHCAD Mathcad чрезвычайно прост в использовании и легок в обучении. Большинство действий, необходимых для управления программой, являются интуитивно понятными, и на освоение основных ее возможностей человеку, работавшему ранее в среде Windows, требуется два - три часа. Система Mathcad обладает следующими особенностями: везде используется привычный способ математической записи. Если существует общепринятый способ изображения уравнения, математической операции или графика, то Mathcad использует его; используется принцип "То, что Вы видите, это то, что Вы получаете" (What you see is what you get – WYSIWYG). Не существует никакой скрытой информации, все показывается на экране. Результат вывода на печать выглядит в точности так же, как на экране дисплея; простые выражения набираются на клавиатуре с использованием стандартных клавиш. Для специальных операторов (знаков сумм, интегралов, матриц и т. д.) предусмотрены специальные палитры; большое количество хорошо проверенных числовых алгоритмов значительно облегчает решение прикладных задач; помимо численных расчетов возможны символьные преобразования, ∞
π2 или sin2x + cos2x = 1; 6 k =1 обладает широкими графическими возможностями для анализа результатов расчетов, позволяет создавать анимации; полностью поддерживает технологии OLE и DDE, позволяющие осуществлять связи с другими приложениями Windows; удобная справочная система. Отметив указателем оператор, функцию или сообщение об ошибке и нажав [F1], можно отобразить на экране поясняющую информацию из справочной системы. Справки содержат пошаговые разъяснения по конкретной теме и иллюстрирующие примеры;
например, такие как
6
∑ k −2 =
шпаргалки (Quick Sheets). Совокупность часто используемых процедур Mathcad оформлена в виде набора легкодоступных документов шпаргалок. Для решения многих конкретных задач в шпаргалках можно найти подходящую заготовку и перетащить ее в рабочий документ. Аналогично можно использовать материалы, содержащиеся в электронных книгах; работает внутри Интернет, что позволяет использовать фрагменты расчетов, хранимые в огромных банках данных. 1.1. Окно Mathcad Двойной щелчок на пиктограмме Mathcad вызывает появление рекламной заставки, а через некоторое время окна Mathcad, показанного на рис. 1. Формулы могут размещаться в любом месте рабочего документа. Чтобы подвести курсор к нужному месту, невидимому в настоящий момент
Рабочий документ
Рис. 1. Окно Mathcad 2000
7
в окне, можно использовать полосы прокрутки, как в любой программе под Windows. Подобно другим программам под Windows, Mathcad содержит полосу меню. Чтобы вызвать меню, достаточно щелкнуть по нему мышью или нажать клавишу [Alt] вместе с подчеркнутым символом. Для использования кнопок палитр символов нужно установить курсор в выбранное место рабочего документа и щелкнуть левой кнопкой мыши. В рабочем документе появится небольшой крестик. Затем установить курсор на нужной кнопке палитр символов и снова нажать левую кнопку мыши и выбрать нужный элемент (знаки равенства, отношения, двух- или трехмерный график, интеграл, программную структуру и т. д.). Выбранный элемент появится на месте крестика в рабочем документе. Ниже полосы кнопок палитр символов находятся кнопки панели инструментов, дублирующие основные команды меню. Если указатель установить на кнопке, появляется текст, описывающий действие кнопки. Прямо под панелью инструментов располагается панель шрифтов, позволяющая изменять размер и другие характеристики шрифтов в формулах и тексте. В целях экономии места на экране каждая из этих компонент может быть выведена на экран, либо скрыта с помощью соответствующей команды из меню Окно. На всех рисунках в этом учебном пособии показан только рабочий документ. 1.2. Примеры простых действий Щелкнем на любом месте экрана левой кнопкой мыши и введем с помощью клавиатуры строку 15–8/104.5 = После набора знака равенства Mathcad вычисляет выражение и выводит результат
8 = 14.923 104.5 Этот пример демонстрирует особенности работы Mathcad. Mathcad отображает формулы в точности в том виде, как их печатают в книгах или пишут на доске – по всей площади экрана. Mathcad подбирает размеры для дробных черт, скобок и других математических символов, чтобы они выглядели на экране так, как их обычно пишут на бумаге. Mathcad понимает, какую операцию выполнять первой. В вышеприведенном примере Mathcad "знал", что деление нужно выполнить перед вычислением и соответственно отобразил выражение. 15 −
8
Выражение на экране можно редактировать, устанавливая в нужном месте указатель и заменяя старые символы на новые. После установки указателя на свободное поле или другое выражение новый результат будет вычислен автоматически. Наберем на клавиатуре следующие строки: t:0.5,0.6;20 b:0.1 x(t):exp(–b⋅t)⋅sin(t) x(t)=
После щелчка мышью вне равенства для x(t) рабочий документ примет следующий вид: t:= 0.5,0.6..20 b:= 0.1 x(t):= exp(–b⋅t)⋅sin(t) x(t)= 0.456 0.532 0.601 0.662 0.716 0.761 0.798 0.827 0.846 0.857 0.859 0.852 0.837 0.813 0.783 0.744
Первая строка обеспечивает последовательное присвоение аргументу t чисел 0,5; 0,6; 0,7 и т. д. до 20. Следует отметить, что двоеточие [:] на экране автоматически заменяется знаком присвоения [:=], а точка с 9
запятой [;] – знаком [..]. Третья строка вводит определение функции. Четвертая строка выводит значение функции для заданных значений аргумента в виде таблицы. На экране по умолчанию отображаются 16 первых строк таблицы. Для просмотра последующих элементов можно щелкнуть на любом месте таблицы мышью и использовать появившуюся полосу прокрутки либо "растянуть" таблицу. Mathcad может устанавливать формат вывода чисел, т. е. изменять число выводимых десятичных знаков, менять экспоненциальный вид представления чисел на обычную запись с десятичной точкой и так далее. Это делается следующим образом: щелчком левой кнопкой мыши на таблице выделить ее сплошной контурной линией; выбрать пункт Результат из меню Формат; в появившемся диалоговом окне установить нужные параметры. Например, "Пороговое значение" по умолчанию равно 3. Это значит, что числа, больше 103 и меньше 10–3, отображаются в экспоненциальном представлении. Чтобы заменить 3 на 6, нужно щелкнуть мышью справа от 3, нажать клавишу [BkSp] и напечатать 6 либо воспользоваться кнопками последовательного увеличения значений. 1.3. Графики Mathcad может строить двумерные графики в декартовых и полярных координатах, картины линий уровня, изображать поверхности и выводить ряд других трехмерных графиков. Рассмотрим создание простого двумерного графика, отображающего функцию, введенную в предыдущем разделе. Чтобы создать график в Mathcad, нужно щелкнуть мышью на том свободном месте, где его нужно разместить, и выбрать пункт График – X-Y Зависимость из меню Вставка. Появится пустой график с полями ввода для данных. В поле под серединой оси абсцисс нужно ввести имя переменной t. Теперь нужно щелкнуть в поле напротив середины оси ординат и ввести здесь x(t). Остальные поля предназначены для ввода границ на осях – максимального и минимального значений, откладываемых на оси. Если оставить их пустыми Mathcad автоматически заполнит их при создании графика. После щелчка вне графика Mathcad вычисляет и строит точки графика, как показано на рис. 2.
10
t:= 0.5,0.6..20 b:= 0.1 x(t):= exp(–b⋅t)⋅sin(t) 1
0.5 x( t)
0 –0.5
–1
5
10 t
15
Рис. 2. Расчет и построение графика x(t)
Для изменения размера графика следует: щелкнуть мышью вне графической области; нажать левую кнопку мыши и переместить курсор на график до охвата графика пунктирной линией; отпустить кнопку мыши. График останется охваченным сплошным черным прямоугольником; переместить курсор к правому нижнему углу прямоугольника. Указатель превратится в двойную стрелку; переместить указатель при нажатой левой кнопке мыши, растягивая график в желаемом направлении; отпустить кнопку мыши и щелкнуть мышью вне графической области, чтобы отменить ее выделение. Для придания графику желаемого вида его следует отформатировать. Форматирование осуществляется следующим образом: дважды щелкнуть по графику, чтобы вызвать соответствующее диалоговое окно; щелкнуть мышью на закладке "Оси X-Y". Появится набор установок для каждой оси, позволяющий устанавливать равномерный или логарифмический масштаб, линии сетки и нумерацию линий сетки. Активизировать каждую установку можно, щелкнув левой кнопкой 11
мыши по соответствующему квадратику. Об активизации установки свидетельствует появление в квадрате креста. Установка "Авто сетка" обеспечивает автоматический выбор числа интервалов сетки. Если квадратик не отмечен, можно установить число интервалов, набрав в поле "Число интервалов" число от 2 до 99; нажать "Применить", чтобы увидеть перерисованный график, не закрывая диалоговое окно; щелкнуть мышью на закладке "След". Щелкнуть мышью в прокручивающемся списке, чтобы выбрать нужную кривую (если их на графике несколько). Чтобы изменить имя кривой, напечатайте новое имя в текстовом поле под столбцом "Имя в легенде". Чтобы изменить маркер кривой, тип линии, ее толщину, цвет, вид графика, нажмите на стрелку около каждого соответствующего поля, чтобы увидеть раскрывающийся список свойств, и затем щелкните мышью на нужном месте; для подбора вида графика следует нажать "Применить", чтобы увидеть изменения, не закрывая диалоговое окно; щелкнуть на закладке "Метки". Щелкнуть на кнопке "Выше" или "Ниже", в зависимости от того, где нужно поместить заголовок. Mathcad отобразит заголовок, если последовательно нажать "Применить" и закрыть диалоговое окно нажатием "ОК". При необходимости до закрытия окна напечатать названия осей; дважды щелкните мышью на выбранном графике. Mathcad отображает диалоговое окно для форматирования графика в декартовых координатах. Щелкните мышью на закладке "Умолчание". Если хотите построить другие графики, подобные по оформлению данному, отметьте квадратик "Использовать для умолчания". Изменение значений по умолчанию воздействует только на новые графики, ранее созданные графики не затрагиваются. На рис. 3 приведены графики различных форматов. Для вывода нескольких кривых на одном и том же чертеже необходимо ввести первое выражение для оси ординат, поставить запятую. Непосредственно под первым выражением появится пустое поле. Введите туда второе выражение, сопровождаемое запятой, и т. д.
12
N:= 20
π ⋅⋅2 ⋅ π r (υ ) := cos (υ ) + 1 N y(υ):= r(υ)⋅sin(υ)
υ := 0,2 ⋅
x(υ):= r(υ)⋅cos(υ)
Формат по умолчанию
Линии сетки 2
2
y(υ) 0
y(υ) 0
–2
0
–1
i := 1 .. N
i2.5
2
2
1
0
x(υ)
1
2
Логарифмический масштаб и линии сетки 1.10–4
Гистограмма
1.10–4
i3
1 x(υ)
1.10–3 5000
i3 100 10
0
0
1 0 i
20
1
1
10 i
100
Рис. 3. Примеры различного представления графиков
1.4. Текстовые области Текстовые области служат для комментариев, объясняя и аннотируя уравнения и графики. Чтобы создать текстовую область, проделайте следующие операции: щелкните в свободном месте, где предполагается начать текстовую область. Затем выберете команду Текстовая область из меню Вставка (или нажмите клавишу ["]). Mathcad создаст тестовую область, крестообразный курсор преобразуется в маркер ввода и появится текстовая рамка; напечатайте нужный текст. Чтобы разбить строку или начать новую, в текстовой области нажмите клавишу [Enter]. 13
Для удаления символа слева нажмите [BkSp], а справа - [Del]. Для выхода из текстовой области щелкните вне области. При этом пропадает текстовая рамка. Для изменения ширины существующей текстовой области сделайте следующее: нажмите и удерживайте левую кнопку мыши около текстовой области; со все еще нажатой кнопкой перемещайте курсор так, чтобы текстовая область попала в выделяющий прямоугольник. При этом текстовая область скажется обведенной прямоугольником; отпустите кнопку мыши и переместите указатель на правый край текстовой области, чтобы он превратился в двойную стрелку. Нажмите кнопку мыши и изменяйте размер тестового окна таким же образом, как это делается при изменении размеров любого окна. Отметим, что для переноса любой области в другое место, следует выделить область пунктирной линией, как это описано выше, нажать кнопку мыши внутри области и, не отпуская кнопку, перемещать область на другое место. Если область содержит один объект, он будет выделен сплошной линией, и для его перемещения необходимо установить курсор так, чтобы он принял вид ладони.
14
2. ВЕКТОРЫ И МАТРИЦЫ Одиночное число в Mathcad называют скаляром. Столбец чисел называется вектором, а прямоугольная таблица чисел - матрицей. Общий термин для вектора или матрицы - массив. 2.1. Задание массивов Чтобы создать массив нужно выполнить следующее: щелкните на свободном месте рабочего документа; выберите команду Матрица из меню Вставка или нажмите [Ctrl+M]. Появится диалоговое окно, предлагающее ввести количество строк и столбцов. Для примера введите 3 строки и 1 столбец; нажмите "OK". Mathcad создает вектор с тремя пустыми полями для заполнения. Заполните эти поля числами 2, 3, 4 так, чтобы на экране появился вектор 2 3 4
Нажмите клавишу пробела. Выделяющая рамка теперь заключает весь вектор. Это значит, что знак плюс, который будет напечатан, относится к вектору целиком, а не к какому-либо из элементов. Нажмите теперь плюс [+]. Mathcad показывает поле для ввода второго вектора. 2 3 + 4
Используйте диалоговое окно Вставить Матрицу, чтобы создать другой вектор с тремя элементами, и заполните его. Нажмите знак [=], чтобы увидеть результат
15
2 0 2 3 + –1 = 2 4 1 5
Матрице можно дать имя так же, как и скаляру. Например, напечатайте в свободном месте [V:] и выберите команду Матрица из меню Вставка. Нажмите "OK" и внесите элементы 2, 3, 4. В результате будет определен массив 2 V := 3 4 Если набрать [V=], то увидим на экране 2 V = 3 4 Можно обращаться к отдельным элементам массива, используя нижние индексы. Чтобы напечатать нижний индекс, используйте клавишу левой скобки. Например, напечатайте последовательно
V[0=
V[1=
V[2=
В результате на экране появится V0 = 2
V1 = 3
V2 = 4
Можно также определять отдельные элементы массива, например, напечатав W[2,1:6
(на экране W2,1 := 6),
получим матрицу 0 0 W = 0 0 0 6 Этот пример показывает, когда определяются элементы массива, часть из них можно оставлять неопределенными. Mathcad заполняет эти элементы нулями.
16
Другой пример задания массива. Введем i:0;4 (на экране изобразится i := 0 .. 4) j:0;5 (на экране изобразится j := 0 .. 5) h[i,j:1/(i+j+1)
(на экране изобразится h i,j :=
1 ). i+j+1
Матрица h создана. По умолчанию массивы Mathcad нумеруются с нулевого элемента. Чтобы изменить этот порядок, замените значение встроенной переменной ORIGIN. Когда используются нижние индексы, Mathcad учитывает, что массивы нумеруются, начиная с принятого значения ORIGIN. Предположим, что нужно, например, чтобы все массивы начинались с первого элемента. Заменить значение ORIGIN во всем документе можно двумя способами: выбрав команду Параметры из меню Математика и заменив во вкладке Переменные значение ORIGIN на 1; введя глобальное определение для ORIGIN в любом месте рабочего документа. Например, чтобы установить значение ORIGIN, равное 1, введите [ORIGIN~1]. На экране появится запись ORIGIN≡1. Если изменить ORIGIN на 1, Mathcad больше не будет воспринимать нулевой элемент для векторов или нулевые строки и столбцы для матриц. Например, при попытке обращения к V0 Mathcad теперь сообщает об ошибке: "значение индекса слишком велико (или мало) для данного массива". Можно установить ORIGIN положительным и отрицательным числом. После вычислений в Mathcad возникающие в результате массивы могут оказаться при отображении громоздкими. Поэтому Mathcad отображает массивы, имеющие более чем 16 строк или столбцов, в виде таблиц с полосами прокрутки. Для изменения размеров таблицы используется обычный способ изменения размеров, описанный для графиков и текстовых областей. 2.2. Векторные и матричные операторы и функции Некоторые из операторов Mathcad имеют особые значения в применении к векторам и матрицам. Например, символ умножения [*] означает просто умножение, когда применяется просто к двум числам, но он же означает скалярное произведение, когда применяется к векторам, и 17
Определим матрицу M и векторы v и w:
0 1 2 3 + 10 M := 3 0 2 v := 1 − 4 5 3 1 5⋅ 10 Сумма:
13 v = −3 50
∑ v = 60
M
3
v ⋅ w = 5.356 × 10
0 v× w= 0 0
T
w = ( 26 −6 100 )
Обращение матрицы:
−1
M = 25
Определитель:
Скалярное и векторное умножение:
Транспонирование:
26 w := 2⋅ v w = −6 100
Проверка обращения:
−0.24 0.2 0.08 = 0.28 −0.4 0.24 0.36 0.2 −0.12
Решение системы уравнений Mx = v:
0.28 x = 16.84 −1.92
M⋅ M
−1
1 0 0 = 0 1 0 0 0 1
−1
x := M ⋅ v
13 M ⋅ x = −3 50
Рис. 4. Векторные и матричные операции
умножение матриц, когда применяется к матрицам. Рис. 4 показывает использование некоторых векторных и матричных операций. В следующей таблице и далее при описании матричных функций приняты обозначения: А, В – массивы (векторы и матрицы); u, v – векторы; М – квадратная матрица; z - скаляр; m, n, i, j - целые числа. 18
Таблица 1 Функции с векторами и матрицами Операция
Обозначение Клавиши
Умножение матрицы на скаляр Скалярное произведение
A·z
*
u·v
*
Матричное умножение
A·В
*
Умножение матрицы на вектор
A·v
*
A z A+B
/ +
А+z А–В
+ –
А–z
–
–А Mn
– ^
Длина вектора
|v|
|
Детерминант
|M|
|
Деление Сложение векторов и матриц Скалярная сумма Векторное и матричное вычитание
Скалярное вычитание Изменение знака Степени матрицы, обращение матриц
Описание
Умножает каждый элемент А на скаляр z Возвращает скаляр ∑ ui vi . Векторы должны иметь одинаковое число элементов Возвращает произведение матрицы А и В, число столбцов в А должно соответствовать числу строк в В Возвращает произведение матрицы А на вектор v, число столбцов в А должно соответствовать числу элементов в v Делит каждый элемент массива А на скаляр z Складывает соответствующие элементы А и В Добавляет z к каждому элементу А Вычитает соответствующие элементы массива А из элементов массива В, массивы А и В должны иметь одинаковые размеры Вычитает z из каждого элемента А Умножает все элементы А на –1 n-я степень квадратной матрицы M (использует умножение матриц). M–1 представляет матрицу, обратную к M, другие отрицательные степени – степени обратной матрицы. Возвращает матрицу Возвращает v ⋅ v , где v – вектор, комплексно сопряженный к v Возвращает детерминант квадратной матрицы М, результат – скаляр
19
Окончание табл.1 Операция
Транспонирование
Обозначение Клавиши
AT
Векторное произведение
uv
Комплексное сопряжение Суммирование элементов Векторизация
A
∑v
Верхний индекс
A
Нижний индекс (вектора) Нижние индексы матрицы
vn
A
Am, n
Описание
Ctrl+1 Возвращает матрицу, чьи строки – столбцы А, и чьи столбцы – строки А. А может быть вектором или матрицей Ctrl+8 Возвращает векторное произведение для векторов с тремя элемент ам и u и v " Меняет знак мнимой части каждого элемента А Ctrl+4 Суммирует элементы вектора v. Возвращает скаляр Ctrl+- Предписывает в выражении с А производить операции поэлементно Ctrl+6 Извлекает n-й столбец массива А. Возвращает вектор [ n-й элемент вектора ]
Элемент матрицы, находящийся в m-м ряду и n-й строке
Mathcad содержит встроенные функции для действий с массивами. Следует иметь в виду, что функции, которые ожидают в качестве аргумента вектор, всегда ожидают вектор-столбец, а не вектор-строку. Чтобы заменить вектор-строку на вектор-столбец, используйте оператор транспонирования [Ctrl+1]. Имена основных векторных функций и их описание приведены в табл. 2.
20
Таблица 2 Векторные функции Имя функции
Возвращается
rows(A)
Число строк в массиве А. Если А – скаляр, возвращается 0 cols(A) Число столбцов в массиве А. Если А – скаляр, возвращается 0 length(v) Число элементов в векторе v last(v) Индекс последнего элемента в векторе v max(A) Самый большой элемент в массиве А. Если А имеет комплексные элементы, возвращает наибольшую вещественную часть плюс мнимая единица, умноженная на наибольшую мнимую часть min(A) Самый маленький элемент в массиве А. Если А имеет комплексные элементы, возвращает наименьшую вещественную часть плюс мнимая единица, умноженная на наименьшую мнимую часть identity(n) Единичная матрица n n (матрица, все диагональные элементы которой равны 1, а все остальные элементы равны 0) Re(A) Массив, состоящий из элементов, которые являются вещественными частями элементов А Im(A) Массив, состоящий из элементов, которые являются мнимыми частями элементов А tr(M) Сумма диагональных элементов, называемая следом М rank(A) Ранг вещественный матрицы А norm1(M), norm2(M) L1, L2, евклидова и равномерная нормы матрицы М norme(M), normi(M) cond1(M), cond2(M) Числа обусловленности матрицы М, основанные conde(M), condi(M) на L1, L2, евклидовой и равномерной нормах eigenvals(M) Вектор, содержащий собственные значения матрицы М eigenvec(M, z) Матрица, содержащая нормированный собственный вектор, соответствующий собственному значению z квадратной матрицы М
21
Окончание табл. 2 Имя функции
eigenvec(M)
cholesky(M)
qr(A)
eu(M)
Возвращается
Матрица, содержащая нормированные собственные векторы, соответствующие собственным значениям квадратной матрицы М. n-й столбец возвращенной матрицы – собственный вектор, соответствующий n-у собственному значению, возвращенному eigenvals Нижняя треугольная матрица L такая, что LLT = M. Матрица М должна быть симметричной и положительно определенной. Симметрия означает, что М = МТ, положительная определенность – что xТМx > 0 для любого вектора x ≠ 0 Матрица, чьи первые n столбцов содержат ортогональную матрицу Q, а последующие столбцы содержат верхнюю треугольную матрицу R. Матрицы Q и R удовлетворяют равенству А = QR. Матрица А должна быть вещественной Матрица, которая содержит три квадратные матрицы P, L и U, расположенные последовательно в указанном порядке и имеющие с М одинаковый размер. L и U являются соответственно нижней и верхней треугольными матрицами. Эти матрицы удовлетворяют равенству PM = LU
Примеры использования встроенных функций иллюстрируются рис. 5 и 6.
22
Матрица A:
0 1 A := 5 3 6 −2
cols ( A ) = 2
rows ( A ) = 3
Наибольшее и наименьшее значения элементов A: min( A ) = −2
max( A ) = 6
Вектор V:
13 V := 3 50
Число элементов в V: length ( V) = 3 Индекс последнего элемента V: last ( V) = 2
5 + 2i B := 5.54 − 3i 3 + ( 4 + 0.8) ⋅ i
Мнимая часть матрицы B:
2 Im( B) = −3 4.8
Рис. 5. Векторные и матричные функции
23
1 −7 6 A := 3 0 10 2 5 −1
C := eigenvals ( A )
3.805 + 1.194i C = 3.805 − 1.194i −7.609
Собственный вектор, соответствующий первому из собственных чисел
V := eigenvec (A , C0)
0.141 + 0.627i V = 0.117 − 0.63i 0.077 − 0.414i
V =1
Проверка:
−0.213 + 2.553i A ⋅ V = 1.197 − 2.256i 0.788 − 1.481i
−0.213 + 2.553i C0⋅ V = 1.197 − 2.256i 0.788 − 1.481i
Рис. 6. Собственные значения и вектора вещественных матриц
В Mathcad есть две функции объединения матриц. Функция augment (A, B) возвращает массив, сформированный расположением массивов А и В бок о бок. Массивы А и В должны иметь одинаковое число строк. Функция stack (A, B) возвращает массив, сформированный расположением В под А. Массивы А и В должны иметь одинаковое число столбцов. Функция submatrix (A, ir, jr, ic, jc) возвращает субматрицу, состоящую из всех элементов, содержащихся в строках с ir по jc и в столбцах с ic по jc. Чтобы поддержать порядок строк и (или) столбцов, удостоверьтесь, что ir ≤ jr и ic ≤ jc, иначе порядок строк и (или) столбцов будет обращен. Примеры использования этих функций приведены на рис. 7. 24
ORIGIN ≡ 0
Объединение матриц
1 1 6 4 9 2 3 4 4 1 A1 := −5 −8 −3 3 7 A2 := 5 8 5 3 9 −2 −4 −6 3 2 A= B :=
1
1
6 4 9
−5 −8 −3 3 7 −2 −4 −6 3 2 2
3
4 4 1
5
8
5 3 9
−3 −8 −5 −6 −4 −2
submatrix( A , 1 , 2 , 2 , 0) =
−5 −8 −3 −2 −4 −6
submatrix( A , 1 , 2 , 0 , 2) =
−6 −4 −2 −3 −8 −5
submatrix( A , 2 , 1 , 2 , 0) =
−1
−2 5.1 1 0 .8 6 1
2
2.3 4
4
0.312 0.279 −0.411 0.717 0.553 0.117 C= −0.623 0.776 −0.072 0 0.117 0.901 Q := submatrix( C, 0 , 3 , 0 , 3)
T Q⋅ Q =
A := stack ( A1 , A2)
0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0
C := qr( B)
−0.81 3.208 0.312 1.933
6.823 3.415
0.407
0
0.064
0
0
−0.417
0
0
6.213
0
R := submatrix( C , 0 , 3 , 4 , 6)
Q⋅ R =
2.3 4 4 −2 5.1 1 0 0.8 6 1
2
−1
Рис. 7. Примеры формирования новых матриц
25
2.3. Дискретные аргументы Дискретный аргумент – переменная, которая принимает ряд значений при каждом ее использовании. Дискретные аргументы значительно расширяют возможности Mathcad, позволяя выполнять многократные вычисления или циклы с повторяющимися вычислениями. Если набрать на клавиатуре k:1,1.1;2 на экране появится определение дискретного аргумента k:= 1,1.1..2 В этом определении: переменная k – имя дискретного аргумента. Это должно быть простое имя. Никакие нижние индексы или функциональные определения не допустимы; число 1 – первое значение, принимаемое аргументом k; число 1.1 – второе значение k. Обратите внимание, что это не размер шага. Размер шага в этом примере 0.1, разница между 1.1 и 1. Размер шага может быть как положительным числом, так и отрицательным. Если опустить запятую и 1.1, Mathcad примет размер шага равным 1 в подходящем направлении; число 2 – последнее число в диапазоне. Если третье число в определении диапазона не равно целому числу приращений начального значения, аргумент все равно не выйдет за его пределы. Можно использовать произвольные скалярные выражения вместо 1, 1.1 и 2. Однако эти значения должны быть вещественными числами. Рис. 8 показывает результаты различных определений дискретного аргумента. Для набора букв греческого алфавита используйте палитру символов αβ. Последний пример на рис. 8 сравните с аналогичным примером, приведенным на рис. 3.
26
j1 := 0, 0.5.. 8
j2 := 10.. 0
N := 20
i := 0.. N ri := cos (υ i) + 1
i
j3 := 0 .. 10
j4 := 0 , 2 .. 10
υ i := 2⋅ π⋅
j5 := 10.. 15
j6 := 0 , 5 .. 18
xi := ri⋅ cos (υ i)
j1 = j2 = j3 = j4 = j5 = j6 =
υi =
N
ri =
yi := ri⋅ sin (υ i) xi =
yi =
0
10
0
0
10
0
0
2
2
0
0.5
9
1
2
11
5
0.314
1.951
1.856
0.603
1
8
2
4
12
10
0.628
1.809
1.464
1.063
1.5
7
3
6
13
15
0.942
1.588
0.933
1.285
2
6
4
8
14
1.257
1.309
0.405
1.245
2.5
5
5
10
15
1.571
1
0
1
3
4
6
1.885
0.691
–0.214
0.657
3.5
3
7
2.199
0.412
–0.242
0.333
4
2
8
2.513
0.191
–0.155
0.112
4.5
1
9
2.827
0.049
–0.047
0.015
5
0
10
3.142
0
0
0
3.456
0.049
–0.047
–0.015
5.5 6
3.77
0.191
–0.155
–0.112
6.5
4.084
0.412
–0.242
–0.333
7
4.398
0.691
–0.214
–0.657
7.5
4.712
1
0
–1
2
yi
0
2
1
0
1
2
xi
Рис. 8. Некоторые допустимые определения дискретного аргумента
27
В инженерной практике дискретные аргументы часто используют, чтобы выполнить многократные вычисления нескольких переменных одновременно. Рассмотрим модель эпизоотии с четырьмя переменными: i – число инфицированных животных; v - число восприимчивых; d – число умерших; r – число выздоровевших и приобретших иммунитет. Четыре уравнения, которые связывают эти переменные в каждый момент: t := 0 .. 20
Начальные значения
50 v0 := 22000 d0 0 r0 0
i0
t =
it =
i t+ 1 v t+ 1 d t+ 1 r t+ 1
vt =
⋅ t⋅ i t 0.0001v := v t − 0.0001⋅ v t⋅ it d t + 0.55⋅ it r t + 0.45⋅ it
dt =
rt =
50
4
2.2·10
0
0
1
110
2.189·104
27.5
22.5
2
240.79
2.165·104
88
72
3
521.291
2.113·104
220.435
180.356
4
1.101·10 3
2.003·104
507.145
414.937
5
2.206·10 3
1.782·104
1.113·10 3
910.558
6
3.931·10 3
1.389·104
2.326·103
1.903·103
7
5.46·10 3
8.43·103
4.488·10 3
3.672·103
8
4.603·10 3
3.828·103
7.491·103
6.129·103
9
1.762·10 3
2.066·103
1.002·104
8.2·10 3
10
363.936
1.702·103
1.099·104
8.993·10 3
11
61.936
1.64·103
1.119·104
9.157·10 3
12
10.157
1.63·103
1.123·104
9.185·103
13
1.655
1.628·103
1.123·10 4
9.189·10 3
14
0.27
1.628·103
1.123·104
9.19·10 3
0.044
1.628·103
1.123·10 4
9.19·10 3
0
15
Рис. 9. Вычисления в модели распространения инфекции
28
it+1 = 0,0001vt it , vt+1 = vt – 0,0001vt it , dt+1 = dt + 0,55it , rt+1 = rt + 0,45it . Если задать цикл изменения дискретного аргумента t, то Mathcad будет выполнять цикл для каждого уравнения перед переходом к следующему уравнению. Для того чтобы значения переменных для следующего значения t вычислялись одновременно, необходимо создать единую формулу. Это возможно с использованием векторных обозначений. Решение задачи для конкретных начальных условий приведено на рис. 9. Возможно также выполнить рекурсивные вычисления, начинающиеся с вектора и возвращающие каждый раз новый вектор. При этом удобно использовать оператор верхнего индекса Mathcad. Рассмотрим это на примере численного интегрирования системы дифференциальных уравнений вида
dX(t ) = AX(t ) dt с известным начальным вектором Х(0). Перейдем к конечным разностям, полагая
dX(t ) ≈ ∆X(t ) = X(tk ) − X(tk −1) ,
dt ≈ ∆t , и перепишем исходную систему уравнений в виде рекурентного соотношения X(tk ) = X(tk −1) + AX(tk −1)∆t . Перепишем последнее соотношение с использованием верхнего индекса Mathcad
X := X + A ⋅ X ⋅ ∆t. Здесь верхний индекс обозначает номер столбца матрицы Х. На рис. 10 приведена программа численного интегрирования системы уравнений 3-го порядка. 29
0.5 0 0.2 A := 0.25 0.9 0.1 0.25 0.1 0.7 k := 1 .. 8
∆t := 1
Конечные значения
Начальные значения
X
〈 k〉
X
〈8〉
:= X
〈 k− 1〉
X
+ A⋅ X
〈0〉
1 := 2 1.5
〈 k− 1〉
⋅ ∆t
159.565 = 630.464 361.971
1 1.8 3.3 6.144 11.585 22.073 42.41 82.038 159.565 X = 2 4.2 8.73 18.009 36.938 75.426 153.478 311.421 630.464 1.5 3 5.97 11.847 23.477 46.501 92.112 182.541 361.971 Рис. 10. Рекурсивные вычисления с использованием верхнего индекса Mathcad
Для ввода верхнего индекса нажмите [Ctrl+6]. Появится поле между угловыми скобками < >, которое заполняется дискретным аргументом k или k – 1. Результаты расчетов хранятся в матрице Х. Каждый столбец этой матрицы представляет собой значение вектора Х для разных моментов времени от начального момента t = 0 до конечного момента t = 8∆t.
30
3. ОПЕРАТОРЫ Существует два способа ввода операторов. Простейший из них заключается в использовании специальных палитр. Чтобы открыть палитры операторов, используются кнопки на полосе инструментов, расположенной ниже меню. Каждая кнопка открывает палитру операторов, сгруппированных по общему назначению. При задержке указателя мыши над кнопкой появляется надпись, указывающая назначение этой кнопки. Чтобы вставить оператор из палитры, укажите мышью, где нужно поместить оператор, затем нажмите на кнопку необходимого оператора на палитре. Вообще говоря, палитры операторов работают в математических областях. Чтобы использовать палитру операторов в текстовой области, необходимо щелкнуть мышью в тексте и выбрать команду Математическая Область из меню Вставка. Так будет создана математическая область в тексте, в которую можно вставлять операторы, используя палитры. Другой способ ввода операторов связан с использованием комбинаций клавиш. Этот способ быстрее, но требует запоминать соответствующие комбинации. Векторные и матричные операторы были рассмотрены раньше. Ниже приводится таблица основных операторов для переменных любого типа. Здесь Х и Y обозначают любую переменную; f – функцию; m и n – целые числа; i – дискретный аргумент; z и w обозначают вещественные или комплексные числа. Таблица 3 Основные операторы Операция
Круглые скобки Факториал
Обозначение
Клавиши
(Х)
'
n!
!
Описание
Группирование операторов Возвращает значение, равное 1·2·…·(n – 1)·n, n – неотрицательное целое число
31
Продолжение табл. 3 Операция
Комплексное сопряжение Степень Изменение знака Квадратный корень
Корень n-й степени
Обозначение
Суммирование
X
Меняет знак мнимой части
zw
^
Возводит z в степень w
–X
–
Умножает Х на –1
\
Возвращает положительный квадратный корень для положительного z; главное значение для невещественных z Возвращает корень n-й степени z; возвращает вещественный корень, когда возможно
z
n
z
|
X z
/
X·Y
n
∑X n
∏X
i=m
32
Ctrl+\
|z|
i=m
Произведение
Описание
"
Абсолютное значение Деление
Умножение
Клавиши
Возвращает
Re ( z ) + Im ( z ) 2
2
Делит выражение Х на скаляр z. Если X – массив, делит каждый элемент на z * Возвращает произведение Х и Y, если Х и Y – скаляры. Умножает каждый элемент Y на Х, если Y – массив, а Х – скаляр. Возвращает скалярное произведение, если Х и Y – векторы одного размера. Выполняет умножение матриц, если Х и Y – матрицы соответствующих размеров Ctrl+Shift+4 Выполняет суммирование Х по i = m, m + 1, ..., n. X может быть любым выражением, m и n должны быть целыми числами Ctrl+Shift+3 Выполняет перемножение Х по i = m, m + 1, ..., n. X может быть любым выражением, m и n должны быть целыми числами
Окончание табл. 3 Операция
Обозначение
Клавиши
Описание
Суммирование по дискретному аргументу Перемножение по дискретному аргументу
∑X
$
∏X
#
Возвращает суммирование Х по дискретному аргументу i. X может быть любым выражением Возвращает произведение Х по дискретному аргументу i. X может быть любым выражением
20
∑ n
i
i
20
n = 210
=0
i := 0 .. 20
20
∏ (n + 1) = 5.109× 10 ∑ ∑
n= 0
n
∑
xi := sin (0.1⋅ i⋅ π)
y j :=
∑i
j
i
=0
m
20
n
j := 1 .. 10
10
19
n
m
13
= 2.554 × 10
=0 20
∑
xn = 0
=0
n
xn⋅ n = −63.138
=0
∑ ∑ i = 2.554× 10 j
y 1 = 210
i
j
∑ ∑
m
13
y 10 = 2.416 × 10
13
Переменный верхний предел суммирования i := 0 .. 10
f ( x) :=
n
∑ i ⋅(i ≤ x) 2
g ( n ) :=
i
f ( 0) = 0 f ( 30) = 55
g ( 7) = 84
j
=1
j
m
=1
f ( 2) = 5 3
g ( 20) = 1.54 × 10
Рис. 11. Суммы и произведения
На рис. 11 приведены примеры вычисления различных сумм и произведений. 33
d 3 x = 12 dx
x := 2
y := 10
t := 0
Численное значение производной
g ( t) := 5⋅ t
4
Точный результат
d 5 x = 79.9999999999999 dx
g ( x) = 80
d 5 x ⋅ y = 799.999999999999 dx
g ( x) ⋅ y = 800
d 5 x ⋅ y = 32 dy
x = 32
5
Поскольку выражение не зависит от t, его производная по t равна нулю:
d 5 x ⋅y = 0 dt
Вычисление производной в последовательности точек:
f ( t ) := g
d g ( t) dt
= 2 i
i := −2 .. 3 f
= 2 i
5
–20
0.313
–2.5
0
0
0.313
2.5
5
20
25.313
67.5
f ( −2) = −160 f ( 2) = 160 f ( 3) = 540 f ( 2 + i) = 40 + 220i
Рис. 12. Дифференцирование с помощью Mathcad
34
Для вычисления производных в Mathcad необходимо выполнить следующее: сначала определите точку, в которой необходимо найти производную. Например, чтобы найти производную x3 по x в точке x = 2, наберите [x:2]; щелкните ниже или справа от определения x. Затем наберите [?]. Появляется оператор производной с двумя пустыми полями; щелкните на поле в знаменателе и наберите [x]. Это имя переменной, по которой проводится дифференцирование; щелкните на поле справа от d/dx и наберите [x^3]. Это выражение, которое нужно продифференцировать; нажмите знак [=], чтобы увидеть результат. На рис. 12 приведены примеры использования операций дифференцирования. Выражение, которое нужно продифференцировать, может быть вещественным или комплексным. Переменная дифференцирования должна быть простой неиндексированной переменной. От алгоритма вычисления производной, который используется в Mathcad, можно ожидать, что первая производная будет вычислена с точностью 7 или 8 значащих цифр, если точка, в которой ищется производная, удалена от особенностей функции. Точность этого алгоритма уменьшается на одну значащую цифру при каждом увеличении порядка производной. Необходимо помнить, что результат дифференцирования есть не функция, а число – значение производной в указанной точке переменной дифференцирования. В предыдущем примере производная от x3 не есть выражение 3x2, а значение 3x2, вычисленное в точке x = 2. Информацию о символьных вычислениях производных см. в разделе "Символьные вычисления". Использование оператора интегрирования в Mathcad очень похоже на использование оператора дифференцирования. Для вызова оператора интегрирования можно набрать знак [&] или использовать соответствующую палитру. Далее заполняются все свободные поля. Для приближенного вычисления определенного интеграла Mathcad использует численный алгоритм интегрирования Ромберга. Пределы интегрирования должны быть вещественными числами. Выражение, которое нужно интегрировать, может быть, однако, вещественным или комплексным. Кроме переменной интегрирования, все переменные в подынтегральном выражении должны быть определены ранее в другом месте рабоче35
π
⌠4 2 sin ( x) dx = 0.143 ⌡
2
i := 0 .. 5
f ( x) := x + 3⋅ x + 2
0
i
⌠ g := f ( x) dx i ⌡ 0
⌠ f := i ⌡
0
g =
f ( x) dx
f =
i
−i
i
0
0
3.833
0.833
12.667
0.667
28.5
1.5
53.333
5.333
89.167
14.167
Влияние значения встроенной переменной TOL на вычисление интеграла: 5
Точность по умолчанию
−3
TOL = 1 × 10
⌠e 1 dt = 5.00000000006814 t ⌡ 1
5
−6
TOL := 10
Высокая точность
⌠e 1 dt = 5.00000000000001 t ⌡ 1
5
−1
TOL := 10
Низкая точность
⌠e 1 dt = 5.00000005437786 t ⌡ 1
Криволинейный интеграл в комплексной плоскости x( t ) := 2⋅ cos ( t )
y ( t ) := 2⋅ sin ( t )
z( t ) := x( t ) + i⋅ y ( t )
π
⌠ f ( z( t ) ) ⋅ d z( t) dt = 3.142i dt ⌡ 0
Рис. 13. Вычисление интегралов
36
f ( z) :=
1 z
го документа. Переменная интегрирования должна быть простой переменной без индекса. Если переменная интегрирования является размерной величиной, верхний и нижний пределы интегрирования должны иметь ту же самую размерность. Подобно всем численным методам, точность алгоритма интегрирования в Mathcad зависит от особенностей подынтегрального выражения. Если выражение, которое нужно интегрировать, имеет разрывы или быстро осциллирует, численное решение, найденное Mathcad, может быть неточно. Поскольку метод интегрирования Mathcad делит интервал на четыре подынтервала, а затем удваивает число точек разбиения, это может привести к неправильным результатам для периодических функций с периодом 1/2n от длины интервала. Чтобы обойти эту проблему, делите интервал на два подынтервала, не кратных периоду функции и интегрируйте по каждому подынтервалу отдельно. Для вычисления точного значения интеграла могут быть использованы возможности символьных вычислений Mathcad. На рис. 13 приведены примеры использования оператора интегрирования.
37
4. ВСТРОЕННЫЕ ФУНКЦИИ В этом разделе описаны основные функции Mathcad и даны примеры по их использованию. Функции, используемые для работы с векторами и матрицами, описаны выше. Чтобы просмотреть список всех встроенных функций, доступных в вашей версии Mathcad, и их описание, выберите команду Функция из меню Вставка. Для вставки функции в рабочий документ дважды щелкните на имени функции, которую необходимо вставить. Имя функции можно набирать на клавиатуре. При этом нужно помнить, что они чувствительны к регистру и должны набираться с использованием прописных или строчных букв так, как это показано в приводимых таблицах. Следует отметить, что существуют Пакеты Функций Mathcad, приспособленные к специфической области применения. Описания этих функций содержатся в самом Пакете Функций. Другим источником дополнительных функций являются Электронные Книги. Функции и описания к ним можно непосредственно копировать в рабочий документ. И, наконец, можно создавать собственные встроенные функции [1]. Для этого нужно иметь 32-разрядный компилятор языка С. 4.1. Тригонометрические функции Тригонометрические функции Mathcad и обратные им определены для любого комплексного аргумента. Они также возвращают комплексные значения везде, где необходимо. Результаты для комплексных значений вычисляются с использованием тождеств:
38
sin z =
eiz − e −iz ; 2i
cos z =
eiz + e −iz ; 2
eiz = cos z + i sin z . Все эти тригонометрические функции используют аргумент, выраженный в радианах. Чтобы перейти к градусам, используется встроенная единица deg. Например, чтобы вычислить sin45°, введите [sin(45*deg)=]. Обратные тригонометрические функции asin(z), acos(z), atan(z) возвращают угол в радианах между 0 и 2π. Можно отобразить результат в градусах или в единицах π. Это делается следующим образом. Набрать с помощью клавиатуры [asin(0.5)=], на экране получим asin (0.5) = 0.524 Щелкнем левой кнопкой мыши в конце этого выражения и введем в появившееся окно ввода "deg", получим asin (0.5) = 30 deg Теперь вместо deg введем из палитры греческих букв π, получим asin(0.5) = 0.167π 4.2. Логарифмические и показательные функции Логарифмические и показательные функции в Mathcad могут использовать комплексный аргумент и возвращать комплексные значения. Значения экспоненциальной функции для комплексного аргумента вычисляются с применением формулы e x +iy = e x (cos y + i sin y ) .
В общем случае значения натурального логарифма определяются формулой ln( x + iy ) = ln x + iy + i arg( y x ) + 2nπi .
В Mathcad функция возвращает основное значение логарифма, соответствующее n = 0, а именно: ln( x + iy ) = ln x + iy + i arg( y x ) = ln x + iy + + i arctg( y x ) + iπ (1 − Φ( x ) ) sign y,
где Ф(х) – единичная функция Хевисайда (см. подразд. 4.7). В Mathcad используются следующие встроенные логарифмические и показательные функции: 39
exp(z) - возвращает e в степени z; ln(z) - возвращает натуральный логарифм z (z ≠ 0); log(z) - возвращает логарифм z по основанию 10 (z ≠ 0). Для вычисления логарифма по основанию n можно ввести функцию logn ( z , n ) : =
ln ( z ) ln ( n )
В этом случае получим logn (1 6 , 2
)=
4
4.3. Специальные функции и функции усечения Функция erf(x) возвращает значение интеграла ошибок x
2 2 erf( x ) = e −t dt , ∫ π0
где x должен быть вещественным. Эйлерова гамма-функция Г(z) для вещественного z совпадает со следующим интегралом: ∞
Γ( z ) = ∫ t z −1e −t dt . 0
Гамма-функция Эйлера удовлетворяет рекуррентному соотношению Γ( z + 1) = zΓ( z ) .
Откуда следует, что для положительных целых z Γ( z + 1) = z !
Для усечения и округления функций могут использоваться следующие встроенные функции: Re(z) – вещественная часть; Im(z) – мнимая часть; arg(z) – аргумент, заключенный между –π и π; floor(x) – наибольшее целое число, не превосходящее x (x вещественное); ceil(x) – наименьшее целое число, превышающее x (x вещественное); 40
mod(x, y) – остаток от деления x на y. Результат имеет тот же самый знак, что и x; angle(x, y) – угол (в радианах) между положительной полуосью x и вектором (x, y) в плоскости XY. Аргументы должны быть вещественны. Возвращает значение между 0 и 2π. ceil( 3.25) = 4
floor( 3.25) = 3
mantissa ( x) := x − floor( x)
mantissa ( 3.45) = 0.45
Традиционное округление: roundoff ( x) := if( mantissa ( x) < 0.5, floor( x) , ceil( x) ) roundoff ( 3.46) = 3
roundoff ( 3.56) = 4
Рис. 14. Создание функций округления
На рис. 14 показано, как из этих функций могут быть сформированы функции округления. 4.4. Дискретное преобразование Фурье В Mathcad входят два типа функций для дискретного прямого и обратного преобразования Фурье: fft/ifft и cfft/icfft. Эти функции дискретны: они берут в качестве аргументов и возвращают векторы и матрицы. Они не могут быть использованы с другими функциями. Используйте функции fft и ifft, если выполнены два следующих условия: аргументы вещественны, и вектор данных имеет 2m элементов. Первое условие необходимо, потому что функции fft/ifft используют тот факт, что для вещественных данных вторая половина преобразования Фурье является комплексно сопряженной с первой. Mathcad отбрасывает вторую половину вектора-результата. Это сохраняет время и память при вычислениях. Пара функций cfft/icfft не использует симметрию в преобразовании. По этой причине необходимо использовать их для комплексных данных.
41
Второе условие требуется, потому что пара функций fft/ifft использует высоко эффективный алгоритм быстрого преобразования Фурье. Для этого вектор аргумента, используемого с fft, должен иметь 2m элементов. В функциях cfft/icfft использован алгоритм, который допускает в качестве аргументов как матрицы, так и векторы произвольного размера. Когда эта пара функций используется с матрицей в качестве аргумента, вычисляется двумерное преобразование Фурье. Следует иметь в виду, что если для прямого преобразования использована функция fft, то для обратного преобразования необходимо использовать функцию ifft. Аналогично используются функции cfft/icfft. 4.5. Преобразование Фурье в вещественной области Для вещественных векторов с 2m элементами предпочтительно использовать функции fft/ifft. Функция fft(v) возвращает дискретное преобразование Фурье, векторный аргумент которой можно интерпретировать как результат измерений через равные промежутки времени некоторого сигнала. Вектор v должен содержать 2m элементов. Результат – комплекснозначный вектор размерности 1 + 2m–1. Если v имеет размерность, отличную от 2m, Mathcad выдает сообщение об ошибке "неверный размер вектора". Элементы вектора, возвращаемого fft, вычисляются по формуле Cj =
1 n
n −1
∑ vk e 2 πi ( j n ) k .
k =0
В этой формуле n – число элементов в v, i – мнимая единица. Элементы в векторе, возвращенном функцией fft, соответствуют различным частотам. Чтобы восстановить фактическую частоту, необходимо знать частоту измерения исходного сигнала. Если v есть n-мерный вектор, переданный функции fft, и частота измерения исходного сигнала – fs, то частота, соответствующая Ck
fk =
k fs. n
Обратите внимание, что это делает невозможным обнаружить частоты выше частоты измерения исходного сигнала. Это ограничение, налагаемое не Mathcad, а самой сутью проблемы. Чтобы правильно восстановить сигнал по его преобразованию Фурье, необходимо произвести 42
i := 0 .. 63 xi := sin π⋅
+ rnd ( 1) − 0.5 10
Формирование сигнала:
i
Применяется комплексное преобразование Фурье: c := fft( x)
N := last ( c)
N = 32
Обращение преобразования Фурье: N2 := last ( z)
N2 = 63
z := ifft( c)
j := 0 .. N
k := 0 .. N2
Графическое представление сигнала zk =
2
0
xi
–2
0
20
40
60
80
i
Фурье-образ 4
cj
2
0
0
10
20
30
xj = –0.499
–0.499
2.34·10 –3
2.34·10–3
0.673
0.673
0.659
0.659
1.274
1.274
0.674
0.674
1.162
1.162
0.613
0.613
0.179
0.179
–0.044
–0.044
0.489
0.489
–0.69
–0.69
–1.079
–1.079
–0.777
–0.777
–0.849
–0.849
–1.334
–1.334
40
j
Рис. 15. Быстрые пр6еобразования Фурье в Mathcad
43
измерения исходного сигнала с частотой, по крайней мере, вдвое большей, чем ширина полосы частот. Подробное обсуждение этой проблемы содержится в специальных курсах. Функция ifft(v) возвращает обратное дискретное преобразование Фурье. Вектор v должен иметь 1 + 2m элементов, где m – целое. Результат есть вектор размерности 2m+1. Аргумент v – вектор, подобный созданному функцией fft. Чтобы вычислить результат, Mathcad сначала создает новый вектор w, комплексно сопряженный v, и присоединяет его к вектору v. Затем Mathcad вычисляет вектор d, элементы которого вычисляются по формуле dj =
1 n
n −1
∑ wk e−2πi( j n)k .
k =0
Это та же самая формула, что и для fft, кроме знака минус в функции экспоненты. Функции fft и ifft – точные обращения. Для всех вещественных v справедливо ifft(fft(v)) = v. Пример использования прямого и обратного преобразований Фурье приведен на рис. 15. 4.6. Альтернативные формы преобразования Фурье Определения преобразования Фурье, рассмотренные выше, не являются единственно возможными. Например, часто используются следующие определения прямого и обратного преобразований Фурье: F ( ν) =
n
n
1 2 πi τ / n ν ∑ f (τ)e−2πi( ν n )τ ; f (τ ) = ∑ F (ν ) e ( ) . n τ=1 v =1
Эти определения реализованы во встроенных функциях FFT/IFFT и ICFFT. Они отличаются от быстрого преобразования Фурье следующим: вместо коэффициента 1 n перед обеими формулами стоит коэффициент 1/n и коэффициент 1 в обратном преобразовании; знак минус появляется в показателе экспоненты прямого преобразования и исчезает в формуле обратного. 4.7. Кусочно-непрерывные функции Кусочно-непрерывные функции полезны для управления ветвлениями и остановками вычислительных процессов. Имеются пять функций 44
Использование условных операторов
2 f ( x) := x − 1
x := −2 , − 1.8 .. 2
g(x) равна f(x), когда f(x) > 0, иначе 0
g ( x) := if( f ( x) > 0 , f ( x) , 0)
4
4 2 f ( x)
g( x)
2
0 2
2
0
0
2
2
0
x
2
x
h ( x) := if( x ≥ 1 , f ( x) , − f ( x) )
иначе –f(x)
5
h( x)
0
Продолжать вычисления до выполнения условия 5
2
0
2
2
quess − a < err
x
N := 100
i := 0 .. N
a := 1000
−2
err := 10
quess 0 := 10
a quess i + quess i 2 quess i+ 1 := until (quess i) − a − err , 2 N2 := last ( quess ) − 1 Число итераций answer := quess N2 answer = 31.623
j := 0 .. N2
N2 = 5
j= 0
quess j = 10
1
55
2
36.591
3
31.96
4
31.625
5
31.623
(quess j)2 = 100 3.025·10 3 1.339·10 3 1.021·10 3 1·10 3 1·10 3
Рис. 16. Условные выражения в Mathcad
45
Mathcad, относящихся к этому классу. Функция if полезна для выбора одного из двух значений, определяемого условием. Ступенчатая функция Хевисайда Ф(х) и символ Кронекера δ(m, n) во многом аналогичны функции if. Функция until используется, чтобы управлять процессом итераций. Функция if(cond, tval, fval) возвращает значение tval, если cond отличен от 0 (истина) и возвращает fval, если cond равен 0 (ложь). Обычно в качестве аргумента cond выбирается булево выражение вида w = z, x > y, x < y, x ≥ y, x ≤ y, w ≠ z. Можно объединять булевы операторы, чтобы записать более сложные условия. Например, условие (x < 1) ⋅ (x > 0) действует подобно логическому "и", возвращающему 1, только если x заключено между 0 и 1. Аналогично выражение (x > 1) + (x < 0) действует подобно логическому "или", возвращающему 1, если x > 1, или x < 0, и 0, если x заключено между 0 и 1. Функция until (x, z) возвращает z, пока выражение x не становится отрицательным; должно содержать дискретный аргумент. Функция until позволяет останавливать вычисления для последовательных значений дискретного аргумента. Функция until полезна в итеративных процессах с определенным условием сходимости. На рис. 16 приведены примеры использования функций if и until. Функция Хевисайда эквивалентна следующей функции: Ф ( x ) := if ( x < 0,0,1)
Символ Кронекера δ(m, n) возвращает 1, если m = n; иначе 0. Оба аргумента должны быть целочисленными. Символ Кронекера эквивалентен функции δ ( m, n ) := if ( m = n,1,0 )
Ступенчатая функция Хевисайда может быть использована для создания импульса шириной w: pulse ( x, w ) := Ф ( x ) − Ф ( x − w )
Можно определить также две полезные функции lowpass и highpass. Они обе являются фильтрами – умножение на них какого-либо сигнала 46
вырезает из этого сигнала кусок вокруг точки x, имеющий ширину 2w. Разница состоит в том, что lowpass оставляет только вырезанный кусок, highpass – все, кроме вырезанного куска. lowpass ( x, w ) := pulse ( x+w, 2 ⋅ w ) highpass ( x, w ) := 1 − pulse ( x+w, 2 ⋅ w )
4.8. Статистические функции Для вычисления статистических оценок случайных совокупностей чисел в Mathcad могут использоваться следующие функции: mean(A) – возвращает среднее значение элементов массива А размерности m × n по формуле mean( A ) =
1 mn
m −1 n −1
∑ ∑ Aij ; i =0 j =0
var(A) – возвращает дисперсию элементов массива А размерности m × n согласно формуле var( A ) =
1 mn
m −1 n −1
∑ ∑ Aij − mean(A)
2
;
i =0 j =0
stdev(A) - возвращает среднеквадратичное отклонение (квадратный корень из дисперсии) элементов m × n массива А
stdev( A) = var(A). 4.9. Плотности распределения вероятности Эти функции показывают отношение вероятности того, что случайная величина попадает в малый диапазон значений с центром в заданной точке, к величине этого диапазона. В Mathcad имеются функции семнадцати плотностей вероятностей. Отметим только некоторые из них: dnorm(x, µ, σ) – возвращает плотность вероятности нормального распределения dnorm( x, µ, σ) =
( x − µ) 2 1 exp − , 2πσ 2σ 2
47
в котором µ и σ есть среднее значение и среднеквадратичное отклонение, σ > 0; dunif(x, a, b) – вычисляет плотность вероятности равномерного распределения 1 , dunif( x, a, b) = b − a 0,
x ∈ [a; b], x ∉ [a b]
в котором a и b являются граничными точками интервала, a < b. 4.10. Функции распределения Эти функции возвращают вероятность того, что случайная величина меньше или равна определенному значению. Функция распределения вероятности – это функция плотности вероятности, проинтегрированная от минус бесконечности до определенного значения. Приведем две из них: pnorm(x, µ, σ) – возвращает функцию нормального распределения со средним µ и среднеквадратическим отклонением σ (σ > 0); punif(x, a, b) – возвращает функцию равномерного распределения. a и b есть граничные значения интервала (a < b). Mathcad имеет ряд функций для генерирования случайных чисел, имеющих разнообразные распределения вероятностей. Приведем две из них: rnorm(m, µ, σ) – возвращает вектор m случайных чисел, имеющих нормальное распределение (σ > 0); runif(m, a, b) – возвращает вектор m случайных чисел, имеющих равномерное распределение, в котором a и b являются граничными точками интервала (a < b). Остальные встроенные статистические функции и их описания можно посмотреть, выбрав команду Функция из меню Вставка. 4.11. Интерполяция и функции предсказания Интерполяция заключается в использовании значений некоторой функции, заданных в ряде точек, чтобы предсказать значения между ними. В Mathcad можно или соединять точки данных прямыми линиями (линейная интерполяция) или соединять их отрезками кубического полинома (кубическая сплайн-интерполяция). 48
В отличие от функций регрессии, обсуждаемых в следующем разделе, функции интерполяции определяют кривую, точно проходящую через заданные точки. Из-за этого результат очень чувствителен к ошибкам данных. Если данные зашумлены, следует рассмотреть возможность использования регрессии вместо интерполяции. Для линейной интерполяции используется функция linterp(vx, vy, x), которая по векторным данным vx и vy возвращает линейно интерполируемое значение y, соответствующее третьему аргументу x. Аргументы vx и vy должны быть векторами одинаковой длины. Вектор vx должен содержать вещественные значения, расположенные в порядке возрастания. Эта функция соединяет точки данных отрезками прямых, создавая, таким образом, ломаную линию. Интерполируемое значение для конкретного x есть ордината y соответствующей точки ломаной. Пример линейной интерполяции показан на рис. 17. Кубическая сплайн-интерполяция позволяет провести кривую через набор точек таким образом, что первые и вторые производные кривой непрерывны в каждой точке. Эта кривая образуется путем создания ряда кубических полиномов, проходящих через наборы из трех смежных точек. Кубические полиномы состыковываются друг с другом, чтобы образовать одну кривую. Чтобы провести кубический сплайн через набор точек: создайте векторы vx и vy, содержащие координаты x и y, через которые нужно провести кубичный сплайн. Элементы vx должны быть расположены в порядке возрастания; вычислите вектор vs:=cspline(vx, vy). Вектор vs содержит вторые производные интерполяционной кривой в рассматриваемых точках. Чтобы найти интерполируемое значение в произвольной точке, скажем х0, вычислите interp(vs, vx, vy, x0), где vs, vx и vy – векторы, описанные ранее. Обратите внимание, что можно сделать то же самое, вычисляя interp(cspline(vx, vy),vx,vy, x0). Пример использования кубической сплайн-интерполяции приведен на рис. 17 внизу.
49
Линейная интерполяция i := 0 .. 5 VXi = 0
VXi:=i VYi = 1.268·10
VYi:=vd(1) linterp( VX, VY, 1.5) = 0.389
–3
1
0.193
2
0.585
3
0.35
4
0.823
5
0.174
linterp( VX, VY, 3.75) = 0.705 linterp( VX, VY, 4.1) = 0.758 x := 0 , 0.1.. 5 1
linterp( VX , VY , x) 0.5
VYi
0
0
2
VXi := i
VYi := rnd ( 1)
interp ( VS, VX, VY, 1.5) = 0.188
6
x , VX i
Кубическая сплайн-интерполяция i := 0 .. 5
4
VS := lspline ( VX, VY)
interp ( VS, VX, VY, 3.75) = 0.868
interp ( VS, VX, VY, 4.1) = 0.989 1
VYi = 0.71 0.304 0.091
interp( VS , VX , VY , x) VYi
0.5
0.147 0.989 0.119
0
0
2 x , VX i
Рис. 17. Примеры интерполяции
50
4
6
Кроме функции cspline, Mathcad имеет еще две кубические сплайнфункции: lspline и pspline. Эти три функции отличаются только граничными условиями: функция lspline генерирует кривую сплайна, которая приближается к прямой линии в граничных точках; функция pspline генерирует кривую сплайна, которая приближается к параболе в граничных точках; функция сspline генерирует кривую сплайна, которая может быть кубическим полиномом в граничных точках. Использование функций lspline и pspline аналогично использованию функции сspline. Для определения кривой наилучшей интерполяции удобно сравнить все три функции. Если необходимо оценить значения функции в точках, находящихся вне области заданных значений функции, то следует использовать алгоритм экстраполяции, реализованный в функции predict(v, m, n), которая возвращает n предсказанных значений, основанных на m последовательных значениях вектора данных v. Элементы v должны представлять собой значения, взятые через равные интервалы. Рекомендуется испольk := 0 .. 99 Существующие данные
data k := exp
Предсказанные значения
p := predict ( data , 6 , 100)
−k
⋅ sin k 10
100
i := 0 , 5 .. 99 1
data k pi
0
1
0
100
200
k , i+ 100
Рис. 18. Использование функции предсказания для экстраполяции данных
51
зовать эту функцию, когда экстраполируемая функция является гладкой и осциллирующей, но не обязательно периодической. Пример использования функции predict приведен на рис. 18. 4.12. Функции регрессии Функции регрессии создают кривую или поверхность, которая минимизирует ошибку между собой и имеющимися данными. В отличие от функций интерполяции, рассмотренных в предыдущем разделе, эти функции не требуют, чтобы аппроксимирующая кривая или поверхность проходили через точки данных. Функции регрессии гораздо менее чувствительны к ошибкам данных, чем функции интерполяции. Конечный результат регрессии – функция, с помощью которой можно оценить значения в промежутках между заданными точками. В Mathcad имеются функции четырех видов регрессии: линейная, полиномиальная, многомерная полиномиальная, обобщенная. При использовании функций линейной регрессии определяется наклон и смещение линии, которая будет приближена к исходным данным с наименьшим среднеквадратическим отклонением. Если поместить значения x в вектор vx и соответствующие значения y в vy, то линия определяется в виде y = slope( vx, vy ) ⋅ x + intercept( vx, vy ). i := 0 .. 40
y i := 10⋅ i + 100⋅ rnd ( 1)
xi := 10⋅ i
Вычисляются коэффициенты линейной регрессии: a := slope ( x, y )
a = 1.079
b := intercept ( x, y )
b = 34.417
600
yi
400
a ⋅xi + b 200
0
0
20
40
Рис. 19. Линейная регрессия
52
Здесь функции slope и intercept возвращают скаляры: наклон и смещение по оси ординат линии регрессии. Рис. 19 показывает, как можно использовать эти функции, чтобы провести линию через экспериментальные точки. Эти функции полезны не только тогда, когда данные по существу должны представлять линейную зависимость, но и когда они представляют экспоненциальную зависимость. Например, если x и y связаны соотношением вида y = A e kx ,
можно применить эти функции к логарифму данных и использовать факт, что ln y = ln A + kx.
В этом случае A = exp (intercept( vx, vy ) ) , k = slope( vx, vy ).
Полиномиальная регрессия используется в том случае, когда между y и x, полученными экспериментально, ожидается полиномиальная зависимость. При этом используются функции regress(vx, vy, n) или loess(vx, vy, span). Здесь n – порядок полинома, который должен приближать данные из vx и vy. Аргумент span (span > 0) определяет, насколько большие окрестности функция loess будет использовать при выполнении локального приближения. Функции regress и loess возвращают векторы (обозначим vs), которые используются функцией interp(vs, vx, vy, x), которая для заданного значения х возвращает интерполируемое значение y. Пример использования функции loess при двух значениях аргумента span приведен на рис. 20. Обобщенная регрессия используется в том случае, когда нужно искать приближение экспериментальной зависимости в виде комбинации произвольных функций, не являющейся полиномом. Если предполагается, что данные могли бы быть смоделированы в виде линейной комбинации произвольных функций
y = a0 f 0 ( x) + a1 f1( x) + ... + an f n ( x), следует использовать функцию linfit, чтобы вычислить ai. 53
Создание данных: vxi := i
i := 0 .. 49
vzi := 0.5⋅ ( rnd ( 1) − 0.5) + atan ( i)
Span1 := 0.2
Случай 1:
Случай 2:
Span2 := 2
vs1 := loess ( vx, vz , Span1 )
vs2 := loess ( vx, vz , Span2 )
f1( x) := interp ( vs1 , vx, vz , x)
f2( x) := interp ( vs2 , vx, vz , x)
Отображение данных:
2
1.5 f1(vxi )
1
f2(vxi ) vzi
0.5
0
0.5
0
10
20
30
40
50
i
Рис. 20. Полиномиальная регрессия
На рис. 21 показан пример, в котором линейная комбинация трех функций – x, х2 и sin5x используется для аппроксимации некоторых данных.
54
vt :=
vy :=
0.2 0.4 0.6 0.8 1 0
−0.066 1.969 2.611 1.604 0.623 1.321
t 2 F( t ) := t sin ( 5t)
0.466 S = 2.893 2.124
S := linfit( vt , vy , F)
g ( t ) := F( t) ⋅ S
j := 0 .. 5
t := 0 , 0.01.. 1
3
2 vy j g( t)
1
0
1
0
0.2
0.4
0.6
0.8
1
vt j , t
Рис. 21. Обобщенная регрессия
55
5. РЕШЕНИЕ УРАВНЕНИЙ Mathcad позволяет решать уравнения и системы уравнений. Максимальное число уравнений и неизвестных в системе равно пятидесяти. 5.1. Численное решение уравнения с одним неизвестным Для решения одного уравнения с одним неизвестным используется функция root( f (z), z), которая возвращает значение z, при котором выражения или функция f (z) обращается в 0. Оба аргумента этой функции должны быть скалярами. Функция возвращает скаляр. Рассмотрим пример, как найти а – решение уравнения ex = x3. Предварительно нужно присвоить числовое значение второму аргументу функции root. Это значение становится первым приближением к искомому корню. Функция root использует для поиска корня метод секущей. Когда значение выражения f (z) при очередном приближении становится меньше значения встроенной переменной TOL, корень считается найденным, и функция root возвращает результат. Для рассматриваемого примера запишем первое приближение x := 3 Определим выражение, которое должно быть обращено в ноль. Для этого перепишем уравнение х3 = eх в виде х3 – ех = 0. Определим переменную а как корень уравнения a := root(x3 – ex, x) Наберите [а=], чтобы увидеть на экране результат а = 1.857 При использовании функции root имейте в виду следующее: удостоверьтесь, что переменной присвоено начальное значение до начала использования функции root; для выражения с несколькими корнями, например х2 – 1 = 0, начальное значение определяет корень, который будет найден Mathcad. В этом 56
3
x − 10⋅ x + 2 = 0
Дано уравнение:
x := −5, −4.95.. 5
100
3
x − 10 ⋅x+ 2
0
100
5
2.5
0
2.5
5
x
Для нахождения трех различных корней используем три начальных приближения x := −2
(3
)
(3
)
(3
)
root x − 10⋅ x + 2 , x = −3.258
x := 0
root x − 10⋅ x + 2 , x = 0.201
x := 3
root x − 10⋅ x + 2 , x = 3.057
Дано уравнение
2 x + 1 = 0 , которое имеет
два мнимых корня x1 = i, x 2= –i. Вычислим эти корни с помощью Mathcad с разной точностью −3
(2
)
(2
)
(2
)
(2
)
−5
x := 1 + 2i
root x + 1, x = −1.471 × 10
−6
x := 1 + 2i
root x + 1, x = −2.81 × 10
−7
x := 1 + 2i
root x + 1, x = i
−7
x := 1 − 2i
root x + 1, x = −i
TOL = 1 × 10 TOL := 10
TOL := 10 TOL := 10
−8
+i
+i
Рис. 22. Вычисление корней уравнений
57
случае рекомендуется построить график функции и определить подходящие начальные приближения для отыскания каждого корня. В некоторых случаях удобно несколько раз изменить масштаб графика. Если два корня расположены близко друг от друга, можно уменьшить значение TOL, чтобы различить их; если f (x) имеет малый наклон около корня, функция root( f(x), x) может сходиться к значению r, отстоящему от корня достаточно далеко. В таких случаях для нахождения более точного значения корня необходимо уменьшить значение TOL. Другой вариант заключается в замене уравнения f (x) = 0 на g(x) = 0, где
g ( x) =
f ( x) d f ( x) dx
;
для выражения f (x) с известным корнем а нахождение дополнительных корней f (х) эквивалентно поиску корней уравнения h(х) = 0, где h(х) = f (х)/(х – а). Часто бывает проще искать корень выражения h(х), определенного выше, чем пробовать искать другой корень уравнения f (х) = 0, выбирая разные начальные приближения. Пример поиска нескольких корней с помощью функции root и использования графика функции приведен на рис. 22. Функция root позволяет находить и комплексные корни. Для поиска комплексного корня следует использовать комплексное число в виде начального приближения. Что делать, когда функция root не сходится? Если после многих итераций Mathcad не может найти подходящего приближения, то появляется сообщение "отсутствует сходимость". Эта ошибка может быть вызвана следующими причинами: уравнение не имеет корней; корни уравнения расположены далеко от начального приближения; выражение имеет локальные максимумы или минимумы между начальным приближением и корнями; выражение имеет комплексный корень, но начальное приближение было вещественным (или наоборот). Обычно для установления причины ошибки достаточно подробно исследовать график f (х). 58
В инженерной практике часто приходится решать уравнения при многократном изменении параметров. Например, пусть требуется решить уравнение ех = ах2 для нескольких различных значений а. Самый простой способ состоит в определении функции
(
f (a, x ) := root e x − a ⋅ x 2 , x
)
Затем присвойте конкретные значения параметру a и начальное значение переменной x как аргументам этой функции. Задача: решить уравнение
x
2
e = a ⋅x
при различных значениях a.
Определим функцию f, решающую уравнение для заданного a:
(x
2
)
f ( a , x) := root e − a⋅ x , x
Решение уравнения для ряда значений a: a := 1 .. 5
x 0:= 1
(начальное приближение)
Начальное приближение для каждого значения a есть корень, соответствующий предыдущему значению: xa := f (a , xa− 1) Ответы: a =
Проверка: xa =
e
xa
=
a⋅ (xa) = 2
1
–0.703
0.495
0.495
2
–0.54
0.583
0.583
3
–0.459
0.632
0.633
4
–0.408
0.665
0.665
5
–0.371
0.69
0.69
Рис. 23. Определение функции пользователя с функцией root
Иллюстрация решения этой задачи приведена на рис. 23. 59
5.2. Нахождение корней полинома Для нахождения корней выражения, имеющего вид anxn + an–1xn–1 + + … + a1x + a0, лучше использовать функцию polyroots(a) вместо root. В отличие от функции root, функция polyroots не требует начального приближения и возвращает сразу все корни как вещественные, так и комплексные. Коэффициенты полинома должны быть представлены в порядке возрастания степени х в векторе а длины n + 1. 3
x − 10⋅ x + 2
Найти корни полинома
В вектор коэффициентов должны войти все коэффициенты, в том числе равные нулю:
v :=
0 1
2
−3.258 polyroots ( v) = 0.201 3.057
−10
Найти корни полинома с комплексными коэффициентами 3
2
x + ( 3 + 2i) ⋅ x + ( −4 + 6i) ⋅ x − 8i
Вектор коэффициентов
−8i −4 + 6i v := 3 + 2i 1
Все корни, как вещественные, так и комплексные:
polyroots ( v ) =
−4
−2i 1
Рис. 24. Использование функции polyroots
Пример нахождения корней полинома третьей степени с комплексными коэффициентами приведен на рис. 24. 60
5.3. Решение систем уравнений Для решения систем уравнений выполните следующее: задайте начальные приближения для всех неизвестных, входящих в систему уравнений; наберите ключевое слово Given. Оно указывает Mathcad, что далее следует система уравнений. Убедитесь, что при этом вы не находитесь в текстовой области; введите уравнения и неравенства в любом порядке ниже ключевого слова Given. Удостоверьтесь, что между левыми и правыми частями стоит символ =, напечатанный комбинацией клавиш [Ctrl+=] или выбранный из соответствующей палитры; введите выражение, которое включает Find(z1, z2, z3, ...). Эта функция возвращает решение системы уравнений. Число аргументов должно быть равно числу неизвестных. Обычно для анализа решения удобно использовать иллюстрированный график. Пример решения систем уравнений приведен на рис. 25. Отметим, что в зависимости от численного значения начальных значений находится одно или другое решение. Между ключевыми словами Given и Find могут быть вставлены неравенства. Блоки решения уравнений не могут быть вложены друг в друга. Каждый блок решения уравнений может иметь только одно ключевое слово Given и имя функции Find. Можно, однако, определить функцию f(x) := Find(x) в конце одного блока решения уравнений и затем использовать f (x) в другом блоке. Причины, по которым Mathcad не может найти корни систем уравнений, принципиально те же, что и для функции root. В инженерной практике часто приходится многократно решать системы уравнений и определять влияние параметра на решения. На рис. 26 приведен конкретный пример исследования зависимости максимального значения модуля функции комплексного переменного A(ω) = W (iω) ,
где W (iω) =
k . T (iω) + 2T ξiω + 1 2
2
Напомним, что мнимая единица в Mathcad вводится как 1i. Максимальное значение функции A(ω) определяется из условия
dA(ω) = 0. dω 61
Найти точки пересечения окружности и прямой ψ := 0 ,
π 20
x := −3 , −2.9.. 3
.. 2⋅ π 6
4
2
6 ⋅sin( ψ ) 2− x
0
2
4
4
2
0
2
4
6 ⋅cos( ψ ) , x
Решение 1 Начальные значения
x := 1
y := 1
Given 2
2
Уравнение окружности
x +y = 6
Уравнение прямой
x+ y = 2
−0.414 2.414
Find( x, y ) = Решение 2
Начальные значения Given
2
2
x + y =6
x := −1
y := 1
x+ y = 2
−0.414 2.414
Find( x, y ) =
Рис. 25. Решение системы уравнений
62
Дана функция комплексного переменного W (ω , T , ξ) :=
1
ω := 0.1, 0.2.. 10
T ⋅ (i⋅ ω) + 2⋅ T⋅ ξ⋅ i⋅ ω + 1 2
2
T := 1
График модуля этой функции имеет максимальное значение, зависящее от параметра ξ: 10
W ( ω , T , 0.1 )
1
W ( ω , T , 0.3 ) W ( ω , T , 0.5 )
0.1
0.01
0.1
1
10
ω
ω := 1
Given
Условие максимума
MaxMod (T , ξ) := Find(ω)
d dω
W (ω , T , ξ) = 0
Функция MaxMod (T , ξ) возвращает значение ω, соответсвующее максимуму модуля комплексной функции при заданных T и ξ. Графики функций позволяют проанализировать размещение максимума на оси ω зависимость этого максимума от ξ. 2
m := 1 .. 100
ξ m := 0.0001⋅
m
2
ωmax m := MaxMod (T , ξ m) 1 .10
5
0.6
1 .10
4
0.4
1 .10
3
W (ω maxm , T , ξm)
ξm 0.2
100 10
0 0.6
0.8 ω maxm
1 –3 –5 –4 1 .10 1 .10 1 .10 0.01 ξm
0.1
1
Рис. 26. Определение максимума модуля функции комплексного переменного
63
В приведенном примере всякий раз, когда вычисляется функция MaxMod, Mathcad подставляет заданные конкретные значения аргументов Т и ξ, решает уравнение относительно неизвестного w и возвращает найденное значение корня. Приведенный пример включает в себя одно уравнение с одним неизвестным. Также возможно многократно решать и систему уравнений при различных значениях входящих в нее параметров. Однако в этом случае требуется проявить аккуратность при выводе результата, чтобы избежать сообщения об ошибке "нескалярная величина". 5.4. Решение дифференциальных уравнений Mathcad имеет ряд встроенных функций, предназначенных для решения обыкновенных дифференциальных уравнений (ОДУ). При решении ОДУ искомой величиной является функция. При использовании любых методов численного интегрирования необходимо, чтобы были заданы по крайней мере следующие величины: начальные условия; набор точек, в которых нужно найти решение; само дифференциальное уравнение, записанное в некотором специальном виде, который будет детально описан ниже. Один из наиболее эффективных алгоритмов интегрирования ОДУ основан на численном методе Рунге – Кутты четвертого порядка. Функция, реализующая этот метод, имеет вид rkfixed(y, x1, x2, npoints, D). Здесь: у – вектор начальных условий размерности n, где n – порядок дифференциального уравнения или число уравнений в системе (если решается система уравнений); х1, х2 – граничные точки интервала, на котором ищется решение дифференциального уравнения. Начальные условия, заданные в векторе у, – это значение решения в точке х1; npoints – число точек (не считая начальной точки), в которых ищется приближенное решение. При помощи этого аргумента определяется число строк (1 + npoints) в матрице, возвращаемой функцией rkfixed; D(х, у) – функция, возвращающая значение в виде вектора из n элементов, содержащих первые производные неизвестных функций.
64
Решение уравнения y' + 3y = 0 y 0 := 4
Начальное значение
Определение функции, задающей производную y' = –3y:
D( x, y ) := −3⋅ y 0
Вычисление решения в ста промежуточных точках на отрезке [0;4] Z := rkfixed( y , 0 , 4 , 100, D) i := 0 .. rows ( Z) − 1
Построение графика решения 4
(Z 〈1〉 )i
2
0
0
(Z
2 〈0〉
4
)i
Найти решение уравнения y' = –y 2 + x с начальным условием y(0) = 1 в пятидесяти промежуточных точках на отрезке [0;10] Начальное значение
y 0 := 1
D( x, y ) := −(y 0) + x
Z := rkfixed( y , 0 , 10, 50, D)
2
n := 0 .. 50
Построение графика решения 4 3 Zn ,1
2 1 0
0
5
10
Zn ,0
Рис. 27. Решение дифференциальных уравнений первого порядка
65
На рис. 27 приведено решение двух дифференциальных решений первого порядка. При решении дифференциальных уравнений более высоких порядков имеются следующие особенности: вектор начальных значений у теперь состоит из n элементов, определяющих начальные условия для искомой функции и ее производных y, y ′, y ″, ..., y(n–1); функция D является теперь вектором, содержащим n элементов:
y′(t ) y′′(t ) D(t, y ) = ; ... (n) y (t ) матрица, полученная в результате решения, содержит теперь n столбцов: первый для значений t, а оставшиеся –для значений у(t), y'(t), y"(t), ..., y(n–1)(t). Пример, приведенный на рис. 28, показывает, как решить дифференциальное уравнение четвертого порядка y ( IV ) − 2k 2 y′′ + k 4 y = 0
c начальными условиями у(0) = 0, у′(0) = 1, у″(0) = 2, у′″(0) = 3. На рис. 29 приведено решение системы дифференциальных уравнений первого порядка
(
)
(
)
x0′ (t ) = µx0 (t ) − x1(t ) − x0 (t ) 2 + x1(t ) 2 x0 (t ), x1′ (t ) = µx1(t ) + x0 (t ) − x0 (t ) 2 + x1(t ) 2 x1(t )
с начальными условиями x0(0) = 0, x1(0) = 1, и построен график зависимости x0(t) от x1(t).
66
y :=
k := 3 Начальные условия
y1 y2 D( t , y ) := y3 2 4 2⋅ k ⋅ y 2 − k ⋅ y 0
1 2 3 0
← Первая производная ← Вторая производная ← Третья производная ← Четвертая производная
Z := rkfixed( y , 0 , 5 , 100, D) Вычисление решения в ста промежуточных точках на отрезке [0;5] t
y(t)
0
1
y'(t) 2
y"(t) 3
y'"(t) 4
0
0
0
1
2
3
1
0.05
0.053
1.104
2.195
4.776
2
0.1
0.111
1.221
2.477
6.543
3
0.15
0.175
1.354
2.85
8.358
4
0.2
0.246
1.507
3.315
10.274
5
0.25
0.326
1.687
3.88
12.348
6
0.3
0.416
1.897
4.553
14.636
Z= 7
0.35
0.516
2.144
5.348
17.198
8
0.4
0.631
2.434
6.279
20.101
9
0.45
0.761
2.775
7.365
23.417
10
0.5
0.909
3.174
8.629
27.225
11
0.55
1.079
3.641
10.097
31.616
12
0.6
1.275
4.187
11.802
36.694
13
0.65
1.499
4.826
13.78
42.577
14
0.7
1.759
5.571
16.075
49.401
15
0.75
2.059
6.439
18.738
57.321
Рис. 28. Решение дифференциального уравнения высокого порядка
67
Решение системы двух нелинейных дифференциальных уравнений первого порядка
µ := −0.2
0 1
x :=
Начальные условия
µ ⋅ x0 − x1 − (x0)2 + (x1)2 ⋅ x0 D( t , x) := µ ⋅ x + x − (x )2 + (x )2 ⋅ x 1 1 1 0 0
Первые производные
Z := rkfixed( x, 0 , 20, 100, D)
n := 0 .. 100
График решения для t = 0..20
0.5
Zn ,1
0
0.5
0.5
0
0.5
1
Zn ,2
Рис. 29. Решение системы дифференциальных уравнений первого порядка
68
Решить систему: u" = 2v v" = 4v - 2u с начальными условиями u(0) = 1.5, u'(0) = 1.5, v(0) = 1, v'(0) = 1. Определение вектора начальных условий (u = y0, u' = y1, v = y2, v' = y3)
y :=
1 1
1.5 1.5
Определение вектора первых и вторых производных y1 2⋅ y 2 D( x, y ) := y3 4⋅ y2 − 2⋅ y 0 x
u(x)
0
Z := rkfixed( y , 0 , 1 , 100, D) u'(x)
v(x)
v'(x)
1
2
3
4
0
0
1.5
1.5
1
1
1
0.01
1.515
1.52
1.01
1.01
2
0.02
1.53
1.54
1.02
1.02
3
0.03
1.546
1.561
1.03
1.03
4
0.04
1.562
1.582
1.041
1.041
5
0.05
1.578
1.603
1.051
1.051
6
0.06
1.594
1.624
1.062
1.062
Z= 7
0.07
1.61
1.645
1.073
1.072
8
0.08
1.627
1.667
1.083
1.083
9
0.09
1.643
1.688
1.094
1.094
10
0.1
1.66
1.71
1.105
1.105
11
0.11
1.678
1.733
1.116
1.116
12
0.12
1.695
1.755
1.127
1.127
13
0.13
1.713
1.778
1.139
1.138
14
0.14
1.731
1.801
1.15
1.15
15
0.15
1.749
1.824
1.162
1.161
Рис. 30. Решение системы дифференциальных уравнений второго порядка
69
Рис. 30 показывает, как поступать при решении систем уравнений порядка выше первого. Функция rkfixed возвращает матрицу, в которой: первый столбец содержит точки, в которых должны быть найдены решения и их производные; остальные столбцы содержат значения решений и их производных, соответствующие точкам их первого столбца. Порядок, в котором появляются решение и их производные, повторяет порядок их расположения в функции D(x, y) и векторе начальных условий у. Функция kfixed, описанная выше, использует универсальный метод для решения уравнений с постоянным шагом. Шаг численного интегрирования определяется интервалами х2 – х1 и количеством промежуточных точек npoints. Измененяя шаг численного интегрирования, можно в значительных пределах менять точность решения задачи. Система дифференциальных уравнений может иметь некоторые специфические свойства, используя которые, можно решать ее более точно и быстро. Когда известно, что решение является гладкой функцией, лучше использовать функцию Bulstoer(y, x1, x2, npoints, D), где аргументы имеют тот же смысл, что в функции rkfixed. В отличие от функции rkfixed, функция Bulstoer использует численный метод Bulirsch-Stoer. Если искомая функция на отрезке [х1; х2] значительно меняет свой наклон, то эффективнее использовать функцию Rkadapt(y, x1, x2, npoints, D). Эта функция проверяет, как быстро меняется приближенное решение и адаптирует соответственно размер шага. Адаптивный контроль шага дает возможность функции Rkadapt вычислять значение приближенного решения на более мелкой сетке в тех областях, где оно меняется быстро, и на более крупной – в тех областях, где оно меняется медленно. Это позволяет повысить точность, и сократить время требуемое для решения уравнения. Существует ряд систем дифференциальных уравнений, решение которых содержит быстрые осциллирующие процессы и медленные составляющие. Типичным видом таких систем являются дифференциальные уравнения, описывающие поведение гироскопических приборов с учетом нутационных колебаний и прецессионного движения. Для решения таких задач в Mathcad используются функции stiffb(y, x1, x2, npoints, D, J), stiffr(y, x1, x2, npoints, D, J). В первой функции используется Bulirsch-Stoer метод для решения жестких систем, а во второй функции Rosenbrock метод. Использова70
ние этих функций требует задания дополнительного аргумента J(x, y). Это матрица размером n × (n + 1). Первый столбец содержит производные ∂D/∂x. Остальные строки и столбцы представляют собой матрицу Якоби ∂D/∂yk системы ОДУ. Например, если
x 0 xy1 y1 D ( x, y ) = , то I ( x, y ) = 0 −2 y −2 y . −2 y1 y0 1 0 Программа Mathcad имеет еще несколько встроенных функций для нахождения решения только в конечной точке. Использование подобных функций позволяет экономить память ЭВМ. Имеются функции для решения систем уравнений, для части переменных которых известны начальные условия, а для других переменных – конечные условия. Подобные задачи называются двухточечными краевыми задачами. Имеются функции для решения отдельных задач в частных производных. Подробности по использованию этих функций можно посмотреть в литературе [2, 3].
71
6. СИМВОЛЬНЫЕ ВЫЧИСЛЕНИЯ До сих пор описывалось, как Mathcad вычисляет выражения численно. При этом он возвращает после знака равенства одно или несколько чисел. Когда же Mathcad использует символьную математику, результатом вычисления выражения является другое выражение, как показано в нижней части рис. 31. При этом желаемая форма этого второго выражения может быть задана. Первоначальное выражение можно разложить на множители, проинтегрировать его, разложить в ряд и так далее. Основной целью изучения символьных вычислений является управление формой представления результата. Численные расчеты возвращают просто число: 3
F( x) :=
∑ k
=0
3! k!⋅ ( 3 − k)!
k 3− k
⋅x ⋅2
F( 2) = 64
F( −5) = −27
Символьные вычисления позволяют существенно упростить сложное выражение: 3
∑ k
=0
3!
k 3− k
k!⋅ ( 3 − k)!
2
⋅x ⋅2
3
8 + 12⋅ x + 6⋅ x + x
– результат упрощения
Рис. 31. Численное и символьное вычисление одно и того же выражения
Простейшие символьные упрощения делаются следующим образом: удостоверьтесь, что команда Автоматическое Вычисление в меню Математика помечена, в противном случае сделайте это из меню; 72
введите выражение, которое нужно упростить; нажмите [Ctrl+Period] (клавишу Ctrl, сопровождаемую точкой). Mathcad отобразит стрелку "→" – символьный знак равенства; щелкните мышью вне выражения. Mathcad отобразит упрощенную версию первоначального выражения. Если выражение не может быть упрощено, Mathcad просто повторит его справа от стрелки. Символьный знак равенства является оператором, подобным любому оператору Mathcad. Когда делаются изменения где-либо выше или левее от него, Mathcad модифицирует результат. На рис. 32 приведены примеры использования символьного знака равенства. b
⌠ 2 1 3 1 3 x dx → ⋅ b − ⋅ a ⌡a 3 3 Если выражение упростить не удается, символьный знак равенства возвращает его неизмененным: 2
2
x →x
Это аналогично поведению знака равенства в численных расчетах: 2=2
5=5
Символьный знак равенства работает также с массивами:
a21 a22 a11 a12
−1
−a12 a22 (a11⋅ a22 − a12⋅ a21) (a11⋅ a22 − a12⋅ a21) → −a21 a11 (a ⋅ a − a ⋅ a ) (a ⋅ a − a ⋅ a ) 11 22 12 21 11 22 12 21
Рис. 32. Использование символьного знака равенства
Значительно бoльшие возможности управления результатами символьных преобразований обеспечивает меню Символы. В Mathcad дополнительные удобства обеспечивает специальное меню, открываемое кнопкой палитры символов. В том и в другом случае появляется возможность добавлять ключевые слова (команды). При ис73
пользовании меню Символы необходимо заключить все, что требуется преобразовать в выделяющую рамку и выбрать соответствующую команду из меню Символы. Имеется важное различие между символьным преобразованием, использующим меню Символы, и преобразованием, использующим символьный знак равенства или меню палитры символов. Результаты с правой стороны от символьного знака равенства вычисляются заново всякий раз при внесении изменений в рабочий документ. Результат, полученный с использованием меню Символы, автоматически модифицироваться не будет. В меню Символы имеется команда Стиль Вычислений, позволяющая выводить результат под исходным выражением или справа от него, а также показывать или скрывать комментарии. Рекомендуется воспользоваться этой командой при первом обращении к меню Символы. На рис. 33 приведены примеры преобразования командами Расчеты Символические и С плавающей запятой из меню Символы. Вычислить в символах: e
i ⋅ n ⋅υ
exp(i⋅ n ⋅ υ ) cos (n ⋅ υ ) + i⋅ sin (n ⋅ υ ) π 3.14159265358979323846264338328 – результат расчета с плавающей запятой (30 значащих цифр) ∞
⌠ − x2 e dx ⌡0 .886226925452758013649083741670 Рис. 33. Символьные преобразования, доступные из пункта меню
При преобразовании выражений, содержащих комплексные числа, командой Комплексные Mathcad выразит результаты в виде a + bi. В отличие от обычных вычислений Mathcad, которые проводятся с пятнадцатью десятичными числами, при использовании команды С пла74
вающей запятой можно управлять количеством значащих цифр. После ввода команды С плавающей запятой Mathcad предложит выбрать количество значащих цифр от 1 до 4000. 6.1. Расчеты Для разложения функций в ряды следует выделить переменную, по которой требуется найти разложение и выбрать команду Разложить на составляющие… из меню Переменные. Диалоговое окно запросит порядок остаточного члена. На рис. 34 приведены примеры разложения функций sin x и ln(x + 1). Для разложения выражения (х + у)4 его следует выделить рамкой и использовать команду Расширить. Аналогично раскладывается выражение cos5x. Для разложения выражения на множители используется команда Фактор. Для разложения на элементарные дроби необходимо выделить переменную в знаменателе и выбрать команду Преобразование в частичные доли. Напомним, что для обратного преобразования от суммы элементарных дробей в произведение нужно выделить все выражение. Для выражения производных, определенных и неопределенных интервалов, сумм, произведений и пределов удобно использовать кнопку палитры символов с изображением интеграла. Примеры этих вычислений приведены на рис. 35. При использовании операторов необходимо помнить, что следует заполнять все зарезервированные места ввода. Если результат может быть вычислен точно, то появится точный ответ. В противном случае Mathcad будет возвращать в качестве ответа первоначальное выражение. При вычислении неопределенного интеграла следует помнить, что результат интегрирования неоднозначен. Если f (x) – интеграл данной функции, то для любой константы С интегралом будет также f (x) + С. Таким образом, ответ, получаемый Mathcad, может отличаться на константу от ответа, который можно найти в таблицах. Если продифференцировать функцию, например sin t + 5 (см. рис. 35), и затем проинтегрировать результат, необязательно в качестве ответа получится исходная функция. В тех случаях, когда символьный процессор не сможет найти неопределенный интеграл, появится сообщение об ошибке. При символьном вычислении определенного интеграла символьный процессор пытается найти неопределенный интеграл от подынтеграль75
sin ( x) 1⋅ x −
Выделите x и выберитеРазложить на составляющие... 1 6
1
3
⋅x +
( 6)
5
120
⋅x + O x
ln( x + 1) 1⋅ x −
1 2
(x + y)
2
⋅x +
1 3
3
⋅x −
4
4
1 4
4
⋅x +
1 5
( 6)
5
⋅x + O x
Выделите выражение и выберите Расширить
3
2
2
3
x + 4⋅ x ⋅ y + 6⋅ x ⋅ y + 4⋅ x⋅ y + y
4
cos ( 5⋅ x) 5
3
16⋅ cos ( x) − 20⋅ cos ( x) + 5⋅ cos ( x)
1 x− 1
−2⋅
+
1 x+ 3
−
2⋅ x
Выберите Фактор (разложение на множители)
x+ 2
(x2 − 6⋅ x − 2 + x3) [ ( x − 1) ⋅ ( x + 3) ⋅ ( x + 2) ]
( 2⋅ x − 1) ⋅ ( x − 1) 3
2
x + x + x+ 1 3 ( x + 1)
−
Выделите x и выберите Преобразование в частичные доли
( x + 2)
(x2 + 1) Рис. 34. Разложение функций
76
n
∑
10
2
i
=1
i
1 3
упростить ↓ 3
⋅n +
1 2
2
⋅n +
1 6
⋅n
∏ 1 −
k= 2
1
k
3
80926932541 99532800000
⌠ cos ( t ) dt ⌡
d ( sin ( t ) + 5) dt
sin ( t )
cos ( t) ∞
⌠ − x2 e dx ⌡0
1 2
1 2 ⋅π
⌠ ⌠ ⌠ ln( x) dx dx dx ⌡ ⌡ ⌡ 1 6
3
⋅ x ⋅ ln( x) −
11 36
3
⋅x
Правый предел lim x→0 + 1
c
⌠ 3 x dx ⌡1
1 + b ⋅ x ⋅ signum ( x)
1 4
Проверка
4
⋅c −
1 4
1 ⋅ x3 ⋅ ln( x) − 11 ⋅ x3 36 dx 6 d3
3
ln( x)
Левый предел lim x→0 −
1 + b ⋅ x ⋅ signum ( x)
−1 Рис. 35. Примеры символьных преобразований
77
ного выражения перед подстановкой пределов интегрирования. Если символьное интегрирование проведено успешно и пределы интегрирования – целые числа, обыкновенные дроби, точные константы, подобно π, или пределы бесконечные, процессор выдаст точное значение интеграла. Если подынтегральное выражение или один из пределов содержит десятичную точку, символьный ответ будет числом, отрабатываемым с двадцатью значащими цифрами (по умолчанию). Изменить число значащих цифр можно с помощью пункта меню Расчеты С плавающей запятой. В отличие от символьного интегрирования программа численного интегрирования находит значения подынтегрального выражения во многих точках на отрезке интегрирования и использует эти значения, чтобы аппроксимировать интеграл. Различия в выполнении одних и тех же операций в символьных и численных режимах объясняется тем, что символьная математика - не развитие пакета Mathcad, а приобретение фирмой MathSoft программного модуля у фирмы Maple. Если необходимо проводить сложные символьные преобразования, выходящие за рамки возможностей Mathcad, то следует воспользоваться пакетом Maple или Derive. Вообще говоря, символьный и численный процессоры Mathcad не связаны друг с другом. Из-за этого можно заниматься сложными численными вычислениями, не зная, что можно свести их к эквивалентной, но намного более простой проблеме разумным использованием символьного процессора. Например, если требуется вычислить выражение типа uvw
∫ ∫ ∫ (x
2
+ y 2 + z 2 )dxdydz,
000
Mathcad предпринял бы трудоемкую задачу вычисления численной аппроксимации тройного интеграла. Символьный процессор исследовал бы тройной интеграл и возвратил бы эквивалентное, но более простое выражение
1 3 ( w vu + wv 3u + wvu 3 ). 3 Для решения подобных задач в Mathcad есть возможность, выбирая пункт Оптимизация из меню Математика, заставить эти два процес78
сора общаться друг с другом. Если команда Оптимизация подключена (помечена слева в меню Математика) и Mathcad находит более простую форму для выражения, он реагирует следующим образом: отмечает область красной звездочкой; заменяет внутреннее представление выражения его упрощенной формой. Отображаемое выражение остается неизменным; вычисляет эквивалентное выражение вместо заданного. Чтобы увидеть это выражение, дважды щелкните мышью на красной звездочке позади области (см. рис. 36). Выберите пункт Оптимизация из меню Математика *
u := 1
v := 2 u
v
w
⌠ ⌠ ⌠ A := ⌡0 ⌡0 ⌡0
w := 3
(x2 + y2 + z2)dx dy dz
*
Звездочка показывает, что символьный процессор нашел упрощенную форму данного выражения. Упрощение выражения экономит время – теперь не нужно вычислять интеграл вообще. Рис. 36. Вычисление интеграла по упрощенной формуле
6.2. Преобразования Фурье и Лапласа Прямое и обратное преобразования Фурье функции f(t) определяются формулами F (ω) =
∞
∫
f (t )e −iωt dt,
−∞ ∞
1 f (t ) = F (ω)eiωt dt. ∫ 2π −∞
79
Преобразование Фурье 1
Функция
2 1
⋅ exp
−1
8
⋅t
2
имеет преобразование Фурье
1 2 2 ⋅ 8⋅ π ⋅ exp −2⋅ ω
(
2 В упрощенном виде:
)
1 2 2 ⋅ exp −2⋅ ω 2⋅ π
(
)
Преобразование Лапласа Функция
имеет преобразование Лапласа
sin ( t ) 1
(s 2 + 1)
Обратное преобразование:
sin ( t ) sin ( a⋅ x) ⋅ cos ( b ⋅ x)
Функция 1 2
⋅
(a + b)
s + ( a + b) 2
2
имеет преобразование Лапласа +
1 2
⋅
(a − b)
s + ( a − b ) 2 2
В упрощенном виде: a⋅
(s 2 + a2 − b2) (s 2 + a2 + 2⋅ a⋅ b + b 2)⋅ (s 2 + a2 − 2⋅ a⋅ b + b2)
Рис. 37. Преобразования Фурье и Лапласа
Чтобы получить преобразование Фурье, необходимо: ввести выражение, которое нужно преобразовать; щелкнуть мышью на переменной преобразования; выбрать последовательно Символы, Преобразование и Фурье. 80
Для обратного преобразования Фурье повторяются все действия за исключением последнего выбора. Выбирается команда Фурье Обратное. Прямое и обратное преобразования Лапласа функции f (t) определяются формулами ∞
F ( s ) = ∫ f (t ) e − st dt, 0
σ+i∞
∫
f (t ) =
F ( s ) e st ds,
σ−i∞
где F(s) – функция, все особые точки которой находятся слева от линии Re(s) = σ. Прямое и обратное преобразования Лапласа с помощью Mathcad осуществляются аналогично преобразованию Фурье. Примеры использования преобразований Фурье и Лапласа приведены на рис. 37. 6.3. Прямое и обратное z-преобразования Прямое и обратное z-преобразования функции f (n) определяются формулами Исходные функции: z-преобразования: Обратные z-преобразования:
1
n
e z
z ( z − 1)
( z − 1)
1
n
− α ⋅ n ⋅T
z
2
(z − exp(−α ⋅ T)) exp(−α ⋅ T)
n
Исходная функция: n ⋅ cos ( b ⋅ n ) z-преобразование: z⋅
(z2⋅ cos ( b) − 2⋅ z + cos (b))
(z4 − 4⋅ z3⋅ cos (b) + 4⋅ z2⋅ cos ( b)2 + 2⋅ z2 − 4⋅ cos ( b) ⋅ z + 1) Рис. 38. z-преобразования
81
∞
F ( z ) = ∑ f (n ) z − n , n =0
f (n ) =
1 F ( z ) z n −1dz, 2πi ∫c
где с – контур, включающий все особенности подынтегрального выражения. На рис. 38 приведены примеры прямого и обратного z-преобразований.
82
7. ПРОГРАММИРОВАНИЕ Под программой в Mathcad понимают выражение, состоящее из других выражений и функций. Программы в Mathcad содержат конструкции, во многом подобные программным конструкциям языков программирования: условные передачи управления, операторы циклов, области видимости переменных, использование подпрограмм и рекурсии. Алгоритмические конструкции в ряде Mathcad вводятся не традиционным набором через клавиатуру ключевых слов if, while, for, break, otherwise, on error, continue, return, а нажатием одной из кнопок панели программирования, вызываемой, в свою очередь, нажатием кнопки на панели Математика. Нажатие одной из этих кнопок создает на дисплее заготовку соответствующей программной конструкции. Рассмотрим их на примерах. Для вычисления функции
f ( x, w) = lg( x w) можно использовать ее определение в виде одной строки, и программа в этом случае не нужна, но составление программы позволяет показать, как нужно отделять друг от друга операторы, и как использовать локальный оператор присваивания "←". Введите левую часть определения функции f(x, w) и оператор присваивания ":=". Теперь нужно открыть панель программирования и нажать кнопку Add Line или на клавиатуре клавишу ]. Появится вертикальная линия с двумя полями ввода для занесения операторов, образующих программу, рис. 39. В верхнем поле ввода введите [z], нажмите кнопку "←" на панели программирования и введите [x/w]. Последнее поле ввода предназначено для задания возвращаемого функцией значения lg(z).
83
f ( x, w) = lg
Вычисление функции
f ( x, w) :=
z←
x w
log( z)
f ( x, w) := log
x
w
x
w
Обратите внимание, что z не определена вне программы, а десятичный логарифм обозначается log.
– та же функция, определяемая одной строкой
Вычисление функции с условным оператором
F( x, w) :=
z←
x w
0 if x⋅ w ≤ 0 log ( z) otherwise
Та же функция в виде одной строки (if в данном случае набирается на клавиатуре): F( x, w) := if x⋅ w ≤ 0 , 0 , log
w x
Рис. 39. Определение одной и той же функции с помощью программы и через выражение
Для функции f(x, w) в верхнем поле используется условный оператор if (если), определяющий нулевое значение для отрицательных значений выражения под знаком логарифма. Напомним, что логарифм отрицательного числа не определен. Во всех остальных случаях (otherwise) F(x, w) = log(x/w). 84
1. Метод Эйлера
Euler( x1, t1 , t2 , N , f ) :=
x ← x1 t ← t1 D←
t2 − t1 N
while t < t2 x ← x + D⋅ f ( t , x) t←t+D x
2. Метод Рунге – Кутты 4 порядка RK4( x1, t1 , t2 , N , f ) := x ← x1 t ← t1 D←
t2 − t1 N
while t < t2 k1 ← f ( t , x) ⋅ D k2 ← f t +
D
k1
⋅D 2 2 D k2 k3 ← f t + , x + ⋅D 2 2 ,x +
k4 ← f ( t + D , x + k3) ⋅ D x← x+
1 6
⋅ ( k1 + 2⋅ k2 + 2⋅ k3 + k4)
t←t+D x Пример использования функций Euler и RK4 Дана система уравнений x' = y, y' = 0,1y - x + 2; t1 := 0 t2 := 3 x 1 0 x1 := f ( t , x) := N := 1000 0 0.1 x x 2 ⋅ − + 1 0 4.326303921 4.316016079 RK4( x1, t1 , t2 , N , f ) = Euler( x1, t1 , t2 , N , f ) = 0.339538702 0.336967211 Рис. 40. Численное решение задачи Коши (иллюстрация цикла while)
85
Mathcad предлагает два вида циклов, отличающихся по способу определения условия завершения цикла. Если цикл должен завершиться по выполнении некоторого условия, причем момент выполнения этого условия заранее неизвестен, то целесообразно использовать цикл типа while. После нажатия кнопки while на экране появляется указанное слово с правым и нижним пустыми прямоугольниками. В правый прямоугольник записывается булево выражение (переменная), управляющее циклом, а в нижний прямоугольник – тело цикла, операторы, которые будут выполняться, пока булево выражение возвращает "Да". Если в цикле цикла более одного оператора, то нужно воспользоваться кнопкой Add Line. На рис. 40 представлены программы численного интегрирования дифференциального уравнения методом Эйлера (пункт 1) и методом Рунге – Кутты 4-го порядка (пункт 2). Ядро программ – цикл sum ( n ) :=
n := 44
s←0
n
for i ∈ 1 .. n
∑
эквивалентно оператору
s←s+i
i
i = 990
=1
sum ( 44) = 990
join( r , s ) :=
m← 0 for x ∈ r , s vm ← x m← m+ 1 v
10 r := 11 15
1 s := 2
join( r , s ) =
1 2 10 11 15
Рис. 41. Использование цикла типа for с переменными цикла двух различных видов
86
while. Созданные программные функции Euler и RK4 возвращают значение вектора x(t2) для системы уравнений x = f (t, x ). Аргументы функций Euler и RK4: x1 – вектор начальных условий для момента времени t1, N – число шагов интегрирования, f – правая insimp( f , a , b , N) :=
s←0 w←
b−a N
for i ∈ 1 .. N φ ← f ( a − w + i⋅ w) + 4⋅ f a −
s ← s + w⋅
w 2
+ i⋅ w + f ( a + i⋅ w)
φ 6
s Функция интегрирования с адаптивным выбором шага adapt ( f , a , b ) :=
x ← insimp( f , a , b , 10) x if
x − insimp( f , a , b , 5) ≤ TOL
adapt f , a ,
a+ b
a + b , b otherwise + adapt f , 2 2
Точность интегрирования адаптивным алгоритмом определяется постоянной TOL, а методом Симпсона - количеством шагов N. −3
TOL = 1 × 10
(
− 15
adapt f , 10
(
)
, 1 = −0.1040653749
− 15
insimp f , 10
f ( x) := log ( x) ⋅ sin ( x)
)
, 1 , 100 = −0.1041480801
Рис. 42. Использование рекурсивных определений функции
87
часть системы дифференциальных уравнений. Напомним, что в среде Mathcad имеется встроенная функция rkfixed. В качестве упражнения рекомендуется доработать функции Euler и RK4 так, чтобы они возвращали решение не только в конечной точке t2, но и на всем интервале интегрирования. Цикл типа for является циклом, число выполнений которого определено заранее. Число выражений определяется переменной цикла, задаваемой в его начале. На рис. 41 приведено два примера использования цикла. После щелчка на кнопке for на экране справа от имени команды появляется знак "∈", окруженный пустыми прямоугольниками. Cправа от знака "∈" вводится либо диапазон значений переменной цикла, как это показано при вычислении sum(n), либо список скаляров, диапазонов и векторов, разделенных запятыми. При определении функции join(r, s) переменная цикла определена списком элементов векторов. Одним из путей, которые позволяют избежать нагромождения сложных программных конструкций, является перенесение сложностей в подпрограммы. На рис. 42 показано, как это можно сделать в Mathcad. Определив отдельно программу численного определения интеграла по методу Симсона insimp, можно сделать программу вычисления интеграла с заданной точностью значительно проще. Определение adapt стало бы значительно более громоздким, если бы оба вхождения в него нужно было бы заменить очень длинным определением intsinp, приведенным в верхней части рисунка. Функция adapt осуществляет адаптивное интегрирование, используя insimp для аппроксимации площади на каждом подынтервале интегрирования. Из последней строчки видно, что функция adapt вызывает сама себя, т. е. определена рекурсивно. Библиографический список 1. Дьяконов В. Mathcad 2000: учебный курс. СПб.: Питер, 2001. 592 с. 2. Кудрявцев Е. М. Mathcad 2000 Pro. М.: ДМК Пресс, 2001. 576 с. 3. Гурский Д. А. Вычисления в MathCAD. Минск: Новое знание, 2003. 814 с. 4. Плис А. И., Сливина Н. А. MathCAD: математический практикум для экономистов и инженеров: Учеб. пособие. М.: Финансы и статистика, 1999. 656 с. 5. Херхагер М., Партолль Х. MathCAD 2000. Полное руководство. Киев: Ирина, 2000. 416 с. 88