2.1 Цель работы:
Изучить комбинированный метод для вычисления действительного корня уравнения, уметь использовать данный метод для решения уравнений с использованием ЭВМ.
2.2 Расчётные формулы
Расчётная формула вычисления
-го приближения по методу касательных: .Расчётная формула вычисления
-го приближения по методу хорд: .Начальное приближение
для метода касательных выбирают в соответствии с условием: , если ,или
, если .Начальное приближение
для метода хорд тогда принимается , или соответственно.Процесс вычисления корня останавливается, когда выполняется условие:
,где
– заданная точность.За приближенное значение корня уравнения принимается:
.2.3 Подготовительная работа
Вычислить корень уравнения с точность
комбинированным методом.Графически отделим корни. Для этого данное уравнение запишем в виде . Строим графики функций и (рис. 2.1).
Рисунок 2.1
Точный корень уравнения
, отрезок [0;1] – интервал изоляции корня.Проверяем условия, гарантирующие единственность корня на [0;1] и сходимость метода:
непрерывна на [0;1] и не меняет знак:. непрерывна на [0;1] и не меняет знак:.
За начальное приближение для метода касательных берём
, для метода хорд .Процесс вычисления корня:
.
Условие не выполняется, процесс вычисления корня продолжается до достижения заданной точности
.Требуемая точность вычисления результата была достигнута за 2 итерации. Результат 0,607199.
2.4 Текст программной реализации
#include <iostream>
#include <math.h>
using namespace std;
double f(double x)
{
return 3*x-cos(x)-1;
}
double fw(double x)
{
return 3+sin(x);
}
void main()
{
double xk, xh, tochnost, otvet;
cout<<"Vvedite nachalnoe priblizhenie po metodu kasatelnih xk=";
cin>>xk;
cout<<"\nVvedite nachalnoe priblizhenie po metodu hord xh=";
cin>>xh;
cout<<"\nX-hord\t\tX-kasatelnih\tTochnost\n-----------------------------------";
int n;
for(n=0; n<20; n++)
{
xh -= f(xh)*(xk-xh)/(f(xk)-f(xh));
xk -= f(xk)/fw(xk);
tochnost=fabs(xh-xk);
cout<<'\n'<<xh<<'\t'<<xk<<'\t'<<tochnost;
if(tochnost<0.001) break;
};
n++;
otvet=(xh+xk)/2;
cout<<"\n\nKolichestvo iteraciy="<<n;
cout<<'\n'<<'\n'<<"Koren uravneniya="<<otvet;
cin>>xk;
}