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

Содержание

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

Обозначим черезНелинейные уравнения и их решение вектор неизвестных и определим вектор-функциюНелинейные уравнения и их решение Тогда система (1) записывается в виде уравнения:

Нелинейные уравнения и их решение Теперь вернёмся к всеми любимому Python и отметим его первенство среди языков программирования, которые хотят изучать [1]. Нелинейные уравнения и их решение

Этот факт является дополнительным стимулом рассмотрения числительных методов именно на Python. Однако, среди любителей Python бытует мнение, что специальные библиотечные функции, такие как scipy.optimize.root, spsolve_trianular, newton_krylov, являются самым лучшим выбором для решения задач численными методами.

С этим трудно не согласится хотя бы потому, что в том числе и разнообразие модулей подняло Python на вершину популярности. Однако, существуют случаи, когда даже при поверхностном рассмотрении использование прямых известных методов без применения специальных функций библиотеки SciPy тоже дают неплохие результаты. Иными словами, новое- это хорошо забытое старое. Так, в публикации [2], на основании проведенных вычислительных экспериментов, доказано, что библиотечная функция newton_krylov, предназначенная для решения больших систем нелинейных уравнений, имеет в два раза меньшее быстродействие, чем алгоритм TSLS+WD (two-step least squares), реализованный средствами библиотеки NumPy.

Целью настоящей публикации является сравнение по числу итераций, быстродействию, а главное, по результату решения модельной задачи в виде системы из ста нелинейных алгебраических уравнений при помощи библиотечной функции scipy.optimize.root и методом Ньютона, реализованного средствами библиотеки NumPy.

Возможности решателя scipy.optimize.root для численного решения систем алгебраических нелинейных уравнений

Библиотечная функция scipy.optimize.root выбрана в качестве базы сравнения, потому что имеет обширную библиотеку методов, пригодных для сравнительного анализа.

scipy.optimize.root(fun, x0, args=(), method='hybr', jac=None, tol=None,callback=None, ptions=None)

fun — Векторная функция для поиска корня. x0 –Начальные условия поиска корней

method:

hybr -используется модификация Пауэлл гибридный метод; lm – решает системы нелинейных уравнений методом наименьших квадратов. Как следует из документации [3] методы broyden1, broyden2, anderson, linearmixing, diagbroyden, excitingmixing, krylov являются точными методами Ньютона. Остальные параметры являются «не обязательными» и с ними можно ознакомится в документации.

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

Приведенный далее материал действительно можно прочитать в литературе, например в [4], но я уважаю своего читателя и для его удобства приведу вывод метода по возможности в сокращенном виде. Те, кто не любит формулы, этот раздел пропускают.

В методе Ньютона новое приближение для решения системы уравнений (2) определяется из решения системы линейных уравнений:

Нелинейные уравнения и их решение Определим матрицу Якоби: Нелинейные уравнения и их решение Запишем(3) в виде: Нелинейные уравнения и их решение Многие одношаговые методы для приближенного решения (2) по аналогии с двухслойными итерационными методами для решения систем линейных алгебраических уравнений можно записать в виде: Нелинейные уравнения и их решение

где — итерационные параметры, a — квадратная матрица n х n, имеющая обратную.

При использовании записи (6) метод Ньютона (5) соответствует выбору:

Система линейных уравнений (5) для нахождения нового приближения может решаться итерационно. В этом случае мы имеем двухступенчатый итерационный процесс с внешними и внутренними итерациями. Например, внешний итерационный процесс может осуществляться по методу Ньютона, а внутренние итерации — на основе итерационного метода Зейделя

При решении систем нелинейных уравнений можно использовать прямые аналоги стандартных итерационных методов, которые применяются для решения систем линейных уравнений. Нелинейный метод Зейделя применительно к решению (2) дает:

  • (7)
  • Основные вычислительные сложности применения метода Ньютона для приближенного решения систем нелинейных уравнений связаны с необходимостью решения линейной системы уравнений с матрицей Якоби на каждой итерации, причем от итерации к итерации эта матрица меняется. В модифицированном методе Ньютона матрица Якоби обращается только один раз:
  • (8)

В этом случае каждую компоненту нового приближения из решения нелинейного уравнения, можно получить на основе метода простой итерации и метода Ньютона в различных модификациях. Тем самым снова приходим к двухступенчатому итерационному методу, в котором внешние итерации проводятся в соответствии с методом Зейделя, а внутренние — с методом Ньютона.

Выбор модельной функции

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

Привожу следующее решение для модельной функции: n=100
def f(x):
f = zeros([n])
for i in arange(0,n-1,1):
f[i] = (3 + 2*x[i])*x[i] — x[i-1] — 2*x[i+1] — 2
f [0] = (3 + 2*x[0] )*x[0] — 2*x[1] — 3
f[n-1] = (3 + 2*x[n-1] )*x[n-1] — x[n-2] — 4
return f Функция f создаёт систему из n нелинейных уравнений, решение которой не зависит от числа уравнений и для каждой из n переменных равно единице.

Программа для тестирования на модельной функции c результатами решения системы алгебраических нелинейных уравнений с помощью библиотечной функции optimize.root для разных методов отыскания корней

from numpy import*
from scipy import optimize
import time
ti = time.

clock()
n=100
def f(x):
f = zeros([n])
for i in arange(0,n-1,1):
f[i] = (3 + 2*x[i])*x[i] — x[i-1] — 2*x[i+1] — 2
f [0] = (3 + 2*x[0] )*x[0] — 2*x[1] — 3
f[n-1] = (3 + 2*x[n-1] )*x[n-1] — x[n-2] — 4
return f
x0 =zeros([n])
sol = optimize.

