Как можно решить нелинейное уравнение в mathcad
Примеры решения нелинейных алгебраических уравнений
Все рассмотренные методы решения нелинейных алгебраических уравнений представляют собой итерационные процедуры, последовательно уточняющие значение корня по некоторому алгоритму или итерационной формуле. Поэтому любой метод может быть запрограммирован с помощью операторов цикла системы Mathcad, причем, видимо, следует использовать оператор while , так как конечное число циклов заранее неизвестно.
1. Метод деления отрезка пополам не имеет итерационной формулы, что приводит к наиболее сложному программному коду. Достоинство метода в том, что он безусловно сходится, если на заданном участке есть хотя бы один корень. Программный блок, реализующий метод деления отрезка пополам для поиска корня на интервале [a0, b0], может иметь вид:
2. Метод Ньютона (касательных) предполагает вычисление производной. Если левая часть решаемого уравнения задана аналитически функцией f (x), то производную можно вычислить средствами Mathcad, например:
Тогда программный код, реализующий метод Ньютона (касательных), может иметь вид:
3. В методе секущих проводится не касательная к функции f (x), а секущая через две точки до пересечения с осью абсцисс, поэтому требуется задание двух начальных приближений к корню:
4. Вариант простейшего программного кода, реализующего метод простой итерации с параметром:
5. Использование встроенной функции root для поиска приближенного значения корня уравнения f (x) = 0 предполагает оформление вычисления f (x) в виде функции, задание некоторого приближения и вызов стандартной функции root .
Параметры root – функция, вычисляющая f (x), и начальное приближение x. В качестве дополнительных параметров можно указать границы диапазона, в котором определяется корень.
6. Компактно оформить поиск решения уравнения можно, используя ключевое слово solve (вычислить) из панели «Символика». Solve имеет два поля–заполнителя:
В левом поле помещается выражение (в нашем случае функция f (x)), а в правом – имя аргумента, значение которого необходимо найти.
7. Не следует забывать о возможности приближенного решения алгебраических уравнений и систем с помощью функции Find .
Для численного решения задается некоторое начальное приближение для корня; решаемое уравнение в произвольной форме с использованием символа «равно» (Ctrl/=) помещается в блок Given , а затем вызывается функция Find для поиска корня.
Как можно решить нелинейное уравнение в mathcad
БлогNot. Методы решения нелинейных уравнений в MathCAD
Методы решения нелинейных уравнений в MathCAD
Реализуем для некоторого уравнения 4 наиболее популярных численных метода для решения нелинейных уравнений. При этом мы стремимся именно запрограммировать методы, а не воспользоваться встроенным инструментом Given. Find или функциями root , polyroot . Об этих способах решения почитайте, например, здесь.
Определим функцию уравнения f(x)=0 как функцию пользователя, интервал поиска решения зададим переменными a и 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] , меньшего ε :
Метод дихотомии в MathCAD
В методе простой итерации исходное уравнение 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:
Метод простой итерации (релаксации) в MathCAD
Если заданной сходимости нет в течение 10000 шагов, в подпрограмме предусмотрен аварийный выход.
Численный метод Ньютона решения нелинейного уравнения основан на формуле вида xk+1 = xk-f(xk)/f'(xk) , обеспечивающей наилучшую сходимость, но требующей дополнительного вычисления производной на каждом шаге. Так как производные для MathCAD — не проблема, можно всё сделать «в лоб»:
Метод Ньютона для решения нелинейного уравнения в MathCAD
Видно, что сходимость метода — на 2 порядка выше (погрешность найденного решения
Наконец, существует метод хорд, в котором кривая f(x) заменяется прямой линией (хордой), стягивающей точки (a, f(a)) и (b, f(b)) . Формула этого метода зависит от знака выражения f(a)*f»(a) , то есть, имеет два варианта:
Если f(a)*f»(a)>0 , то x0=b , xk+1=a-(f(a)(xk-a))/(f(xk)-f(a))
Если f(a)*f»(a)<0 , то x0=a , xk+1=xk-(f(xk)*(b-xk))/(f(b)-f(xk))
Вот примерная реализация на MathCAD, как и в предыдущих двух случаях, контролируется максимальное число итераций, равное 10000:
Метод хорд решения нелинейного уравнения в MathCAD
Видно, что сходимость метода оказалась в нашем случае не столь высока.
Подсчитать, сколько шагов какому методу потребовалось, можете сами, немного поменяв выдачу подпрограмм.
Решение уравнений в MathCad
Многие уравнения и системы из них не имеют аналитического решения. Однако они могут решаться численными методами с заданной погрешностью (не более значения, заданного системной переменной TOL). Для простых уравнений вида
решение находится с помощью функции:root(Выражение Имя переменной). Функция реализует вычисления итерационным методом, причем можно задать начальное значение переменой, это полезно, если возможны несколько решений и тогда выбор решения определяется выбором начального значения переменой. На рисунке 40 приведен пример применения функции root для вычисления корня уравнения.

Рис. 40.Пример решения уравнения с использованием функцииroot
Применяя функцию root надо помнить, что корень функции – это не то значение аргумента, при котором выражение равно нулю, а то значение аргумента, при котором значение выражения не превышает значения системной переменой TOL. Чтобы функция сработал правильно, необходимо переменной TOL присвоить новое значение, например 10 -7 , заменив им предопределенное значение (10 -3 ).
Для поиска корней полинома степени
MathCAD содержит функцию: polyroots(V). Она возвращает вектор корней многочлена (полинома) степени n, коэффициенты которого находятся в векторе V, имеющим длину, равную n+1. Вектор коэффициентов заполняется в обратном порядке. Включая все коэффициенты многочлена, даже если они равны нулю.
При решении систем нелинейных уравнений используется специальный вычислительный блок, открываемый служебным словом Given и имеющий следующую структуру:
Given
выражение с функцией find или miner.
Между функциями find и miner существует принципиальное различие. Функция find используется, когда решение реально существует (хотя и не является аналитическим), а функция miner пытается найти максимально приближение даже к несуществующему решению путем минимизации среднеквадратической погрешности решения.
Рассмотрим пример решения системы нелинейных уравнений с помощью функции find.

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


Рис. 41.Пример решения системы нелинейных уравнений:а – первая часть решения при условии x>0; б – вторая часть решения при условии x<0
Создание графиков
Графики создаются панелью инструментов Graph. В MathCAD можно построить графики 2 типов:
двумерные графики (декартовы и полярные графики);
трехмерные графики (линии уровня в трехмерном пространстве, трехмерная гистограмма, трехмерное множество точек, векторное поле).
Рассмотрим одну из процедур построения двумерного графика. Введем значения аргумента х как ранжированную переменную. Запишем функцию в зависимости от этого аргумента. Укажем место, где будет располагаться область графика. Выберем на панели Graph значок
. В обозначенном месте документа появится область графика с несколькими местами заполнителями. Введем в места заполнений на осях имена переменных и функций, которые должны быть изображены на графике (рис. 42). Вид графика можно изменить, изменяя его данные, форматируя его внешний вид или добавляя элементы оформления. Для форматирования графиков можно воспользоваться контекстным меню, выбравFormat (или «щелкнуть» по той области, форму которой планируется изменить).


Рис. 42.Пример построения графика:а – задание функции, ее аргументов и вызов шаблона для построения графика, б – иллюстрация результата
На одном графике можно построить до 16 зависимостей. Для этого через запятую в место заполнения для наименования оси ординат (ось у) вносят наименования функций (рис. 43).
Решение нелинейных уравнений в маткаде
Реализуем для некоторого уравнения 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 , имеющий следующую структуру:
Решаемое уравнение задается в виде равенства, в котором используется «жирный» знак равно, вводимый с палитры Логический .
Ограничения содержат равенства или неравенства, которым должен удовлетворять искомый корень.
Функция 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).