Лабораторная работа 1 по ВМ. Московский технический университет связи и информатики
![]()
|
МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ ОТЧЁТ по лабораторной работе №1 «Методы решения нелинейных уравнений» Отчёт подготовил: студент БСТ1401 Балашов И.М. Москва 2015 г. Нелинейное уравнение: e^x-4e^(-x)-1=0 Точность ![]() На компьютере: метод итерации. Вручную: метод хорд. Отделение корней ![]() График функции: ![]() x:=0.7, 0.8…1.7 ![]() Как видно только на промежутке х=[0.8;1] значение f(x) меняет знак, следовательно уравнение имеет хотя бы один корень. Из таблицы видно, что первая и вторая производные f'(x) и f''(x) знакопостоянны и непрерывны на всем отрезке. ![]()
Метод хорд (ручной расчёт): Для сходимости процесса необходимо, чтобы ![]() ![]() Рекуррентная формула метода хорд: ![]() ![]() За неподвижную точку в методе хорд выбирают тот конец отрезка [a;b], для которого выполняется условие f (x)∙ f¢¢ (x) > 0. В данном случае, исходя из таблицы, это будет точка b=1.7. Тогда рекуррентная формула будет иметь вид: ![]() Ручной расчет трех итераций: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
После трех итераций приближение к корню ![]() Оценка погрешности результатов: ![]() Метод итераций (машинный рассчет): Приведем уравнение ![]() ![]() ![]() ![]() ![]() Для сходимости процесса итерации необходимо, чтобы ![]() ![]() Следовательно, сходимость не обеспечена. Тогда построим функцию: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Рекуррентная формула имеет вид: ![]() Схема алгоритма метода итераций: ![]() Код программы: #include #include #include using namespace std; double f(double x) { return exp(x)-4*exp(-x)-1; //исходное уравнение } double fi(double x) { return x - 0.05*f(x); //итерирующая функция } void rasschet(double x, double E) { double t = x; double f1, f2; int n = 0; //кол-во итераций do { x = t; t = fi(x); //получение очередного приближения к корню f1 = f(x); f2 = f(t); n = n + 1; cout << "\nитерация: " << n << " корень: " << x << " f(x):" << f(x); } while (!((abs(x - t) cout << "\nРезультаты:"; cout << "\nитерация:" << n << " корень:" << x << " f(x):" << f(x); } void main() { setlocale(LC_ALL, "Russian"); do{ cout << "Программа расчёта корня нелинейного уравнения методом итераций\n\n"; double x, E; cout << "Введите х: "; cin >> x; // начальное приближение cout << "Введите точность Е: "; cin >> E; //точность вычислений rasschet(x, E); } while (getch() == 'y'); } ![]() Результаты расчёта на ПК:
Зависимость числа итераций от точности в логарифмическом масштабе:
![]() |