root(f,x0, method='krylov')
print('Solution:
', sol.x)
print('Krylov method iteration = ',sol.nit)
print('Optimize root time', round(time.

clock()-ti,3), 'seconds') Только один из методов, приведенных в документации [3] прошёл тестирование по результату решения модельной функции, это метод 'krylov'. Решение для n=100: Solution: [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.

1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] Krylov method iteration = 4219 Optimize root time 7.239 seconds: Решение для n=200Solution: [1.00000018 0.99999972 0.99999985 1.00000001 0.99999992 1.00000049 0.99999998 0.99999992 0.99999991 1.

00000001 1.00000013 1.00000002 0.9999997 0.99999987 1.00000005 0.99999978 1.0000002 1.00000012 1.00000023 1.00000017 0.99999979 1.00000012 1.00000026 0.99999987 1.00000014 0.99999979 0.99999988 1.00000046 1.00000064 1.00000007 1.00000049 1.00000005 1.00000032 1.00000031 1.00000028 0.99999992 1.0000003 1.0000001 0.99999971 1.00000023 1.00000039 1.0000003 1.

00000013 0.9999999 0.99999993 0.99999996 1.00000008 1.00000016 1.00000034 1.00000004 0.99999993 0.99999987 0.99999969 0.99999985 0.99999981 1.00000051 1.0000004 1.00000035 0.9999998 1.00000065 1.00000061 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.

0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.

0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.0000006 1.00000059 1.00000056 1.00000047 1.00000016 1.00000018 0.99999988 1.00000061 1.00000002 1.00000033 1.00000034 1.0000004 1.00000046 1.00000009 1.00000024 1.00000017 1.00000014 1.00000054 1.00000006 0.99999964 0.99999968 1.00000005 1.00000049 1.

0000005 1.00000028 1.00000029 1.00000027 1.00000027 0.9999998 1.00000005 0.99999974 0.99999978 0.99999988 1.00000015 1.00000007 1.00000005 0.99999973 1.00000006 0.99999995 1.00000021 1.00000031 1.00000058 1.00000023 1.00000023 1.00000044 0.99999985 0.99999948 0.99999977 0.99999991 0.99999974 0.99999978 0.99999983 1.0000002 1.00000016 1.00000008 1.00000013 1.

00000007 0.99999989 0.99999959 1.00000029 1.0000003 0.99999972 1.00000003 0.99999967 0.99999977 1.00000017 1.00000005 1.00000029 1.00000034 0.99999997 0.99999989 0.99999945 0.99999985 0.99999994 0.99999972 1.00000029 1.00000016] Krylov method iteration = 9178 Optimize root time 23.397 seconds Вывод: С увеличением числа уравнений вдвое заметно появление ошибок в решении. При дальнейшем увеличении n решение становится не приемлемым, что возможно из-за автоматической адаптации к шагу, эта же причина резкого падения быстродействия. Но это только моё предположение.

Программа для тестирования на модельной функции c результатами решения системы алгебраических нелинейных уравнений с помощью программы написанной на Python 3 с учётом соотношений (1)-(8) для отыскания корней по модифицированному методу Ньютона

Программа отыскания корней по модифицированному методу Ньютонаfrom numpy import*
import time
ti = time.clock()
def jacobian(f, x):
h = 1.

0e-4
n = len(x)
Jac = zeros([n,n])
f0 = f(x)
for i in arange(0,n,1):
tt = x[i]
x[i] = tt + h
f1= f(x)
x[i] = tt
Jac [:,i] = (f1 — f0)/h
return Jac, f0
def newton(f, x, tol=1.

0e-9):
iterMax = 50
for i in range(iterMax):
Jac, fO = jacobian(f, x)
if sqrt(dot(fO, fO) / len(x)) < tol: return x, i dx = linalg.

solve(Jac, fO)
x = x — dx
print («Too many iterations for the Newton method»)
n=100
def f(x):
f = zeros([n])
for i in arange(0,n-1,1):
f[i] = (3 + 2*x[i])*x[i] — x[i-1] — 2*x[i+1] — 2
f [0] = (3 + 2*x[0] )*x[0] — 2*x[1] — 3
f[n-1] = (3 + 2*x[n-1] )*x[n-1] — x[n-2] — 4
return f
x0 =zeros([n])
x, iter = newton(f, x0)
print ('Solution:
', x)
print ('Newton iteration = ', iter)
print('Newton method time', round(time.clock()-ti,3), 'seconds') Решение для n=100: Solution: [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] Newton iteration = 13 Newton method time 0.496 seconds Решение для n=200: Solution: [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] Newton iteration = 14 Newton method time 1.869 seconds Чтобы убедиться в том, что программа действительно решает систему, перепишем модельную функцию для ухода от корня со значением 1 в виде: n=10
def f(x):
f = zeros([n])
for i in arange(0,n-1,1):
f[i] = (3 + 2*x[i])*x[i]*sin([i]) — x[i-1] — 2*x[i+1] — 2+e**-x[i]
f [0] = (3 + 2*x[0] )*x[0] — 2*x[1] — 3
f[n-1] = (3 + 2*x[n-1] )*x[n-1] — x[n-2] — 4
return f Получим: Solution: [ 0.96472166 0.87777036 0.48175823 -0.26190496 -0.63693762 0.49232062 -1.31649896 0.6865098 0.89609091 0.98509235] Newton iteration = 16 Newton method time 0.046 seconds

Читайте также:  Относительная частота, формулы и примеры

Вывод: Программа работает и при изменении модельной функции.

Теперь вернёмся к начальной модельной функции и проверим более широкий диапазон для n, например в 2 и 500. n=2 Solution: [1. 1.] Newton iteration = 6 Newton method time 0.048 seconds n=500n=500Solution: [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] Newton iteration = 15 Newton method time 11.754 seconds

Выводы:

Источник: https://habr.com/post/419453/

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



Статья посвящена изучению методов решения нелинейных уравнений, в том числе, с использованием системы автоматизированного проектирования MathCAD. Рассмотрены шаговый метод, методы половинного деления и Ньютона, приведены подробные алгоритмы применения данных методов, а также проведен сравнительный анализ указанных методов.

  • Ключевые слова: нелинейные уравнения, прикладная математика, САПР MathCAD, метод Ньютона, шаговый метод, метод дихотомии.
  • Цель работы: изучить методы решения нелинейных уравнений с одним неизвестным и апробировать их в опытно-экспериментальной работе.
  • Задачи работы:
  1. Проанализировать специальную литературу и выбрать наиболее рациональные способы решения нелинейных уравнений, позволяющие глубоко изучить и усвоить данную тему всем выпускникам средней школы.
  2. Разработать некоторые аспекты методики решения нелинейных уравнений с применением ИКТ.
  3. Изучить методы решения нелинейных уравнений:
  1. ‒ Шаговый метод
  2. ‒ Метод деления пополам
  3. ‒ Метод Ньютона
  4. ‒ PTC Mathcad
  5. Введение.

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

Например, исследование ряда актуальных задач математической физики приводит к необходимости решения нелинейных уравнений. Решение нелинейных уравнений необходимо в нелинейной оптике, физике плазмы, теории сверхпроводимости и физике низких температур.

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

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

Шаговый метод.

Пусть требуется решить нелинейное уравнение вида уравнение F(x)=0. Предположим также, что нам задан некоторый интервал поиска [x0,x1]. Требуется найти интервал [а,b] длиной h, содержащий первый корень уравнения, начиная с левой границы интервала поиска.

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

Рис. 1. Шаговый метод

Решить подобную задачу можно несколькими способами. Шаговый метод является наиболее простым из численных методов решения неравенств, но для достижения большой точности необходимо существенно уменьшить шаг, а это сильно увеличивает время расчётов. Алгоритм решения уравнений с помощью данного метода состоит из двух этапов.

I этап. Отделение корней.

На этом этапе определяются участки, на каждом из которых находится только один корень уравнения. Есть несколько вариантов реализации этого этапа:

  • Подставляем значения X (желательно с каким-то достаточно мелким шагом) и смотрим где функция сменит знак. Если функция сменила знак, это значит, что на участке между предыдущим и текущим значением X лежит корень (если функция не меняет характер возрастания/убывания, то можно утверждать, что корень на этом интервале один).
  • Графический метод. Строим график и оцениваем на каких интервалах лежит один корень.
  • Исследуем свойства конкретной функции.

II этап. Уточнение корней.

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

Метод половинного деления

Быстрый и достаточно простой численный метод решения уравнений, основанный на последовательном сужении интервала, содержащего единственный корень уравнения F(x)=0 до того времени, пока не будет достигнута заданная точность Е.

Данный метод обычно используется при решении квадратных уравнений и уравнений высших степеней.

Однако у данного метода есть существенный недостаток — если на отрезке [а,b] содержится более одного корня, то с его помощью не удастся добиться хороших результатов.

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

Рис. 2. Метод дихотомии

  • Алгоритм данного метода следующий:
  • ‒ Определить новое приближение корня х в середине отрезка [а;b]: х=(а+b)/2.
  • ‒ Найти значения функции в точках а и х: F(a) и F(x).

‒ Проверить условие F(a)*F(x) < 0. Если условие выполнено, то корень расположен на отрезке [а;х]. В этом случае необходимо точку b переместить в точку х (b=х). Если условие не выполнено, то корень расположен на отрезке [х;b]. В этом случае необходимо точку а переместить в точку х (а=х).

‒ Перейти к пункту 1 и вновь поделить отрезок пополам. Алгоритм продолжить до того времени, пока не будет выполнено условие |F(x)| < Е.

Метод Ньютона

Самый точный из численных методов решения; подходит для решения очень сложных уравнений, но усложняется необходимостью вычисления производных на каждом шаге. заключается в том, что если xn — некоторое приближение к корню уравнения Нелинейные уравнения и их решение, то следующее приближение определяется как корень касательной к функции f(x), проведенной в точке xn.

Читайте также:  Дифференциальные уравнения с разделяющимися переменными

Уравнение касательной к функции f(x) в точке xnимеет вид:

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

В уравнении касательной положим y = 0 и x = xn+1.

Тогда алгоритм последовательных вычислений в методе Ньютона состоит в следующем:

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

Сходимость метода касательных квадратичная, порядок сходимости равен 2.

Таким образом, сходимость метода касательных Ньютона очень быстрая.

Без всяких изменений метод обобщается на комплексный случай. Если корень xiявляется корнем второй кратности и выше, то порядок сходимости падает и становится линейным.

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

  1. Метод Ньютона (метод касательных) обычно применяется в том случае, если уравнение f(x) = 0 имеет корень , и выполняются условия:
  2. 1) функция y= f(x) определена и непрерывна при ;
  3. 2) f(a)·f(b) < 0 (функция принимает значения разных знаков на концах отрезка [a;b]);

3) производные f'(x) и f''(x) сохраняют знак на отрезке [a;b] (т. е. функция f(x) либо возрастает, либо убывает на отрезке [a;b], сохраняя при этом направление выпуклости);

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

Смысл метода заключается в следующем: на отрезке [a;b] выбирается такое число x0, при котором f(x0) имеет тот же знак, что и f''(x0), т. е. выполняется условие f(x0)·f''(x) > 0. Таким образом, выбирается точка с абсциссой x0, в которой касательная к кривой y=f(x) на отрезке [a;b] пересекает ось Ox. За точку x0 сначала удобно выбирать один из концов отрезка.

Рассмотрим данный алгоритм на конкретном примере.

Пусть нам дана возрастающая функция y = f(x) =x2–2, непрерывная на отрезке (0;2), и имеющая f '(x) =2x>0 и f ''(x) = 2> 0.

В нашем случае уравнение касательной имеет вид: y-y0=2×0·(x-x0). В качестве точки x0 выбираем точку B1(b; f(b)) = (2,2). Проводим касательную к функции y = f(x) в точке B1, и обозначаем точку пересечения касательной и оси Ox точкой x1. Получаем уравнение первой касательной:y-2=2·2(x-2), y=4x-6. Точка пересечения касательной и оси Ox: x1 =

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

