Лабораторная работа 6 / lab6/LR_6/ВМ_6.doc
Министерство образования и науки РФ
Санкт-Петербургский государственный электротехнический университет
ЛЭТИ
кафедра МОЭВМ
Лабораторная работа No6 по дисциплине вычислительная математика
на тему:
«Метод простых итераций».
г. Санкт-Петербург
- Год
I. Цель работы:
Найти корень уравнения для функции методом простых итераций с заданной точностью Eps, исследовать скорость сходимости и обусловленности метода.
II. Общие сведения:
Метод простых итераций решения уравнения состоит в замене исходного уравнения эквивалентным ему уравнением x=(x) и построении последовательности xn+1=(xn), сходящейся при n к точному решению.
Рассмотрим один шаг итерационного процесса. Исходя из найденного на предыдущем шаге значения xn-1, вычисляется y= (xn-1). Если , то полагается xn=y и выполняется очередная итерация. Если же , то вычисления заканчиваются и за приближенное значение корня принимается величина xn=y. Погрешность результата вычислений зависит от знака производной : при >0 погрешность определения корня составляет qq, а при <0 погрешность не превышает . Здесь q- число, такое, что q на отрезке [a,b]. Существование числа q является условием сходимости метода в соответствии с отмеченной выше теоремой.
Для применения метода простых итераций определяющее значение имеет выбор функции в уравнении , эквивалентном исходному. Функцию необходимо подбирать так, чтобы q. Это обусловливается тем, что если <0 на отрезке [a,b], то последовательные приближения xn=(xn-1) будут колебаться около корня c, если же >0, то последовательные приближения будут сходиться к корню монотонно. Следует также помнить, что скорость сходимости последовательности {xn} к корню c функции тем выше, чем выше число q.
III. Порядок выполнения работы:
Графически или аналитически отделить корень уравнения .
Преобразовать уравнение к виду так, чтобы в некоторой окрестности [Left, Right] корня производная удовлетворяла условию q. При этом следует иметь в виду, что чем меньше величина q, тем быстрее последовательные приближения сходятся к корню.
Выбрать начальное приближение, лежащее на [Left, Right].
Составить подпрограмму для вычисления значений , , предусмотрев округление вычисленных значений с точностью Delta.
Составить головную программу, вычисляющую корень уравнения и содержащую обращение к программам , и ITER и индикацию результатов.
Провести вычисления по программе. Исследовать скорость сходимости и обусловленность метода.
IV. Выполнение работы:
- Отделим графическим методом корни уравнения , т.е. найдем отрезки
[Left, Right], на которых функция удовлетворяет условиям применимости метода простых итераций. Для этого сначала определим абсолютное число обусловленности задачи вычисления корня:
= ,
тогда Eps Delta / |1/(3x2-3+2e-x) |.
Теперь графически определим отрезок [Left, Right].
Где .
Проанализировав результаты, мы получаем отрезок [1, 2].
Теперь определим максимальное и минимальное значение на отрезке [1, 2].
x | f(x) |
1 | 0,735759 |
1,1 | 1,295742 |
1,2 | 1,922388 |
1,3 | 2,615064 |
1,4 | 3,373194 |
1,5 | 4,196260 |
1,6 | 5,083793 |
1,7 | 6,035367 |
1,8 | 7,050598 |
1,9 | 8,129137 |
2 | 9,270671 |
Как видно из таблицы M=9,270671, m=0.735759. Тогда мы можем вычислить следующие параметры:
опт = 2/(m+M) = 2 / (9.270671 + 0.735759) =0.199871
q = (M-m) / (M+m) = (9.270671 0.735759) / (9.270671 + 0.735759) = 8.534912 / 10.00643 =
= 0.852943
(x) = x * f(x) = x 0.199871*(x3 3x 2e(-x))
(x) = 1 * f(x) = 1 0.199871*(3x2 3 + 2e(-x))
2)Составим подпрограмму вычисления функции и производной этой функции
double F(double x)
{
extern double delta;
double s;
long int S;
s = x-0.199871*(x*x*x-3*x-2*exp(-x));
if( s/delta < 0 )
S = s/delta - .5;
else
S = s/delta + .5;
s = S*delta;
s = Round( s,delta );
return(s);
}
double F1(double x)
{
extern double delta;
double s;
long int S;
s = 1-0.199871*(3*x*x-3+2*exp(-x));
if( s/delta < 0 )
S = s/delta - .5;
else
S = s/delta + .5;
s = S*delta;
s = Round( s,delta );
return(s);
}
3)Составляем головную программу, вычисляющую корень уравнения с заданной точностью Eps и содержащую обращение к подпрограмме f(x), программам-функциям ITER, Round и представление результатов.
void main()
{
clrscr();
int k;
long int s;
float x11,eps1,delta1;
double x1,eps,x;
double F(double);
cout<<f(x) = x*x*x - 3*x - 2*e(deg(-x)) ;
printf(Input eps: );
scanf(%f,&eps1);
eps = eps1;
printf(Input x1: );
scanf(%f,&x11);
x1 = x11;
printf(Input delta: );
scanf(%f,&delta1);
delta = delta1;
x = ITER(x1,eps,k);
printf(x=%f k=%d ,x,k);
getch();
}
4) Проведем вычисления по программе, варьируя значения параметров Eps (точность вычисления корня) и Delta (точность задания исходных данных).
eps | delta | a | b | x1 | x* | k | f(x*) | f(x) |
| (x) |
0,000001 | 0,1 | 1 | 2 | 1,5 | 1,800000 | 2 | 0,101402224 | 7,0505978 | 0,141832 | -0,40921 |
0,00001 | 0,1 | 1 | 2 | 1,5 | 1,800000 | 2 | 0,101402224 | 7,0505978 | 0,141832 | -0,40921 |
0,0001 | 0,1 | 1 | 2 | 1,5 | 1,800000 | 2 | 0,101402224 | 7,0505978 | 0,141832 | -0,40921 |
0,001 | 0,1 | 1 | 2 | 1,5 | 1,800000 | 2 | 0,101402224 | 7,0505978 | 0,141832 | -0,40921 |
0,01 | 0,1 | 1 | 2 | 1,5 | 1,800000 | 2 | 0,101402224 | 7,0505978 | 0,141832 | -0,40921 |
0,1 | 0,1 | 1 | 2 | 1,5 | 1,800000 | 2 | 0,101402224 | 7,0505978 | 0,114679 | -0,74288 |
0,000001 | 0,01 | 1 | 2 | 1,5 |
|
|
| -1 | 1 | 1,199871 |
0,00001 | 0,01 | 1 | 2 | 1,5 |
|
|
| -1 | 1 | 1,199871 |
0,0001 | 0,01 | 1 | 2 | 1,5 |
|
|
| -1 | 1 | 1,199871 |
0,001 | 0,01 | 1 | 2 | 1,5 |
|
|
| -1 | 0,375555 | 1,532201 |
0,01 | 0,01 | 1 | 2 | 1,5 | 1,780000 | 2 | -0,037524295 | 6,8424763 | 0,146146 | -0,36761 |
0,1 | 0,01 | 1 | 2 | 1,5 | 1,780000 | 2 | -0,037524295 | 6,8424763 | 0,117575 | -0,69994 |
0,000001 | 0,001 | 1 | 2 | 1,5 |
|
|
| -1 | 1 | 1,199871 |
0,00001 | 0,001 | 1 | 2 | 1,5 |
|
|
| -1 | 1 | 1,199871 |
0,0001 | 0,001 | 1 | 2 | 1,5 |
|
|
| -1 | 1 | 1,199871 |
0,001 | 0,001 | 1 | 2 | 1,5 |
|
|
| -1 | 0,375842 | 1,531796 |
0,01 | 0,001 | 1 | 2 | 1,5 | 1,774000 | 2 | -0,078393211 | 6,780534 | 0,147481 | -0,35523 |
0,1 | 0,001 | 1 | 2 | 1,5 | 1,774000 | 2 | -0,078393211 | 6,780534 | 0,118466 | -0,68716 |
0,000001 | 0,0001 | 1 | 2 | 1,5 |
|
|
| -1 | 1 | 1,199871 |
0,00001 | 0,0001 | 1 | 2 | 1,5 |
|
|
| -1 | 0,375299 | 1,532564 |
0,0001 | 0,0001 | 1 | 2 | 1,5 | 1,785400 | 8 | -0,000423959 | 6,8984194 | 0,144966 | -0,37875 |
0,001 | 0,0001 | 1 | 2 | 1,5 | 1,786100 | 5 | 0,004407477 | 6,9056848 | 0,144721 | -0,38108 |
0,01 | 0,0001 | 1 | 2 | 1,5 | 1,773800 | 2 | -0,079749112 | 6,7784732 | 0,147526 | -0,35482 |
0,1 | 0,0001 | 1 | 2 | 1,5 | 1,773800 | 2 | -0,079749112 | 6,7784732 | 0,147612 | -0,35403 |
0,000001 | 0,00001 | 1 | 2 | 1,5 | 1,785460 | 11 | -1,00355E-05 | 6,899042 | 0,144948 | -0,37892 |
0,00001 | 0,00001 | 1 | 2 | 1,5 | 1,785470 | 9 | 5,89554E-05 | 6,8991458 | 0,144946 | -0,37893 |
0,0001 | 0,00001 | 1 | 2 | 1,5 | 1,785550 | 7 | 0,00061092 | 6,899976 | 0,144932 | -0,37907 |
0,001 | 0,00001 | 1 | 2 | 1,5 | 1,786080 | 5 | 0,004269365 | 6,9054772 | 0,144726 | -0,38103 |
0,01 | 0,00001 | 1 | 2 | 1,5 | 1,773780 | 2 | -0,07988468 | 6,7782672 | 0,14753 | -0,35478 |
0,1 | 0,00001 | 1 | 2 | 1,5 | 1,773780 | 2 | -0,07988468 | 6,7782672 | 0,147616 | -0,35399 |
0,000001 | 0,000001 | 1 | 2 | 1,5 | 1,785461 | 12 | -3,13644E-06 | 6,8990524 | 0,144947 | -0,37892 |
0,00001 | 0,000001 | 1 | 2 | 1,5 | 1,785457 | 10 | -3,07326E-05 | 6,8990109 | 0,144949 | -0,37891 |
0,0001 | 0,000001 | 1 | 2 | 1,5 | 1,785551 | 7 | 0,00061782 | 6,8999864 | 0,144932 | -0,37907 |
0,001 | 0,000001 | 1 | 2 | 1,5 | 1,786081 | 5 | 0,004276271 | 6,9054876 | 0,144725 | -0,38104 |
0,01 | 0,000001 | 1 | 2 | 1,5 | 1,773777 | 2 | -0,079905014 | 6,7782362 | 0,147531 | -0,35477 |
0,1 | 0,000001 | 1 | 2 | 1,5 | 1,773777 | 2 | -0,079905014 | 6,7782362 | 0,155307 | -0,28694 |
5) Из полученных результатов видно, что, чем более высокая точность выходных данных нам необходима, тем больше нам необходимо сделать итераций. Кроме того, из таблицы видно, что с ростом ошибок в исходных данных, уменьшается точность выходных данных. Таким образом, теоретические результаты совпадают с экспериментальными данными.
V. Вывод:
Проанализировав результаты работы программы, мы можем сделать вывод, что число итераций метода простых итераций возрастает с ростом требуемой точности выходных данных. Метод сходится со скоростью геометрической прогрессии со знаменателем q=0.852943. Обусловленность задачи нахождения корня уравнения для функции прямо пропорциональна величине
|1/(3x2-3+2e-x)| и точности задания исходных данных и обратно пропорциональна точности вычисления корня, т. е., чем ближе |1/(3x2-3+2e-x) | и Delta к 0 и чем больше Eps, тем задача хуже обусловлена, и наоборот.
