Решение нелинейных уравнений
Лабораторная работа
«Решение нелинейных
уравнений»
Постановка
задачи
[0,1; 2]
Решить нелинейное уравнение шаговым методом, методом
половинного деления, методом Ньютона и методом простой итерации.
Вычислим шаг по формуле:
h=
h=0,1.
1.
Теоретическая часть
Шаговый
метод
Суть метода:
) Разбиение промежутка на число n интервалов.
) Вычисление таблицы значения функции при изменении величины
на интервале [a, b] с шагом h.
Из анализа таблицы на предмет смены знака выбираем интервал
изоляции корня.
Методы
уточнения корня
Метод
половинного деления
Суть метода:
Метод основан на последовательном сужении интервала, пока
длинна интервала не станет меньше заданной точности eps.
Алгоритм:
) Найти первый вариант корня по формуле: х=(а+b)/2. Где [a, b] -
интервал изоляции корня, найденный в шаговом методе.
) Затем нужно найти значение функции в точках «а» и «х».
) Проверить условие F(a)*F(x)<0,
если условие выполнено, то корень расположиться на отрезке [a, x], в этом
случае точку b нужно переместить в точку x, если условие не выполнено, то
корень находится на отрезке [x, b], в этом случае точку «а» нужно переместить в
точку «х».
) Перейти к первому пункту.
Алгоритм продолжается до тех пор пока не выполнится условие
F(x)<eps.
Метод
Ньютона
Условия сходимости корня:
) Начальное приближение к корню должно быть выбрано на одной
из границ по условию:
F(x0)*F» (x0)>0.
Геометрически это означает, что первая касательная,
проведенная в точке x0, к кривой F(x0) должна пересекать ось «х» на интервале
[a, b].
Выполняя построение касательных в точках (xi, F(xi)) - получаем
последовательность {xi+1} до тех пор, пока не выполнится критерий
точности.
Метод
простой итерации
Метод простой итерации основан на замене исходного уравнения
F(x)=0 эквивалентным уравнением x=S(x) которое получается из исходного
уравнения, если мы выражаем из него «х».
Окончательное значения выбирается из нескольких вариантов
проверяемых условием |S’ (x)|<1 где «х» принадлежит интервалу [a, b].
.
Реализация в Mathcad
1) Задание диапазона значений Х от 0.1 до 2 с
шагом 0.1
) Описание функции f(x)
Ответ: 1.375
3.
Реализация в С++
Шаговый метод
Текст программы:
#include «stdafx.h»
#include <math.h>
#include <iostream>
#define n 20
#define co 0.000001
using namespace std;f (double x)
}main()
{xn, xk, h, a, b;(«vvedi xn,
xk\n»);>>xn>>xk;=fabs (xk-xn)/n;ma[n], mb[n];k=0; a=xn;
b=a+h;(b<=xk+h/100.)
{(f(a)*f(b)<0) {ma[k]=a; mb[k]=b; k++;}=b;
b=b+h;
}(k==0) printf («\n net solutions!\n»);{printf(«\n
number roots k=%d\n», k);(«\n intervalj:\n»);(«\n a \t b\n»);(int i=0; i<k;
i++) printf («\n % 5.2f \t % 5.2f\n», ma[i], mb[i]);
}st; cin>>st;
}
Вывод:
нелинейный уравнение mathcad итерация
4.
Метод Ньютона
Текст программы:
#include «stdafx.h»
#include <math.h>
#include <iostream>
#define n 100namespace std;f (double x)
{return sin (log(x)) - cos (log(x))+2*log(x);}f1
(double x)
{return (cos (log(x))+sin (log(x))+2)/x;
}f2 (double x)
{return (-2*sin (log(x))+1)/pow (x, 2);
}main()
{double a, b, c, x, xkor;eps=0.001;(«vvedi a,
b\n»);
// выбор начального приближения
if (f(a)*f2 (a)>0) x=a;x=b;(«\n nachalnoe
priblizhenie kornya x0=%1f \n», x);k=0;(fabs(f(x))>eps)
{k++; x=x-f(x)/f1 (x);
} xkor=x;(«\n koren x=%1f\n», xkor);(«\n chislo
shagov interacii po metody Nutona k=%d \n», k);st; cin>>st;
}
Вывод:
5.
Метод половинного деления
Текст программы:
#include «stdafx.h»
#include <math.h>
#include <iostream>
#define n 100namespace std;f (double x)
{return sin (log(x)) - cos (log(x))+2*log(x);
}main()
{double a, b, c, xkor;eps=0.001;(«vvedi a,
b\n»);>>a>>b;k=0;(fabs(b-a)>eps)
{k++;=(b+a)/2.;(f(a)*f(c)<=0) b=c;a=c;
}=(a+b)/2.;(«\n koren x=%6.3f\n», xkor);(«\n
number shagov interacii k=%d\n», k);st;>>st;
}
Вывод: