Материал: Larin_Anton_8383_cm_21_6

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Имея экспериментальное значение скорость сходимости метода видим, что скорость сходимости метода хорд линейна. Действительно, согласно

неравенству | − | < |

− |

порядок сходимости метода равен 1, т.е.

 

 

−1

 

 

линеен.

 

 

 

 

Теперь, имея приближение корня, примем ≈ 0.867084. С помощью

данного приближения

вычислим

= | − |, и оценим с

его помощью

чувствительность метода к ошибкам в исходных данных. При

будем

считать, что задача хорошо обусловлена – хор., иначе пл. – плохо. Результаты эксперимента занесены в табл. 2.

Выводы.

Проанализировав результаты применения метода простых итераций,

можно сказать, что при расчете данной функции он дает очень хорошие результаты, и сходится за приемлемое число итераций, которое соответствует теоретическому значению порядка.

По результатам эксперимента по определению обусловленности метода простых итераций можно оценить абсолютную обусловленность как значение в диапазоне (0.1; 1], что говорит о хорошей обусловленности метода. Из недостатков метода можно выделить дополнительные ограничения на начальные условия, в частности необходимость подбора функции ( ), соответствующую этим ограничениям.

6

Таблица 2 – Обусловленность метода при различных и

Значение

Значение

 

 

Значение

Значение

Значение

 

 

Значение

 

k

 

 

 

 

 

 

 

 

 

 

 

 

0.1

0.01

0.85

 

2

0.017084

хор.

 

 

 

 

 

 

 

 

 

0.01

0.01

0.87

 

3

0.002916

хор.

 

 

 

 

 

 

 

 

 

0.001

0.01

0.87

 

3

0.002916

пл.

 

 

 

 

 

 

 

 

 

0.0001

0.01

0.87

 

3

0.002916

пл.

 

 

 

 

 

 

 

 

 

0.00001

0.01

0.87

 

3

0.002916

пл.

 

 

 

 

 

 

 

 

 

0.000001

0.01

0.87

 

3

0.002916

пл.

 

 

 

 

 

 

 

 

 

0.1

0.001

0.853

 

2

0.014084

хор.

 

 

 

 

 

 

 

 

 

0.01

0.001

0.867

 

3

0.000084

хор.

 

 

 

 

 

 

 

 

 

0.001

0.001

0.867

 

3

0.000084

хор.

 

 

 

 

 

 

 

 

 

0.0001

0.001

0.867

 

3

0.000084

хор.

 

 

 

 

 

 

 

 

 

0.00001

0.001

0.867

 

3

0.000084

пл.

 

 

 

 

 

 

 

 

 

0.000001

0.001

0.867

 

3

0.000084

пл.

 

 

 

 

 

 

 

 

 

0.1

0.0001

0.8526

 

2

0.014484

хор.

 

 

 

 

 

 

 

 

 

0.01

0.0001

0.8671

 

3

0.000016

хор.

 

 

 

 

 

 

 

 

 

0.001

0.0001

0.8671

 

3

0.000016

хор.

 

 

 

 

 

 

 

 

 

0.0001

0.0001

0.8671

 

3

0.000016

хор.

 

 

 

 

 

 

 

 

 

0.00001

0.0001

0.8671

 

3

0.000016

пл.

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

 

ПРИЛОЖЕНИЕ А

ИСХОДНЫЙ КОД ПРОГРАММЫ

#include <stdio.h> #include <math.h> #include <stdlib.h> #include <iostream> #include <conio.h>

double delta;

#ifndef __NEWTON #define __NEWTON #endif

#ifndef __ITER #define __ITER #endif

#ifndef M_PI

#define M_PI 3.14159265358979323846 #endif // !M_PI

#ifndef FF(x)

#define FF(x) ( (M_PI * pow(x, M_PI + 7) + 2 * M_PI*pow(x, M_PI + 3) + M_PI * pow(x, M_PI - 1) + 4 * pow(x, 3)) / (pow(x, 8) + 2 * pow(x, 4) + 1) )

