Решение нелинейных уравнений в маткаде

БлогNot. Методы решения нелинейных уравнений в MathCAD

Методы решения нелинейных уравнений в MathCAD

Реализуем для некоторого уравнения 4 наиболее популярных численных метода для решения нелинейных уравнений. При этом мы стремимся именно запрограммировать методы, а не воспользоваться встроенным инструментом Given. Find или функциями root , polyroot . Об этих способах решения почитайте, например, здесь.

Определим функцию уравнения f(x)=0 как функцию пользователя, интервал поиска решения зададим переменными a и b . Найти этот интервал можно, например, табличным или графическим методом:

Начальный интервал [a,b] должен быть таким, чтобы значения f(a) и f(b) имели противоположные знаки. Если искомый корень уравнения окажется единственным на интервале, то совсем хорошо 🙂

Логика метода дихотомии (возможно, более правильные названия — метод бисекции, метод половинного деления) довольно проста: если на концах выбранного интервала [a,b] знаки функции совпадают (произведение f(a)*f(b)>0 ), то вернуть результат "недопустимый интервал" (вернём в этом случае ответ "бесконечность"), в противном случае до тех пор, пока длина интервала не станет меньше заданной погрешности ε , будем находить середину текущего интервала c=(a+b)/2 , считать в ней значение функции и проверять, какую из половин отрезка [a,c] или [c,b] нужно отбросить для выполнения следующего шага — а именно, ту, в которой знак f(c) совпадает со знаком функции на левой или правой границе интервала (в листинге — проверка f(a)*f(c)>0 ). Для большей точности вернём середину "последнего" интервала [a,b] , меньшего ε :

В методе простой итерации исходное уравнение f(x)=0 представляется в эквивалентном виде φ(x)=x (что, вообще говоря, можно сделать бесконечным числом способов), а затем шаг метода выполняется по формуле xk+1 = φ(xk) , пока не будет достигнута заданная точность |xk+1-xk| . Если выбрать φ(x)=x-c*f(x) , то константу c целесообразнее всего искать методом релаксации, для которого c=2/(M+m) , где M — максимальное из значений первой производной на концах отрезка или в находящихся на нём точках перегиба функции (точках, где f»(x)=0 ), а m — минимальное из таких значений. Вот соответствующий расчёт в MathCAD:

Если заданной сходимости нет в течение 10000 шагов, в подпрограмме предусмотрен аварийный выход.

Численный метод Ньютона решения нелинейного уравнения основан на формуле вида xk+1 = xk-f(xk)/f'(xk) , обеспечивающей наилучшую сходимость, но требующей дополнительного вычисления производной на каждом шаге. Так как производные для MathCAD — не проблема, можно всё сделать "в лоб":

