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