- •Реферат
- •Оглавление
- •Решение нелинейного уравнения
- •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) методом половинного деления (методом проб) промежуточная точка c (итерация c) выбирается посредине отрезка изоляции
.
Затем вычисляется значение , после чего проверяется следующее условие: если
,
то сужение отрезка производится за счет переноса точкиb в точку c, т.е. b = c, точка a при этом остается неподвижной, иначе переносится точка a, т.е. a = c, точка b - неподвижна.
Условие окончания вычислений:
.
Найденное значение корня целесообразно определять по формуле:
.
Блок-схема программы.
1
Начало
Заставка
Введите промежуток изоляции
а, b
Введите погрешность вычислений
eps
да/нет
А
Изменить введенные значения?
ответ 1
нет
с=(а+b)/2
B
С
да
1
f(a)*f(c)<0
b=c
a=c
нет
да
|a-b|<0
B
да/нет
С
Перезапустить программу?
ответ 2
да
нет
да
нет
Конец
Код программы №2
#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, znach, i;
char re1;
setlocale(LC_ALL,"Russian");
cout << "Задание N1.2. . Дубровский К.В. Вариант 5.Решение уравнения методом половинного деления.\nf(x)=x^2*sin(2*x)\n"<<endl;
do {
cout<<"\nВведите пределы изоляции корня [a, b]\n";
cout<<"Введите а\n";
cin>>a;
cout<<"Введите b\n";
cin>>b;
cout<<"Введите погрешность eps";
cin>>eps;
cout<<"Введены следующие числа:\n a="<<a<<"\nb="<<b<<"\neps="<<eps;
cout<<"\nИзменить значения? y/n?";
cin>>re1;
if(a>b) {
cout<<"\nошибка ввода. Повторите ввод чисел!";
re1='y';};
} while (re1!='n');
for(i=a; i<=b+(b-a)/10; i=i+(b-a)/10) {
znach=i*i*sin(2*i)-1;
cout <<"X=" << i <<"\t\tF=" << znach <<endl;
};
do{
c=(a*b)/2;
fa=a*a*sin(2*a);
fb=b*b*sin(2*b);
fc=c*c*sin(2c);
if(fa*fc<0) {
b=c;
}
else {a=c;
};
} while ((a-b)>eps);
cout<<"Решение уравнения на заданном промежутке x="<<c;
system("PAUSE");
return EXIT_SUCCESS;}
1.2.4. Примеры работы программы
Промежуток изоляции |
Погрешность |
Количество итераций |
Значение корня |
[-1,5; -1] |
0.001 |
4 |
-1,18512 |
[-2,5; -2] |
0.00001 |
9 |
-2,25744 |
[1; 1,5] |
0.00001 |
7 |
1,18339 |
[5; 5,5] |
0.001 |
4 |
5,48112 |
[2; 2,5] |
0.0001 |
5 |
2,25741 |
2.1. Вычисление определённого интеграла
Вычислить значение определенного интеграла по формуле прямоугольников (слева, справа и их среднее значение), по формуле трапеций и по формуле Симпсона, применяя для оценки точности каждого результата двойной пересчет (при числе разбиений интервала интегрирования n=10, n=20,....,n=80). Убедиться, что формула Симпсона дает наиболее точное значение интеграла (для этого результат выводить на печать с восемью и более знаками после запятой).
.