Смекни!
smekni.com

Комбинированый метод для вычисления корня уравнения

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<<"&bsol;nVvedite nachalnoe priblizhenie po metodu hord xh=";

cin>>xh;

cout<<"&bsol;nX-hord&bsol;t&bsol;tX-kasatelnih&bsol;tTochnost&bsol;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<<'&bsol;n'<<xh<<'&bsol;t'<<xk<<'&bsol;t'<<tochnost;

if(tochnost<0.001) break;

};

n++;

otvet=(xh+xk)/2;

cout<<"&bsol;n&bsol;nKolichestvo iteraciy="<<n;

cout<<'&bsol;n'<<'&bsol;n'<<"Koren uravneniya="<<otvet;

cin>>xk;

}