Кирьянов. Самоучитель MathCad 11. Кирьянов д в
Скачать 10.75 Mb.
|
Листинг Поиск корня алгебраического уравнения в заданном root { sin х , -1 , solution Обратите внимание, что явный вид функции f(x) может быть определен непосредственно в теле функции Когда root имеет четыре аргумента, следует помнить о двух ее особенностях внутри интервала не должно находиться более одного корня, иначе будет найден один из них, заранее неизвестно, какой именно значения f аи должны иметь разный знак, иначе будет выдано сообщение об ошибке. Если уравнение не имеет действительных корней, но имеет мнимые, то их также можно найти. В листинге 8.3 приведен пример, в котором уравнение имеющее два чисто мнимых корня, решается два раза с разными начальными значениями. При задании начального значения 0.5 (первая строка листинга) численный метод отыскивает первый корень (отрицательную мнимую единицу -i), а при начальном значении -0.5 (третья строка листинга) находится и второй корень (i). | корнях := 0 . 5 root + 1 , -i х + 1 , = Для решения этого уравнения второй вид функции root (с четырьмя, а нес двумя аргументами) неприменим, поскольку f (x) является положительно Часть III. Численные методы определенной, и указать интервал, на которого она имела бы разный знак, невозможно. Остается добавить, что f может быть функцией не только ха любого количества аргументов. Именно поэтому в самой функции root необходимо определить, относительно какого из аргументов следует решить уравнение. Эта возможность проиллюстрирована листингом 8.4 на примере функции двух переменных f . В нем сначала решается уравнение f(x,0)=0 относительно переменной ха потом другое уравнение f относительно переменной у Листинг 8,4. Поиск корня уравнения, заданного функцией двух переменных ( х , уху+ х у := О o o t ( f уху, у) - Впервой строке листинга определяется функция f (x,y), во второй и третьей значения, для которых будет производиться решение уравнения по у их, соответственно. В четвертой строке решено уравнение f (х,о)=о, а в последней уравнение f забывайте причисленном решении уравнений относительно одной из переменных предварительно определить значения остальных переменных. Иначе попытка вычислить уравнения приведет к появлению ошибки "This variable function is not defined в данном случае говорящей о том, что другая переменная ранее не определена. Конечно, можно указать значение других переменных непосредственно внутри функции root, беспрепятственно удалив, например, вторую и третью строки листинга 8.4 и введя его последние строки в виде root (f (x, 0) хи соответственно. Примечание Для того чтобы отыскать зависимость корней уравнения, вычисленных по одной переменной, от других переменных, разработаны специальные эффективные алгоритмы Об одной из возможностей читайте в разд. 8,8. 8.2. Корни полинома Если функциях) является то все его корни можно определить, используя встроенную функцию , Глава 8. Алгебраические уравнения и оптимизация где — вектор, составленный из коэффициентов полинома. Поскольку полином Й степени имеет ровно корней (некоторые из них могут быть кратными, вектор v должен состоять из элемента. Результатом действия функции poiyroots является вектор, составленный из корней рассматриваемого полинома. При этом нет надобности вводить какое- либо начальное приближение, как для функции root. Пример поиска корней полинома четвертой степени иллюстрируется листингом 8.5. Листинг 8.5. Поиск корня полиномах х 10" p o i y r o o t s (v) Коэффициенты рассматриваемого в примере полиномах) (х J • + (записаны в виде вектора впервой строке листинга. Первым в векторе должен идти свободный член полинома, вторым — коэффициент при и т. д. Соответственно, последним элементом вектора должен быть коэффициент при старшей степени Совет Иногда исходный полином имеется не в развернутом виде, а, например, как произведение нескольких полиномов. В этом случае определить все его коэффициенты можно, выделив его и выбрав вменю (Символика) пункт (Разложить. В результате символьный процессор сам преобразует полином в нужную форму, пользователю надо будет только корректно ввести ее в аргументы функции p o i y r o o t s Во второй строке листинга 8.5 показано действие функции poiyroots. Обратите внимание, что численный метод вместо двух из трех действительных единичных корней (иными словами, кратного корня 1) выдает два мнимых числа. Однако малая мнимая часть этих корней находится в пределах погрешности, определяемой константой И не должна вводить пользователей в заблуждение. Просто нужно помнить, что корни полинома могут быть комплексными, и ошибка вычислений может сказываться как на действительной, таки на комплексной части искомого корня. Для функции poiyroots можно выбрать один из двух численных методов метод полиномов Лаггера (он установлен по умолчанию) или метод парной матрицы Часть Hi. Численные методы Для смены метода Вызовите контекстное меню, щелкнув правой кнопкой мыши на слове polyroots. 2. В верхней части контекстного меню выберите либо пункт (Лаг- гера), либо Companion Matrix (Парная матрица. Щелкните вне действия функции polyroots — если включен режим автоматических вычислений, будет произведен пересчет корней полинома в соответствии с вновь выбранным методом. Для того чтобы оставить за выбор метода решения, установите флажок AutoSelect (Автоматический выбор, выбрав одноименный пункт в том же самом контекстном меню. Системы уравнений Рассмотрим решение системы N нелинейных уравнений с неизвестными . . . , О . . . , О, Здесь , . . ., — некоторые скалярные функции от скалярных переменных и, возможно, от еще каких-либо переменных. Уравнений может быть как больше, таки меньше числа переменных. Заметим, что систему можно формально переписать в виде (где — вектор, составленный из (х) — соответствующая векторная функция. Для решения систем имеется специальный вычислительный блок состоящий из трех частей, идущих последовательно друг за другом Given ключевое слово система, записанная логическими операторами в виде равенств и, возможно, неравенств встроенная функция для решения системы относительно переменных . . . Вставлять логические операторы следует, пользуясь панелью инструментов Булевы операторы. Если Вы предпочитаете ввод с клавиатуры, помните, что логический знак равенства вводится сочетанием клавиш. Блок Given/Find использует для поиска решения итерационные методы, поэтому, как и для функции root, требуется задать начальные значения для всех Сделать это необходимо до ключевого слова Глава 8, Алгебраические уравнения и оптимизация. Значение функции Find есть вектор, составленный из решения по каждой переменной. Таким образом, число элементов вектора равно числу аргументов В листинге 8.6 приведен пример решения системы двух уравнений. Листинг 8.6. Решение системы уравнений x , ( x , у 1 Given g V V f x , у x+ 2 = 0 = 0 ( x , 2 6 9 У = - 1 . 9 5 4 = о В первых двух строках листинга вводятся функции, которые определяют систему уравнений. Затем переменным хи у, относительно которых она будет решаться, присваиваются начальные значения. После этого следует ключевое слово Given и два логических оператора, выражающих рассматриваемую систему уравнений. Завершает вычислительный блок функция значение которой присваивается вектору v. Следующая строка показывает содержание вектора v, те. решение системы. Первый элемент вектора есть первый аргумент функции Find, второй элемент ее второй аргумент. В последних двух строках осуществлена проверка правильности решения уравнений. Совет Часто бывает очень полезно проверить точность решения уравнений, вычислив значения образующих их функций в найденных вычислительным процессором корнях, как это сделано в конце листинга Отметим, что уравнения можно определить непосредственно внутри вычислительного блока. Таким образом, можно не определять заранее функции f (х,у) и д(х,у), как это сделано в первых двух строках листинга а сразу написать х + ух О Часть III. Численные методы Такая форма представляет уравнения в более привычной и наглядной форме, особенно подходящей для документирования работы. Графическая интерпретация рассмотренной системы представлена на рис. 8.3. Каждое из уравнений показано на плоскости XY графиком. Первое сплошной кривой, второе пунктиром. Поскольку второе уравнение линейное, то оно определяет на плоскости XY прямую. Две точки пересечения кривых соответствуют одновременному выполнению обоих уравнений, т. е. искомым действительным корням системы. Как нетрудно убедиться, в листинге найдено только одно из двух решений — находящееся в правой нижней части графика. Чтобы отыскать и второе решение, следует повторить вычисления, изменив начальные значения так, чтобы они лежали ближе к другой точке пересечения графиков, например 8.3. Графическое решение системы двух уравнений Пока мы рассмотрели пример системы из двух уравнений и таким же числом неизвестных, что встречается наиболее часто. Но число уравнений и неизвестных может и не совпадать. Более того, в вычислительный блок можно добавить дополнительные условия в виде неравенств. Например, введение ограничения на поиск только отрицательных значений х в рассмотренный выше листинг 8.6 приведет к нахождению другого решения, как это показано в листинге Листинг 8.7. Решение системы уравнений и неравенств - 1 Given X X X < У 3 = у :=1 Глава 8. Алгебраические уравнения и оптимизация 195 Find (x , у' Обратите внимание, что, несмотря нате же начальные значения, что ив листинге 8.6, мы получили в листинге 8.7 другой корень. Это произошло именно благодаря введению дополнительного неравенства, которое определено в блоке Given в предпоследней строке листинга Если предпринять попытку решить несовместную систему, Mathcad выдаст сообщение об ошибке, гласящее, что ни одного решения не найдено, и предложение попробовать поменять начальные значения или значение погрешности Примечание Вычислительный блок использует константу В качестве погрешности выполнения уравнений, введенных после ключевого слова G i v e n . Например, если то уравнение будет считаться выполненными при и при Другая константа T O L определяет условие прекращения итераций численным алгоритмом (см. разд. 8.4), Значение может быть задано пользователем также как и например, C T O L 0 1 . По умолчанию принято, что . 0 0 1 , но Вы пожеланию можете переопределить Особенную осторожность следует соблюдать при решении систем с числом неизвестных большим, чем число уравнений. Например, можно удалить одно из двух уравнений из рассмотренного нами листинга 8.6, попытавшись решить единственное уравнение д(х,у)=о с двумя неизвестными хи у. В такой постановке задача имеет бесконечное множество корней для любого хи, соответственно, ух условие, определяющее единственное уравнение, выполнено. Однако, даже если корней бесконечно многочисленный метод будет производить расчеты только до тех пор, пока логические выражения в вычислительном блоке не будут выполнены (в пределах погрешности. После этого итерации будут остановлены и выдано решение. В результате будет найдена всего одна пара значений (х,у), обнаруженная первой Примечание О том, как найти все решения рассматриваемой задачи, рассказывается в разд. Вычислительным блоком с функцией Find можно найти и корень уравнения с одним неизвестным. Действие Find в этом случае совершенно аналогично уже рассмотренным в данном разделе примерам. Задача поиска корня рассматривается как решение системы, состоящей из одного уравнения. Единственным отличием будет скалярный, а не векторный тип числа, возвращаемого функцией Find. Пример решения уравнения из предыдущего раздела приведен в листинге 8.8. 196 Часть III. Численные методы Листинг 8.8. Поиск корня уравнения с одним неизвестным с помощью функции х 0.5 Given s i n = О i n d (x) - 3 . 8 1 4 В чем же отличие приведенного решения от листинга 8.1 с функцией Оно состоит в том, что одна и та же задача решена различными численными методами. В данном случае выбор метода не влияет на окончательный результат, но бывают ситуации, когда применение того или иного метода имеет решающее значение. О численных методах решения систем уравнений Если Вы решаете "хорошие" уравнения, как все те, которые были приведены в предыдущих разделах, то можете никогда не задумываться, как именно ищет их корни. Однако даже в этом случае полезно представлять, что происходит "за кадром, те. какие действия совершаются в промежутке между введением необходимых условий после ключевого слова Given и получением результата после применения функции Find. Это важно хотя бы с позиций выбора начальных значений перед вычислительным блоком. Рассмотрим в данном разделе некоторые особенности численных методов и возможности установки их различных параметров, которые предоставляет Функция Find реализует градиентные методы. Покажем их основную идею на примере уравнения с одним неизвестным для функции f (х график которой показан на рис. 8.4. Основная идея градиентных методов состоит в последовательных приближениях к истинному решению уравнения, которые вычисляются с помощью производной от f (х. Приведем наиболее простую форму алгоритма, называемого методом Ньютона За нулевую итерацию принимается введенное пользователем начальное значение хо=х. 2. В точке методом конечных разностей вычисляется производная. Пользуясь разложением Тейлора, можно заменить f (х) в окрестности касательной — прямой линией f f +f Глава 8. Алгебраические уравнения и оптимизация. Определяется точка в которой прямая пересекает ось х (см. рис. 8.4). 5. Если то итерации прерываются, и значение выдается в качестве решения. В противном случае принимается за новую итерацию, и цикл повторяется строится касательная к f (х) в точке определяется точка ее пересечения с осью хит. д. Рис. 8 . 4 . Иллюстрация метода Ньютона Модификация алгоритма Ньютона для решения системы нескольких нений заключается в линеаризации соответствующих функций многих переменных, те. аппроксимации их линейной зависимостью с помощью частных производных. Например, для нулевой итерации в случае системы двух уравнений используются выражения типа ух- хО) + (у - уО) , ду , у + - хО) + (У Эх ду Чтобы отыскать точку, соответствующую каждой новой итерации, требуется приравнять оба равенства нулю, те. решить на каждом шаге полученную систему линейных уравнений предлагает три различных вида градиентных методов. Чтобы поменять численный метод. Щелкните правой кнопкой мыши на названии функции Find. 2. Наведите указатель мыши на пункт Nonlinear (Нелинейный) в контекстном меню. В появившемся подменю (рис. 8.5) выберите один из трех методов Gradient (Сопряженных фадиентов), тоновский) или Levenberg-Marquardt (Левенберга). Часть III. Численные методы = ' . fiutaSelect Linear Conjugate Gradient Evaluation Optimize Advanced Options. 8.5. Смена численного метода Чтобы вернуть автоматический выбор типа численного метода, в контекстном меню надо выбрать пункт AutoSelect (Автоматический выбор. Если установлена опция автоматического выбора (о чем говорит флажок, установленный в пункте AutoSelect), то текущий тип численного метода можно узнать, вызвав тоже самое подменю и посмотрев, который из них отмечен точкой. Два последних метода являются основная идея которых была рассмотрена выше. Первый из них, метод сопряженных градиентов, является — для поиска очередной итерации он использует как текущую, таки предыдущую итерации. Алгоритм Левенберга подробно описан в справочной системе Mathcad, а детальную информацию о методах Ньютона и сопряженных градиентов можно найти в большинстве книг по численным методам. Помимо выбора самого метода, имеется возможность устанавливать их некоторые параметры. Для этого нужно вызвать с помощью того же контекстного меню диалоговое окно Advanced Options (Дополнительные параметры), выбрав в контекстном меню пункты Nonlinear / Advanced options Нелинейный Дополнительные параметры. В этом диалоговом окне (рис. 8.6) имеется пять групп переключателей, по два в каждой. В первой строке Derivative estimation (Аппроксимация производной) определяется метод вычисления производной Forward (Вперед) или Central (Центральная. Они соответствуют аппроксимации производной либо правой (двухточечная схема "вперед, либо центральной (трехточечная симметричная схема) конечной разностью. П р им е чан и е Обратите внимание, что вычисление производной в градиентных численных методах решения уравнений производится более экономичным способом, нежели причисленном дифференцировании (см. гл. 7). Глава 8. Алгебраические уравнения и оптимизация 199 Во второй строке Variable estimation (Аппроксимация переменных) можно определить тип аппроксимации рядом Тейлора. Для рассмотренного нами в этом разделе случая аппроксимации касательной прямой линией выберите переключатель Tangent (Касательная, для более точной квадратичной аппроксимации (параболой) выберите Quadratic (Квадратичная. Следующая группа переключателей Linear variable check (Проверка линейности) позволяет в специфических задачах сэкономить время вычислений. Если Вы уверены, что нелинейности всех функций, входящих в уравнение, мало ваются назначениях всех их частных производных, то установите переключатель Yes (Да. В этом случае производные будут приняты равными константами не будут вычисляться на каждом шаге. Совет С осторожностью изменяйте параметры численных методов. Пользуйтесь ими, когда решение не находится при выставленных по умолчанию параметрах или когда расчеты занимают очень продолжительное время Options estimation; Variable Linear variable check: Evolutionary: Г г г Forward Tangent Cancel j r fiuadtatic No fcielp | 8.6. Диалоговое окно Advanced Пара переключателей (Сканирование) задает опцию поиска бального или локального минимума или максимума. Если выставлен переключатель (Да, Mathcad будет пытаться найти наиболее глубокий экстремум из области, близкой к начальному приближению. Эта опция предназначена, в основном, для настройки (тех же самых, градиентных) алгоритмов поиска экстремума, а не для решения алгебраических уравнений. Наконец, последний переключатель Evolutionary (Эволюционный алгоритм), если установить его в положение Yes (Да, позволяет использовать модификацию численного метода для решения уравнений, определяемых необязательно гладкими функциями. Как мы убедились в этом разделе, все градиентные методы, реализованные в функции Find, требуют многократного вычисления производных. Если Выработаете с достаточно гладкими функ- Часть III. Численные методы циями, то градиентные методы обеспечивают быстрый и надежный поиск корня. Для поиска корня недостаточно гладких функций одной переменной, следует либо выставить данную опцию функции Find, либо использовать метод секущих (функцию root). Помните, что правильный выбор численного метода и его параметров может помочь при решении нестандартной задачи, которая при стандартных установках может и не поддаваться решению. Приближенное решение уравнений Иногда приходится заменять задачу определения корней системы уравнений задачей поиска экстремума функции многих переменных. Например, когда невозможно найти решение с помощью функции Find, можно попытаться потребовать вместо точного выполнения уравнений условий минимизировать их невязку. Для этого следует в вычислительном блоке вместо функции использовать функцию имеющую тот же самый набор параметров. Она также должна находиться в пределах вычислительного блока — начальные значения для неизвестных. Given — ключевое слово. Система алгебраических уравнений и неравенств, записанная логическими операторами — приближенное решение системы относительно переменных минимизирующее невязку системы уравнений. Примечание В функции M i n e r r реализованы те же самые алгоритмы, что ив функции иным является только условие завершения работы численного метода. Поэтому пользователь может тем же самым образом, с помощью контекстного меню (см. разд. 8.4), выбирать численный алгоритм приближенного решения для ФУНКЦИИ M i n e r r Пример использования функции Minerr показан в листинге 8.9. Как достаточно заменить в вычислительном блоке имя функции на Minerr, чтобы вместо точного (с точностью дополучить приближенное решение уравнения, заданного после ключевого слова Листинг 8.9. Приближенное решение уравнения, |