Рис. 3. Построение первой касательной к графику функции f(x)

Затем находим точку пересечения функции y=f(x) и перпендикуляра, проведенного к оси Ox через точку x1, получаем точку В2 =(1.5; 0.25). Снова проводим касательную к функции y = f(x) в точке В2, и обозначаем точку пересечения касательной и Ox точкой x2.

Уравнение второй касательной: y-2.25=2*1.5(x-1.5), y = 3x — 4.25. Точка пересечения касательной и оси Ox: x2 = .

Затем находим точку пересечения функции y=f(x) и перпендикуляра, проведенного к оси Ox через точку x2, получаем точку В3 и так далее.

В3 = ()

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

Рис. 4. Построение второй касательной к графику функции f(x)

Первое приближение корня определяется по формуле:

= 1.5.

  • Второе приближение корня определяется по формуле:
  • =
  • Третье приближение корня определяется по формуле:

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

  1. Таким образом, i-ое приближение корня определяется по формуле:
  2. Вычисления ведутся до тех пор, пока не будет достигнуто совпадение десятичных знаков, которые необходимы в ответе, или заданной точности e — до выполнения неравенства |xi-xi-1| < e.

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

  • Решение уравнения при помощи САПР MathCAD
  • Для простейших уравнений вида f(x) = 0 решение в MathСAD находится с помощью функции root.

root(f(х1, x2, …), х1, a, b)возвращает значение х1, принадлежащее отрезку [a, b], при котором выражение или функция f(х) обращается в 0. Оба аргумента этой функции должны быть скалярами. Функция возвращает скаляр.

Рис. 5. Решение нелинейного уравнения в MathCAD (функция root)

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

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

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

Рис. 6. Решение нелинейного уравнения в MathCAD (функция solve)

Заключение

В ходе исследования были рассмотрены как математические методы, так и решение уравнений с использованием программирования в САПР MathCAD. Различные методы имеют свои достоинства и недостатки. Следует отметить, что применение того или иного метода зависит от начальных условий заданного уравнения.

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

Их же хорошо решать методом Ньютона.

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

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

Литература:

  1. Митяков С. Н. Информатика. Комплекс учебно-методических материалов. — Н. Новгород: Нижегород. гос. техн. ун-т.,2006
  2. Вайнберг М. М., Треногин В. А. Теория ветвления решений нелинейных уравнений. М.: Наука, 1969. — 527 с.
  3. Бронштейн И. Н., Семендяев К. А. Справочник по математике для инженеров и учащихся ВТУЗов — М.: Наука, 1986.
  4. Омельченко В. П., Курбатова Э. В. Математика: учебное пособие. — Ростов н/Д.: Феникс, 2005.
  5. Савин А. П. Энциклопедический словарь юного математика. — М.: Педагогика, 1989.
  6. Корн Г., Корн Т. Справочник по математики для научных работников и инженеров. — М.: Наука, 1973.
  7. Кирьянов Д. Mathcad 15/MathcadPrime 1.0. — С-Пб.: БХВ-Петербург, 2012.
  8. Черняк А., Черняк Ж., Доманова Ю. Высшая математика на базе Mathcad. Общий курс. — С-Пб.: БХВ-Петербург, 2004.
  9. Поршнев С., Беленкова И. Численные методы на базе Mathcad. — С-Пб.: БХВ-Петербург, 2012.

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

