Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
26
Добавлен:
01.05.2014
Размер:
98.82 Кб
Скачать

Санкт-Петербургский государственный электротехнический университет «ЛЭТИ»

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

Вычислительная математика

Отчет

по выполнению лабораторной работы N3

Преподаватель: Щеголева Н.Л.

Студент группы 4351: Усенко А.В.

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

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

Необходимо исследовать обусловленность задачи нахождения корня уравнения для нелинейной функции (Вариант 16). Значения функции вычисляется с помощью метода бисекции, приближенно, с точностью Delta, варьируемой в пределах от 0.1 до 0.000001. Корень уравнения вычисляется с заданной точностью Eps, варьируемой от 0.1 до 0.000001. Вычисления провести для различных наборов параметров Delta, Eps. Построить графики зависимости количества итераций от Eps.

Анализ задачи

По графику функции можно произвести отделение корня.

График функции:

Возьмем начальные границы интервала [0;1].

Теоретическое абсолютное число обусловленности . Погрешность вычисления корня определяется по формуле: . Если практическая погрешность вычисления корня больше или равна теоретический, то задача хорошо обусловлена, иначе – плохо обусловлена.

Исходный текст программы

/*

Файл: Lr_3.cpp

Автор: Усенко А.В.

Ред. 1.0 28.09.06

*/

#include <iostream.h>

#include <math.h>

#include <conio.h>

#include <fstream.h>

#include "methods.h"

// Global variables

double F(double); // Function

ifstream f_in; // Input data file

ofstream f_out; // Output data file

char in_path[11]="input.txt", // Input file name

out_path[11]="output.txt"; // Output file name

double delta=0.1, // function calculating error

eps=0.1; // output data error

double a=0,b=1; // interval borders

void main()

{

clrscr();

double func_val, // value of function

x; // value of root

int n; // number of iterations

// files opening

f_in.open(in_path);

if (f_in.fail())

{

cout<<"Impossible to open input file!"<<endl;

exit(1);

}

f_out.open(out_path);

if (f_out.fail())

{

cout<<"Impossible to open output file!"<<endl;

exit(1);

}

f_out.setf(ios::fixed);

f_out.setf(ios::showpoint);

/* Calculating & table printing */

delta=0.1;

for (int j=1; j<=6; j++)

{

f_out.precision(j);

f_out<<"Delta = "<<delta<<endl;

eps=0.1;

f_out<<"Eps\t\t"<<"X\t\t"<<"N\n";

for (int i=1; i<=6; i++)

{

f_out.precision(i);

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

f_out<<eps<<"\t"; if (i<6) {f_out<<"\t";};

f_out<<x<<"\t"; if (i<6) {f_out<<"\t";};

f_out<<n<<endl;

eps = eps/10;

}

f_out<<endl<<endl;

delta = delta/10;

}

f_in.close();

f_out.close();

cout<<"Program finished. Press <Enter>...";

getch();

return;

}

// Function definition

double F(double x)

{

extern double delta;

double s;

s = asin(2*x/(1+x*x))-exp(-x*x);

return Round(s,delta);

}

Результаты вычислений

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

Delta

Eps

x

F(x)

N

Eps (теор)

Обусловл

0,1

0,1

0,4

-0,2

3

0,05265298

+

0,01

0,44

0,0

3

0,05286111

-

0,001

0,438

0,0

3

0,05285084

-

0,0001

0,4375

0,0

3

0,05284827

-

0,00001

0,43750

0,0

3

0,05284827

-

0,000001

0,437500

0,0

3

0,05284827

-

0,01

0,1

0,4

-0,15

3

0,00526530

+

0,01

0,44

0,00

3

0,00528611

+

0,001

0,438

0,00

3

0,00528508

-

0,0001

0,4375

0,00

3

0,00528483

-

0,00001

0,43750

0,00

3

0,00528483

-

0,000001

0,437500

0,00

3

0,00528483

-

0,001

0,1

0,4

-0,151

3

0,00052653

+

0,01

0,45

0,037

6

0,00052913

+

0,001

0,439

0,004

9

0,00052856

+

0,0001

0,4380

0,000

10

0,00052851

-

0,00001

0,43799

0,000

10

0,00052851

-

0,000001

0,437988

0,000

10

0,00052851

-

0,0001

0,1

0,4

-0,1513

3

0,00005265

+

0,01

0,45

0,0365

6

0,00005291

+

0,001

0,439

0,0037

9

0,00005286

+

0,0001

0,4380

-0,0001

13

0,00005285

+

0,00001

0,43799

0,0000

13

0,00005285

-

0,000001

0,437988

0,0000

13

0,00005285

-

0,00001

0,1

0,4

-0,15127

3

0,00000527

+

0,01

0,45

0,03651

6

0,00000529

+

0,001

0,439

0,00371

9

0,00000529

+

0,0001

0,4379

-0,00010

13

0,00000529

+

0,00001

0,43791

0,00001

16

0,00000529

+

0,000001

0,437908

0,00000

17

0,00000529

-

0,000001

0,1

0,4

-0,151274

3

0,00000053

+

0,01

0,45

0,036514

6

0,00000053

+

0,001

0,439

0,003713

9

0,00000053

+

0,0001

0,4379

-0,000097

13

0,00000053

+

0,00001

0,43791

0,000013

16

0,00000053

+

0,000001

0,437906

-0,000001

19

0,00000053

+

Вывод

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

Соседние файлы в папке Лабораторные работы 1 - 10