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

1.1.3. Блок-схема алгоритма (задача №1)

1

Введите погрешность

Введите начальное приближение

Xn

Eps

>0

Функция отрицательна

f(x)<0

Функция положительна

f(x)>0

А

В

С

Ошибка

f`(a)<f`(b)

f(x)

x, f(x)

1

f`(b) – максимальное значение

f`(a) - минимальное

f`(a) – максимальное значение

f`(b) - минимальное

x=0, x<= b+(b-a)/10, x=x+1

2

i=0

f(a)*f(b)>0

С

2

|xi+1-x|<E

f(xi+1)

i=i+1

Значение корня уравнения xi+1

Максимальное значение производной f`(x)max

Минимальное значение производной f`(x)min

Количество итераций i

Изменить погрешность да/нет?

Ответ1

Да/нет

А

3

3

Изменить начальное приближение да/нет?

Да/нет

В

Конец

Изменить промежуток изоляции да/нет?

Да/нет

С

Ответ2

Ответ3

Рис. 1. Схема алгоритма решения уравнения методом итераций

1.1.4. Код программы №1:

#include <cstdlib>

#include <iostream>

#include <stdio.h>

#include <conio.h>

#include <windows.h>

#include <math.h>

using namespace std;

int main(int argc, char *argv[])

{

double a, b, eps, c, fa, fb, fc, i, znach, abs;

char re1, re2;

cout << "Dubrovskiy K.V. R-100101. Reshenie uravneniya metodom polovinnogo deleniya\nf(x)=x^2*cos(2*x)+1\n"<<endl;

do {

re1='Y';

re2='Y';

do {

cout<<"\nVvedite predeli izolyatsii kornya [a, b]\n";

cout<<"Vvedite a\n";

cin>>a;

cout<<"Vvedite b\n";

cin>>b;

cout<<"Vvedite eps\n";

cin>>eps;

cout<<"Vvedeni sleduyushie chisla:\n a="<<a<<"\nb="<<b<<"\neps="<<eps;

cout<<"\nizmenit' znacheniya? y/n?";

cin>>re1;

if(a>b) {

cout<<"\nOshibka vvoda";

re1='y';};

} while (re1!='n');

cout<<"Znacheniya funktsii na promejutke [a b] \n";

for(i=a; i<=b+(b-a)/10; i=i+(b-a)/10) {

znach=i*i*cos(2*i)+1;

cout <<"X=" << i <<"\t\tF=" << znach <<endl;

};

do{

c=(a+b)/2;

fa=a*a*cos(2*a)+1;

fb=b*b*cos(2*b)+1;

fc=c*c*cos(2*c)+1;

if(fa*fc<0){

b=c;

}

else {a=c;

};

if(a-b>0){abs=a-b;} else {abs=b-a;};

} while (abs>eps);

cout<<"Reshenie uravneniya na zadannom promejutke x="<<c<<"\n";

cout<<"izmenit' znacheniya? y/n? \n";

cin>>re2;

}

while (re2=='Y'||'y');

system("PAUSE");

return EXIT_SUCCESS;

}

1.1.5. Примеры работы программы

Промежуток изоляции

Погрешность

Количество итераций

Значение корня

[-1,5; -1]

0.001

3

-1,18512

[-2,5; -2]

0.000001

9

-2,25744

[1; 1,5]

0.00001

7

1,18339

[5; 5,5]

0.001

4

5,48112

[2; 2,5]

0.00001

10

2,25741

Во всех случаях начальное приближение равняется минимальному значению промежутка а. Полученные значения показывают, что программы работает правильно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]