МЕТОДЫ РЕШЕНИЯ НЕЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ И ТРАНСЦЕНДЕНТНЫХ УРАВНЕНИЙ. Отчёт по лабораторной работе
Скачать 0.52 Mb.
|
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» ________________________________________________________________ ОТЧЁТ по лабораторной работе №1 «МЕТОДЫ РЕШЕНИЯ НЕЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ И ТРАНСЦЕНДЕНТНЫХ УРАВНЕНИЙ»по дисциплине: «Программирование»
Новосибирск 2021 ЦЕЛЬ РАБОТЫ: 7 вариант. Найти все корни уравнения на заданном интервале. Для этого необходимо вычислить таблицу значений функции на заданном интервале с шагом h, определить отрезки, на концах которых функция меняет знак и на каждом отрезке уточнить корень с точностью до eps при помощи различных методов для каждого отрезка. ХОД РАБОТЫ: Программа состоит из функции int main (), в которой вычисляется 1 корень данного уравнения. Сначала выводится таблица значений с шагом h = 0,05. В массив сохраняются точки, в которых функция меняет знак (y(x) * y(x1) < 0). По этим точкам определяются отрезки, на концах которых функция меняет знак. Далее на отрезке уточняется корень уравнения методом половинного деления. БЛОК-СХЕМА: Метод половинного деления Метод хорд ЛИСТИНГ: #include #include #include #include #include double function(double x) { double y; y = 2*x*x*x-9*x*x-60*x+1; return y; } int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); const float eps = 0.001; double a, b, x, x1, y, y1, xmin = -4, xmax = 1, h = 0.05; float roots[10]; int n = 0, n1; y = function(xmin); for (float i = xmin; i <= xmax; i = i + h) { y1 = function(i); if ((y * y1) < 0) { printf("Конец отрезка "); roots[n] = i; n++; } y = y1; printf("x = %10.2llf y = %10.3llf\n", i, y); } x = roots[0] - h; a = roots[0] - h; b = roots[0]; n = 0; while (fabs(function(x)) >= eps) { x = (a + b) / 2; if (function(x) * function(a) < 0) { b = x; n++; } else { a = x; n++; } } printf("Корень x1 = %10.3llf количество итераций : %5d\n", x, n); x1 = roots[1] - h; a = roots[1] - h; b = roots[1]; n1 = 0; while (fabs(function(b) - function(a)) >= eps) { x1 = (function(b) * a - function(a) * b) / (function(b) - function(a)); if ((function(a) * function(x1)) > 0) { a = x1; n1++; } else { b = x1; n1++; } } printf("Корень x2 = %10.3llf количество итераций : %5d\n", x1, n1); _getch(); } ТЕСТИРОВАНИЕ: |