Источник: https://moluch.ru/young/archive/6/414/

Численные методы решения нелинейных уравнений

 

  • Пусть имеется уравнение вида
  • f(x)= 0
  • где f(x) — заданная алгебраическая или трансцендентная функция.
  • Решить уравнение — значит найти все его корни, то есть те значения x, которые обращают уравнение в тождество.

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

Поэтому ставится задача найти такое приближенное значение корня xПP, которое отличается от точного значения корня x* на величину, по модулю не превышающую указанной точности (малой положительной величины) ε, то есть

  1. │x* – xпр │< ε
  2. Величину ε также называют допустимой ошибкой, которую можно задать по своему усмотрению.

Этапы приближенного решения нелинейных уравнений

Приближенное решение уравнения состоит из двух этапов:

  • Отделение корней, то есть нахождение интервалов из области определения функции f(x), в каждом из которых содержится только один корень уравнения f(x)=0.
  • Уточнение корней до заданной точности.

Отделение корней

Отделение корней можно проводить графически и аналитически.
Для того чтобы графически отделить корни уравнения, необходимо построить график функции f(x). Абсциссы точек его пересечения с осью Ox являются действительными корнями уравнения. Для примера рассмотрим задачу решения уравнения

Нелинейные уравнения и их решение
где угол x задан в градусах. Указанное уравнение можно переписать в виде
Нелинейные уравнения и их решение
Для графического отсечения корней достаточно построить график функцииНелинейные уравнения и их решение
Из рисунка видно, что корень уравнения лежит в промежутке x∈(6;8).

Аналитическое отделение корней

Аналитическое отделение корней основано на следующих теоремах.
Теорема 1. Если непрерывная функция f(x) принимает на концах отрезка [a; b] значения разных знаков, т.е.
Нелинейные уравнения и их решение
то на этом отрезке содержится по крайней мере один корень уравнения.

Теорема 2. Если непрерывная на отрезке [a; b] функция f(x) принимает на концах отрезка значения разных знаков, а производная f'(x) сохраняет знак внутри указанного отрезка, то внутри отрезка существует единственный корень уравнения f(x) = 0.

Уточнение корней

Для уточнения корней может использоваться один из следующих методов:

Метод последовательных приближений (метод итераций)

Метод итерации — численный метод решения математических задач, используемый для приближённого решения алгебраических уравнений и систем.

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

Характер сходимости и сам факт сходимости метода зависит от выбора начального приближения решения.
Функциональное уравнение может быть записано в виде

Функцию f(x) называют сжимающим отображением.

Последовательность чисел x0, x1 ,…, xn называется итерационной, если для любого номера n>0 элемент xn выражается через элемент xn-1 по рекуррентной формуле

Нелинейные уравнения и их решение
а в качестве x0 взято любое число из области задания функции f(x).

Реализация на C++ для рассмотренного выше примера

Нелинейные уравнения и их решение
Уравнение может быть записано в формеНелинейные уравнения и их решение
123456789101112131415161718192021

22

#define _USE_MATH_DEFINES#include #include using namespace std;double find(double x, double eps){

  double rez; int iter = 0;

  cout 

Источник: https://prog-cpp.ru/digital-find/

Нелинейные уравнения и системы уравнений. Методы их решения

  • Одной из важных задач прикладной математики является задача решения нелинейных уравнений, встречающихся в разных областях научных исследований.
  • Под нелинейными уравнениями (nonlinear equations) понимаются алгебраические и трансцендентные уравнения с одним неизвестным в следующем виде:
  • ,
  • где  — действительное число,  — нелинейная функция.
  •          Под системой нелинейных уравнений понимается система алгебраических и трансцендентных уравнений в следующем виде:

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

  1. где {} — действительные числа, {Нелинейные уравнения и их решение…} — нелинейные функции.
  2. Алгебраическое уравнение — это уравнение содержащие только алгебраические функции, которое можно представить многочленом n‐ой степени с действительными коэффициентами (целые, рациональные, иррациональные) в следующем виде:
  3. Нелинейные уравнения и их решение.
