Лабораторная
 

Федеральное агенство по образованию РФ

СПбГЭТУ «ЛЭТИ»

Кафедра МО-ЭВМ

Факультет КТИ

ОТЧЕТ

по лабораторной работе № 2

Исследование обусловленности вычислительной задачи.

Дисциплина: вычислительная мпатематика

Студент группы 4351

Кузьменко А.

Преподаватель:

Щеголева Н.Л.

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

2006

Лабораторная работа № 2

Исследование обусловленности вычислительной задачи.

1. Постановка задачи.

Исследовать обусловленность задачи нахождения корня уравнения f(x)=0 для линейной функции f(x)=c(x-d). Значения функции f(x) следует вычислять приближенно с точностью Delta (точность входных данных), а корень уравнения следует находить методом бисекции с задаваемой точностью Eps.  

2. Теоретические сведения.

Обусловленность вычислительной задачи — это чувствительность точности ее решения к погрешностям входных данных Количественная мера степени обусловленности задачи - число обусловленности nD. Задача хорошо обусловлена, если D( y* ) £ nD*D( x* ), где D( y* ) — требуемая точность выходных данных, а D( x* ) — точность входных данных.

Если рассматривать задачу вычисления корня уравнения y=f(x), то роль числа обусловленности будет играть величина nD= |f`¢(x0)|, где x0 - корень уравнения.

Метод бисекции состоит в построении последовательности вложенных друг в друга отрезков, на концах которых функция имеет разные знаки. Каждый последующий отрезок получается делением пополам предыдущего. Этот процесс позволяет найти нуль функции f(x) с любой заданной точностью.

3. Текст программы.

double BISECT(double Left,double Right,double Eps,int &N)

{

double E = fabs(Eps)*2.0;

double FLeft = F(Left);

double FRight = F(Right);

double X = (Left+Right)/2.0;

double Y;

if (FLeft*FRight>0.0) {puts("Неверно задан интервал \n");exit(1);}

if (Eps<=0.0) {puts("Неверно задана точность\n");exit(1);}

N=0;

if (FLeft==0.0) return Left;

if (FRight==0.0) return Right;

while ((Right-Left)>=E)

{

X = 0.5*(Right + Left);

Y = F(X);

if (Y == 0.0) return (X);

if (Y*FLeft < 0.0)

Right=X;

else

{ Left=X; FLeft=Y; }

N++;

};

return(X);

}

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)));

}

#include <math.h>

#include <stdio.h>

#include <stdlib.h>

#include "methods.h"

#include <conio.h>

#include <iostream.h>

double delta,c,d;

void main()

{

int k;

long int s;

float a1,b1,c1,d1,eps1,delta1;

double a,b,eps,x;

printf("введите eps:");

scanf("%f",&eps1);

eps = eps1;

printf("введите c:");

scanf("%f",&c1);

c = c1;

printf("введите d:");

scanf("%f",&d1);

d = d1;

printf("введите a:");

scanf("%f",&a1);

a = a1;

printf("введите b:");

scanf("%f",&b1);

b = b1;

printf("введите delta:");

scanf("%f",&delta1);

delta = delta1;

if ((1/c)<=(eps/delta))

{printf ("Задача хорошо обусловлена \n");}

else {printf ("Задача плохо обусловлена\n");}

x = BISECT(a,b,eps,k);

printf("x=%f k=%d\n",x,k);

getch();

}

double F(double x)

{

 extern double c,d,delta;

 double s;

 s = c*(x - d);

 s = Round( s,delta );

 return(s);

}

4. Вычислительный эксперимент.

В нижеприведенных таблицах приведены исходные данные и результаты вычислительного эксперимента. В каждой из них представлены:

 - исходные данные: коэффициент c, точность вычисления значения функции delta и требуемая точность вычисления корня функции eps. Значения остальных входных параметров постоянны во всех экспериментах и равны: d=5, a=1, b=7;

- результаты: вычисленный корень уравнения x, количество итераций метода бисекции k;

 - величины для оценки обусловленности задачи: верхняя граница допустимого числа обусловленности для достижения требуемой точности результата nD_max=eps/delta и число обусловленности nD=1/c. Сравнивая эти два числа, можно сделать вывод о том, хорошо или плохо обусловлена задача, что также отражается в таблицах.

В первой таблице величины eps и delta постоянны, а тангенс угла наклона графика функции c изменяется, при этом часть задач обусловлена хорошо, а часть — плохо.

с

eps

delta

x

k

nD_max

>=

nD

1000

0,1

0,1

4,9375

5

1

хорошо

0,001

100

0,1

0,1

4,9375

5

1

хорошо

0,01

10

0,1

0,1

4,9375

5

1

хорошо

0,1

0,5

0,1

0,1

4,9375

4

1

плохо

2

0,3

0,1

0,1

5,125

3

1

плохо

3,333333

0,1

0,1

0,1

4,75

2

1

плохо

10

0,05

0,1

0,1

5,5

1

1

плохо

20

0,01

0,1

0,1

1

0

1

плохо

100

Очевидна обратно-пропорциональная зависимость числа обусловленности от тангенса угла наклона графика функции:

c

nD

0,1

10

0,3

3,3333333

0,5

2

0,7

1,4285714

1

1

2

0,5

4

0,25

6

0,1666667

Во второй таблице неизменны значения с и eps, а delta изменяется.

с

eps

delta

x

k

nD_max

>=

nD

1

0,001

10

1

0

0,0001

плохо

1

1

0,001

1

4,75

2

0,001

плохо

1

1

0,001

0,1

5,03125

5

0,01

плохо

1

1

0,001

0,01

4,996094

8

0,1

плохо

1

1

0,001

0,001

5,000488

11

1

хорошо

1

1

0,001

0,0001

5,000488

12

10

хорошо

1

1

0,001

0,00001

5,000488