Видно, что сходимость метода — на 2 порядка выше (погрешность найденного решения

Наконец, существует метод хорд, в котором кривая f(x) заменяется прямой линией (хордой), стягивающей точки (a, f(a)) и (b, f(b)) . Формула этого метода зависит от знака выражения f(a)*f»(a) , то есть, имеет два варианта:
Если f(a)*f»(a)>0 , то x=b , xk+1=a-(f(a)(xk-a))/(f(xk)-f(a))
Если f(a)*f»(a) , то x=a , xk+1=xk-(f(xk)*(b-xk))/(f(b)-f(xk))

Читайте также:  Имеет ли значение регистр при написании запроса

Вот примерная реализация на MathCAD, как и в предыдущих двух случаях, контролируется максимальное число итераций, равное 10000:

Видно, что сходимость метода оказалась в нашем случае не столь высока.

Подсчитать, сколько шагов какому методу потребовалось, можете сами, немного поменяв выдачу подпрограмм.

Скачать этот пример в формате .xmcd (107 Кб)

05.09.2013, 15:07; рейтинг: 72225

Решение нелинейных уравнений

Вычисление корней численными методами включает два основных этапа:

· уточнение корней до заданной точности.

Рассмотрим эти два этапа подробно.

Отделение корней нелинейного уравнения

Учитывая легкость построения графиков функций в MathCAD , в дальнейшем будет использоваться графический метод отделения корней.

Пример. Дано алгебраическое уравнение

.

Определить интервалы локализации корней этого уравнения.

Пример. Дано алгебраическое уравнение

.

Определить интервалы локализации корней этого уравнения.

На рисунке приведен график функции , построенный в MathCAD . Видно, что в качестве интервала изоляции можно принять интервал . Однако уравнение имеет три корня. Следовательно, можно сделать вывод о наличии еще двух комплексных корней. ¨

Уточнение корней нелинейного уравнения

Для уточнения корня используются специальные вычислительные методы такие, как метод деления отрезка пополам, метод хорд, метод касательных (метод Ньютона) и многие другие.

Функция root . В MathCAD для уточнения корней любого нелинейного уравнения (не обязательно только алгебраического) введена функция root , которая может иметь два или четыре аргумента, т.е. или , где – имя функции или арифметическое выражение, соответствующее решаемому нелинейному уравнению, – скалярная переменная, относительно которой решается уравнение, – границы интервала локализации корня.

Пример. Используя функцию , найти все три корня уравнения , включая и два комплексных.

Заметим, что для вычисления всех трех корней использовался прием понижения порядка алгебраического уравнения, рассмотренный в п. 8.1.1. ¨

Функция root с двумя аргументами требует задания (до обращения к функции) переменной начального значения корня из интервала локализации.

Пример 8.1.5. Используя функцию root , вычислить изменения корня нелинейного уравнения при изменении коэффициента а от 1 до 10 с шагом 1.

Функция polyroots . Для вычисления всех корней алгебраического уравнения порядка (не выше 5) рекомендуется использовать функцию polyroots . Обращение к этой функции имеет вид polyroots (v) , где v – вектор, состоящий из n +1 проекций, равных коэффициентам алгебраического уравнения, т.е. . Эта функция не требует проведения процедуры локализации корней.

Пример. Используя функцию polyroots , найти все три корня уравнения , включая и два комплексных

Блок Given . При уточнении корня нелинейного уравнения можно использовать специальный вычислительный блок Given , имеющий следующую структуру:

Читайте также:  Glenmorangie 10 лет отзывы

Решаемое уравнение задается в виде равенства, в котором используется «жирный» знак равно, вводимый с палитры Логичес­кий .

Ограничения содержат равенства или неравенства, которым должен удовлетворять искомый корень.

Функция Find уточняет корень уравнения, вызов этой функции имеет вид Find ( x ), где x – переменная, по которой уточняется корень. Если корня уравнения на заданном интервале не существует, то следует вызвать функцию Minerr ( x ), которая возвращает приближенное значение корня.

Для выбора алгоритма уточнения корня необходимо щелкнуть правой кнопкой мыши на имени функции Find ( x ) и в появившемся контекстном меню (см. рисунок) выбрать подходящий алгоритм.

Аналогично можно задать алгоритм решения и для функции Minerr ( x ).

Использование численных методов в функциях Find ( x ), Minerr ( x ) требует перед блоком Given задать начальные значения переменным, по которым осуществляется поиск корней уравнения.

Пример. Используя блок Given , вычислите корень уравнения в интервале отделения .

Решение систем уравнений

В зависимости от того, какие функции входят в систему уравнений, можно выделить два класса систем:

· алгебраические системы уравнений;

· трансцендентные системы уравнений.

Среди алгебраических систем уравнений особое место занимают системы линейных алгебраических уравнений (СЛАУ).

Системы линейных алгебраических уравнений

Системой линейных алгебраических уравнений (СЛАУ) называется система вида:

В матричном виде систему можно записать как

,

где – матрица размерности , – вектор с проекциями.

Для вычисления решения СЛАУ следует использовать функцию lsolve , обращение к которой имеет вид: lsolve (А, b ), где А – матрица системы, – вектор правой части.

Решение систем нелинейных уравнений

MathCAD дает возможность находить решение системы уравнений численными методами, при этом максимальное число уравнений в MathCAD 2001 i доведено до 200.

Для решения системы уравнений необходимо выполнить следующие этапы.

Задание начального приближения для всех неизвестных, входящих в систему уравнений. При небольшом числе неизвестных этот этап можно выполнить графически, как показано в примере.

Пример. Дана система уравнений:

Определить начальные приближения для решений этой системы.

Видно, что система имеет два решения: для первого решения в качестве начального приближения может быть принята точка (-2, 2), а для второго решения – точка (5, 20). ¨

Вычисление решения системы уравнений с заданной точностью . Для этого используется уже известный вычислительный блок Given .

Функция Find вычисляет решение системы уравнений с заданной точностью, и вызов этой функции имеет вид Find ( x ), где x – список переменных, по которым ищется решение. Начальные значения этим переменным задаются в блоке . Число аргументов функции должно быть равно числу неизвестных.

Следующие выражения недопустимы внутри блока решения:

· ограничения со знаком ¹ ;

· дискретная переменная или выражения, содержащие дискретную переменную в любой форме;

· блоки решения уравнений не могут быть вложены друг в друга, каждый блок может иметь только одно ключевое слово Given и имя функции Find (или Minerr ).

Читайте также:  Как определить что айфон настоящий

Пример. Используя блок Given , вычислить все решения системы предыдущего примера. Выполнить проверку найденных решений.

Пример. Используя функцию , вычислите решение системы уравнений

Многие уравнения и системы из них не имеют аналитического решения. Однако они могут решаться численными методами с заданной погрешностью (не более значения, заданного системной переменной TOL). Для простых уравнений вида решение находится с помощью функции:root(Выражение Имя переменной). Функция реализует вычисления итерационным методом, причем можно задать начальное значение переменой, это полезно, если возможны несколько решений и тогда выбор решения определяется выбором начального значения переменой. На рисунке 40 приведен пример применения функции root для вычисления корня уравнения.

Рис. 40.Пример решения уравнения с использованием функцииroot

Применяя функцию root надо помнить, что корень функции – это не то значение аргумента, при котором выражение равно нулю, а то значение аргумента, при котором значение выражения не превышает значения системной переменой TOL. Чтобы функция сработал правильно, необходимо переменной TOL присвоить новое значение, например 10 -7 , заменив им предопределенное значение (10 -3 ).

Для поиска корней полинома степени MathCAD содержит функцию: polyroots(V). Она возвращает вектор корней многочлена (полинома) степени n, коэффициенты которого находятся в векторе V, имеющим длину, равную n+1. Вектор коэффициентов заполняется в обратном порядке. Включая все коэффициенты многочлена, даже если они равны нулю.

При решении систем нелинейных уравнений используется специальный вычислительный блок, открываемый служебным словом Given и имеющий следующую структуру:

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

Рассмотрим пример решения системы нелинейных уравнений с помощью функции find.

Первое решение найдем, приняв ограничение x 0 (рис. 41 б). Следует отметить, что для решения системы уравнений указали начальные значения x и y (т.е. x:=-1 y:=1 )

Рис. 41.Пример решения системы нелинейных уравнений:а – первая часть решения при условии x>0; б – вторая часть решения при условии x

Рис. 42.Пример построения графика:а – задание функции, ее аргументов и вызов шаблона для построения графика, б – иллюстрация результата

На одном графике можно построить до 16 зависимостей. Для этого через запятую в место заполнения для наименования оси ординат (ось у) вносят наименования функций (рис. 43).

Рис. 43.Пример построения нескольких зависимостей на одном рисунке