Скачиваний:
48
Добавлен:
01.05.2014
Размер:
241.15 Кб
Скачать

Министерство образования и науки РФ

Санкт-Петербургский государственный электротехнический университет

“ЛЭТИ”

кафедра МОЭВМ

Лабораторная работа №6 по дисциплине вычислительная математика

на тему:

«Метод простых итераций».

г. Санкт-Петербург

  1. Год

I. Цель работы:

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

II. Общие сведения:

Метод простых итераций решения уравнения состоит в замене исходного уравнения эквивалентным ему уравнением x=(x) и построении последовательности xn+1=(xn), сходящейся при n к точному решению.

Рассмотрим один шаг итерационного процесса. Исходя из найденного на предыдущем шаге значения xn-1, вычисляется y= (xn-1). Если , то полагается xn=y и выполняется очередная итерация. Если же , то вычисления заканчиваются и за приближенное значение корня принимается величина xn=y. Погрешность результата вычислений зависит от знака производной : при >0 погрешность определения корня составляет qq, а при <0 погрешность не превышает . Здесь q- число, такое, что q на отрезке [a,b]. Существование числа q является условием сходимости метода в соответствии с отмеченной выше теоремой.

Для применения метода простых итераций определяющее значение имеет выбор функции в уравнении , эквивалентном исходному. Функцию необходимо подбирать так, чтобы q. Это обусловливается тем, что если <0 на отрезке [a,b], то последовательные приближения xn=(xn-1) будут колебаться около корня c, если же >0, то последовательные приближения будут сходиться к корню монотонно. Следует также помнить, что скорость сходимости последовательности {xn} к корню c функции тем выше, чем выше число q.

III. Порядок выполнения работы:

  1. Графически или аналитически отделить корень уравнения .

  2. Преобразовать уравнение к виду так, чтобы в некоторой окрестности [Left, Right] корня производная удовлетворяла условию q. При этом следует иметь в виду, что чем меньше величина q, тем быстрее последовательные приближения сходятся к корню.

  3. Выбрать начальное приближение, лежащее на [Left, Right].

  4. Составить подпрограмму для вычисления значений , , предусмотрев округление вычисленных значений с точностью Delta.

  5. Составить головную программу, вычисляющую корень уравнения и содержащую обращение к программам , и ITER и индикацию результатов.

  6. Провести вычисления по программе. Исследовать скорость сходимости и обусловленность метода.

IV. Выполнение работы:

  1. Отделим графическим методом корни уравнения , т.е. найдем отрезки

[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))\n\n";

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\n",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) Из полученных результатов видно, что, чем более высокая точность выходных данных нам необходима, тем больше нам необходимо сделать итераций. Кроме того, из таблицы видно, что с ростом ошибок в исходных данных, уменьшается точность выходных данных. Таким образом, теоретические результаты совпадают с экспериментальными данными.

Соседние файлы в папке LR_6