Читайте также:  Формула метилового спирта в химии

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

  • Решением нелинейного уравнения (или системы нелинейных уравнений) называют совокупность (группа) чисел Нелинейные уравнения и их решение, которые, будучи подставлены на место неизвестных , обращают каждое уравнение (или систему уравнений) в тождество:
  • .
  • Для решения нелинейных уравнений (или систем нелинейных уравнений) существует несколько методов решения: графические, аналитические и численные методы.
  • Графические методы наименее точны, но позволяют в сложных уравнениях определить наиболее приближенные значения, с которых в дальнейшем можно начинать находить более точные решения уравнений.

Аналитические методы (или прямые методы) позволяют определить точные значения решения уравнений. Данный метод позволяет записать корни в виде некоторого соотношения (формул).

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

В таких случаях обращаются к численным методам, позволяющим получить приближенное значение корня с любой заданной точностью.

  1. Численные методы решения нелинейных уравнений – это итерационный процесс расчета, который состоит в последовательном уточнении начального приближения значений корней уравнения (системы уравнений). При численном подходе задача о решении нелинейных уравнений разбивается на два этапа:
  2. — локализация (отделение) корней
  3. — уточнение корней.
  4. › Под локализацией корней  понимается процесс отыскания приближенного значения корня или нахождение таких отрезков, в пределах которых содержится единственное решение
  5. › Под уточнением корней понимается процесс вычисления приближенных значений корней с заданной точностью по любому численному методу решения нелинейных уравнений.

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

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

Нелинейные уравнения и их решение.

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

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

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

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

Локализация корней.

› Локализация корней аналитическим способом

Для отделения корней уравнения необходимо иметь критерий, позволяющий убедится, что, во-первых, на рассматриваемом отрезке  имеется корень, а, во-вторых, что этот корень единственный на указанном отрезке. Если функция  непрерывна на отрезке ,  а на концах отрезка её значения имеют разные знаки , то на этом отрезке расположен, по крайней мере, один корень.

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

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

› Локализация корней табличным способом

Допустим, что все интересующие нас корни уравнения  находятся на отрезке . Выбор этого отрезка (интервала поиска корней) может быть сделан, например, на основе анализа конкретной физической или иной задачи.

Будем вычислять значения  , начиная с точки , двигаясь вправо с некоторым шагом h.

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

Надежность рассмотренного подхода к отделению корней уравнений зависит как от характера функции , так и от выбранной величины шага h.

Действительно, если при достаточно малом значении h () на границах текущего отрезка   функция  принимает значения одного знака, то естественно ожидать, что уравнение   корней на этом отрезке не имеет.

Однако, это не всегда так: при несоблюдении условия монотонности функции  на отрезке  могут оказаться корни уравнения (рис. 1, а). Также несколько корней на отрезке могут оказаться и при выполнении условия Нелинейные уравнения и их решение (рис. 1, б). Предвидя подобные ситуации, следует выбирать достаточно малые значения h.

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

Рис. 1. Варианты поведения функции на интервале локализации корня

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

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

Так, например, если в качестве приближенного значения корня взять середину отрезка локализации, то абсолютная погрешность этого значения не будет превосходить половины шага поиска (h/2).

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

Поэтому при проведении численных экспериментов с варьированием параметров задачи, когда приходится многократно осуществлять поиск корней, подобный метод не годится для уточнения корней и используется только для отделения (локализации) корней, т.е. определения начальных приближений к ним. Уточнение корней проводится с помощью других, более экономичных методов.

  • Уточнение корней.
  • На данном этапе задача состоит в получении приближенного значения корня, принадлежащего отрезку , с заданной точностью (погрешностью) e. Это означает, что вычисленное значение корня  должно отличаться от точного  не более чем на величину e:
  • Существует большое количество численных методов решения нелинейных уравнений для уточнения корней, которые условно можно разделить:
  • › Методы решение уравнений с одним неизвестным. Основными представителями являются:
  • — метод половинного деления;
  • — метод хорд;
  • — метод простой итерации;
  • — метод Ньютона для уравнения с одним неизвестным;
  • — метод секущих;
  • — метод парабол (Метод Мюллера);
  • — Метод Ридерса;
  • — Метод Дэккера и Брэнта;
  • — Метод Лобачевского;

— и т.д.

  1. › Метода решения систем уравнений с несколькими неизвестными. Основными представителями являются:
  2. — метод простой итерации для системы уравнений;
  3. — метод Зейделя;
  4. — метод Ньютона для системы уравнений;
  5. — модифицированный метод Ньютона;
  6. — разностный метод Ньютона;
  7. — метод Ньютона с последовательной аппроксимацией матриц;
  8. — Метод Брауна;

— и т.д.

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

Источник: http://simenergy.ru/math-analysis/solution-methods/40-nle-intro

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

Уравнения, в которых содержатся неизвестные функции, произведенные в степень больше единицы, называются нелинейными. Например, y=ax+b – линейное уравнение, х^3 – 0,2x^2 + 0,5x + 1,5 = 0 – нелинейное (в общем виде записывается как F(x)=0).

Системой нелинейных уравнений считается одновременное решение нескольких нелинейных уравнений с одной или несколькими переменными.

Существует множество методов решения нелинейных уравнений и систем нелинейных уравнений, которые принято относить в 3 группы: численные, графические и аналитические. Аналитические методы позволяют определить точные значения решения уравнений.

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

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

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

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

Метод половинного деления.

Суть метода половинного деления заключается в делении интервала [a,b] пополам (с=(a+b)/2) и отбрасывании той части интервала, в которой отсутствует корень, т.е. условие F(a)xF(b)

Нелинейные уравнения и их решение
Рис.1. Использование метода половинного деления при решении нелинейных уравнений.

Рассмотрим пример. Необходимо решить уравнение х^3 – 0,2x^2 + 0,5x + 1,5 = 0 с точностью до e

В общем виде уравнение имеет вид: F(x)= х^3 – 0,2x^2 + 0,5x + 1,5
Разделим отрезок на 2 части: (a-b)/2 = (-1+0)/2=-0,5.
Если произведение F(a)*F(x)>0, то начала отрезка a переносится в x (a=x), иначе, конец отрезка b переносится в точку x (b=x). Полученный отрезок делим опять пополам и т.д. Весь произведенный расчет отражен ниже в таблице.

Нелинейные уравнения и их решение
Рис.2. Таблица результатов вычислений

  • Метод хорд.

В результате вычислений получаем значение с учетом требуемой точности, равной x=-0,946

При использовании метода хорд, задается отрезок [a,b], в котором есть только один корень с установленной точностью e. Через точки в отрезке a и b, которые имеют координаты (x(F(a);y(F(b)), проводится линия (хорда). Далее определяются точки пересечения этой линии с осью абсцисс (точка z).
Если F(a)xF(z)

Нелинейные уравнения и их решение
Рис.3. Использование метода хорд при решении нелинейных уравнений.

Рассмотрим пример. Необходимо решить уравнение х^3 – 0,2x^2 + 0,5x + 1,5 = 0 с точностью до e

В общем виде уравнение имеет вид: F(x)= х^3 – 0,2x^2 + 0,5x + 1,5 Найдем значения F(x) на концах отрезка [a,b]: F(-1) = — 0,2>0; F(0) = 1,5>0. Определим вторую производную F’’(x) = 6x-0,4.

  1. F’’(-1)=-6,4
    F’’(0)=-0,4
  2. На концах отрезка условие F(-1)F’’(-1)>0 соблюдается, поэтому для определения корня уравнения воспользуемся формулой:

Нелинейные уравнения и их решение
Нелинейные уравнения и их решение
Рис.4. Таблица результатов вычислений

  • В результате вычислений получаем значение с учетом требуемой точности, равной x=-0,946
  • Метод касательных (Ньютона)

Данный метод основывается на построении касательных к графику, которые проводятся на одном из концов интервала [a,b]. В точке пересечения с осью X (z1) строится новая касательная. Данная процедура продолжается до тех пор, пока полученное значение не будет сравним с нужным параметром точности e (F(zi)

Нелинейные уравнения и их решение
Нелинейные уравнения и их решение
Рис.6. Таблица результатов вычислений

В результате вычислений получаем значение с учетом требуемой точности, равной x=-0,946

Если материал был полезен, вы можете отправить донат или поделиться данным материалом в социальных сетях:

Источник: https://reshit.ru/Reshenie-nelineynyh-uravneniy

Учебник
Добавить комментарий