#define FFF(x) ( (PI2*pow(x, M_PI + 10) - M_PI * pow(x, M_PI + 10) + 3 * PI2*pow(x, M_PI + 6) - 3 * M_PI*pow(x, M_PI + 6) + 3 * PI2*pow(x, M_PI + 2) - 3 * M_PI*pow(x, M_PI + 2) - 20 * pow(x, 6) + PI2 * pow(x, M_PI - 2) - M_PI*pow(x,M_PI-2) + 12 * pow(x, 2)) / (pow(x, 12) + 3 * pow(x, 8) + 3 * pow(x, 4) + 1) )

#endif

extern double F(double); /******************************************************************/

/* Функция F(X) , задаваемая пользователем */

/******************************************************************/

#ifdef __NEWTON

extern double F1(double); /******************************************************************/

/* Производная функции F(X) , задаваемая пользователем */

/******************************************************************/

#endif

8

#ifdef __ITER

extern double PHI(double); /******************************************************************/

/*

Функция PHI(X) , задаваемая пользователем

*/

/*

Данная функция используется в методе

*/

/*

простых итераций

*/

/******************************************************************/

#endif

double Round(double, double); /******************************************************************/

/*

Функция Round (X,

Delta) , предназначена для округления

*/

/*

X

с точностью Delta

*/

/******************************************************************/

double BISECT(double, double, double, int&); /******************************************************************/

/*

Функция

BISECT предназначена для решения уравнения F(X)=0

*/

/*

методом

деления отрезка пополам. Использованы обозначения:

*/

/*

Left - левый конец промежутка

*/

/*

Right

- правый конец промежутка

*/

/*

Eps -

погрешность вычисления корня уравнения;

*/

/*

N - число итераций

*/

/******************************************************************/

double ITER(double, double, int&); /******************************************************************/

/*

Функция

ITER предназначена для решения уравнения F(X)=X

*/

/*

методом простой итерации. Использованы обозначения:

*/

/*

X0 - начальное приближение корня

*/

/*

Eps

-

погрешность вычисления корня уравнения;

*/

/*

N -

число итераций

*/

/******************************************************************/

double HORDA(double, double, double, int&); /******************************************************************/

/*

Функция

HORDA предназначена для решения уравнения F(x)=0

*/

/*

методом хорд. Использованы обозначения:

*/

/*

Left - левый конец промежутка

*/

/*

Right

- правый конец промежутка

*/

/*

Eps -

погрешность вычисления корня уравнения;

*/

/*

N - число итераций

*/

/******************************************************************/

9

double NEWTON(double, double, int&); /******************************************************************/

/*

Функция

NEWTON предназначена для решения уравнения F(X)=0

*/

/*

 

методом касательных. Использованы обозначения:

*/

/*

X

-

начальное приближение корня

*/

/*

Eps

- погрешность вычисления корня уравнения;

*/

/*

N

-

число итераций

*/

/******************************************************************/

double Round(double X, double Delta) { if (Delta <= 1E-9) {

puts("Неверное задание точности округления\n"); exit(1);

}

if (X > 0.0) {

return Delta * long(X / Delta + 0.5);

}else {

return Delta * long(X / Delta - 0.5);

}

}

double F(double x) {

// функция f(x)

extern double delta; double s;

long S;

s = pow(x, M_PI) - 1/(pow(x,4)+1);

s = Round(s, delta);

return s;

}

double F1(double x) {

// функция f'(x)

double f = (M_PI * pow(x, M_PI + 7) + 2 * M_PI*pow(x, M_PI + 3) + M_PI * pow(x, M_PI - 1) + 4 * pow(x, 3)) / (pow(x, 8) + 2 * pow(x, 4) + 1);

return f;

}

double PHI(double x) {

10

Источник: https://studfile.net/preview/15918976/