- •Реферат
- •Оглавление
- •Решение нелинейного уравнения
- •1.1.1. Решение уравнения методом итераций
- •1.1.2 Сущность метода итераций
- •1.1.3. Блок-схема алгоритма (задача №1)
- •1.1.5. Примеры работы программы
- •Решение уравнения методом половинного деления
- •Сущность метода половинного деления
- •Блок-схема программы.
- •Код программы №2
- •1.2.4. Примеры работы программы
- •2.1. Вычисление определённого интеграла
- •2.1.1 Вычисление определенных интегралов методом прямоугольников
- •2.1.2. Вычисление определенных интегралов методом трапеций
- •2.1.5. Примеры работы программы
- •3.1. Вычисление Дифференциального уравнения методом Эйлера
- •3.1.1. Блок-схема алгоритма
- •4.1. Вывод
- •5. Библиографический список
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 |
Во всех случаях начальное приближение равняется минимальному значению промежутка а. Полученные значения показывают, что программы работает правильно.