Лабораторная работа 2 / lab 2.doc
Федеральное агенство по образованию РФ
СПбГЭТУ «ЛЭТИ»
Кафедра МО-ЭВМ
Факультет КТИ
ОТЧЕТ
по лабораторной работе № 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 |
