Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_лаб_5.doc
Скачиваний:
6
Добавлен:
21.09.2019
Размер:
629.25 Кб
Скачать

Void Vych_Int(double a,double b,double eps,

double(*pf)(double),double &I,int &k);

//прототип функции вычисления интеграла

// по методу левых прямоугольников

Void Sum(double a,double b,double h,

double (*pf)(double),double &S);

//прототипы подынтегральных функций

double f1 (double);

double f2 (double);

void main ()

{ double a, b, eps; // отрезок интегрирования, точность

double Int; // значение интеграла

int K_iter; // количество итераций

cout << "Input a, b, eps"<<endl;

cin >> a >> b >> eps;

//вычисление интеграла для f1

Vych_Int(a, b, eps, &f1, Int, k_iter);

cout << "Integral for f1 =" << Int <<

" K_iter= "<< K_iter << endl;

//вычисление интеграла для f2

Vych_Int(a, b, eps, &f2, Int, k_iter);

cout << "Integral for f2 =" << Int <<

" K_iter = " << K_iter << endl;

}

// подынтегральные функции

double f1 (double x)

{

return cos (x) / exp(0.3 * log(x));

}

double f2 (double x)

{

return cos (x * x * x) / sqrt(sqrt(x));

}

// функция вычисления интеграла

// по критерию двойного пересчета

Void Vych_Int (double a,double b,double eps,

double (*pf)(double),double &I,int &k)

{

int n = 4;//инициализация количества разбиений

//определение шага интегрирования

double h = (b - a) / n;

// переменные для значений сумм с шагом h и с шагом h/2

double S1 = 0, S2 = 0;

/вызов функции Sum c шагом h: в S1 возвращается сумма

Sum (a, b, h, pf, S1);

k=0;

// запуск процесса двойного пересчета

do

{ // сохраняем значение интеграла предыдущего шага

S2 = S1;

n *= 2; //увеличение количества отрезков разбиения и

//уменьшение шага интегрирования в 2 раза

h = (b - a) / n;

//вызов функции Sum с шагом h=h/2

Sum (a, b, h, pf, S1);

k++;

}

while (fabs(S1 - S2) > eps) ;

I = S1;

}

// функция выч/ интеграла по методу левых прямоугольников

Void Sum(double a, double b, double h,

double (*pf) (double), double &S)

{

double x, sum;

x = a;

sum = 0;

while (x < b)

{

sum = sum + (*pf)(x); //накопление суммы высот

x = x + h;

}

//вычисление площади

S = h * sum;

}

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

М етод деления отрезка пополам

  1. Определяем середину отрезка [A, B]. = (A+B)/2 и вычисляем функцию .

  2. Выбираем какую из двух частей отрезка взять для дальнейшего уточнения корня. Если левая часть уравнения F(X) есть непрерывная функция аргумента Х, то корень будет находится в той половине отрезка, на концах которой F(X) имеет разные знаки (на рисунке это [A, ]).

  3. Для очередного шага уточнения точку В перемещаем в середину отрезка и продолжаем процесс деления как с первоначальным отрезком [A, B].

  4. Итерационный процесс продолжаем до тех пор, пока интервал [A, B] не станет меньше заданной погрешности либо пока значение заданной функции в точке Х не станет меньше заданной погрешности .

a-b<eps либо  f(x) <eps

М етод хорд

  1. Интeрвал определяется графическим методом, очередное приближение берется в точке Х1, где пресекает ось абсцисс прямая линия проведенная через точки F(A) и F(В).

  2. В качестве нового интервала для продолжения итерационного процесса выбираем тот из отрезков [A, X1] или [X1, В], на концах которого функция принимает значения с разными знаками.

  3. Итерационный процесс заканчивается по условию:

a-b<eps либо  f(x) <eps

  1. Уравнение прямой линии, проходящей через точки F1= F(A) и F2= F(В): Y(X)=K*X+C.

Коэффициенты К и С находятся из следующих уравнений:

F1=K*A+C, F2=K*B+C; ; C=F1-K*A;

Точку пресечения прямой Y(X) c OX находят из уравнения Y(X)=0;

или

Метод Ньютона (касательных)

  1. Пусть графическим методом определено начальное приближение X0 к корню

  2. В точке X0 вычислим левую часть уравнения F0=F(X0), а также F`(X0)=tg()

  3. Следующее приближение к корню найдем в точке X1, где касательная к функции F(X), проведенная из точки (X0, F0), пресекает ось абсцисс.

  4. С читаем точку X1 в качестве начальной и продолжаем итерационный процесс. Таким образом можно приближаться к корню. С каждой итерацией расстояние между очередным Xk+1 и предыдущим Xk приближениями к корню будут уменьшаться. Процесс уточнения заканчивается, когда когда выполняется условие: либо  F(xk) <eps

Итерационные формулы: