Отчёт по лабораторной работе 1 Метод исчисления корней
Скачать 127.37 Kb.
|
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» ОТЧЁТ по лабораторной работе № 1 «Метод исчисления корней» по дисциплине: «Программирование»
Новосибирск 2023 ЦЕЛЬ РАБОТЫ: Определить корни на заданном отрезке. Вычислить таблицу значений функции на интервале [X_min, X_max] с шагом h, а также программно определить отрезки, на концах которых функция меняет знак с точностью до eps при помощи различных методов для каждого отрезка. ХОД РАБОТЫ: Находим значения, а затем при помощи методов половинного деления и хорд определяем корни. ЛИСТИНГ: //13 вариант #include #include #include float uravnenie(float x); float proizvodna(float x); int znak(float a); float polovinnoe_delenie(float a, float b); float metod_hord(float a, float b); float metod_kasatelnih(float b); int main() { printf("znachenia: "); for (float i = -2.2; i <= 1.0; i = i + 0.05) { printf(" x = %f, y= %f \n ", i, uravnenie(i)); } printf("\n korni:\n"); for (float i = -2.2; i < 1.0; i = i + 0.05) { printf(" x = %f, y= %f \n ", i, uravnenie(i)); if (uravnenie(i) == 0.0) { printf(" %f,", i); } else if (znak(uravnenie(i)) != znak(uravnenie(i + 0.05))) { printf("otresok [%f, %f]\n", i, i + 0.05); printf(" polovinnoe delenie \n"); printf(" koren %f\n", polovinnoe_delenie(i, i + 0.05)); printf(" metod hord \n"); printf(" koren %f\n", metod_hord(i, i + 0.05)); } } } float uravnenie(float x) { x = 3*x*x*x*x+8*x*x*x+6*x*x-10; return x; } float proizvodna(float x) { x = 12*x*x*x+24*x*x+12*x; return x; } int znak(float a) { if (a > 0) { return 0; }; if (a < 0) { return 1; }; } float polovinnoe_delenie(float a, float b) { int n = 0; while (fabs(uravnenie((a + b) / 2)) >= 0.001) { if (znak(uravnenie(a)) != znak(uravnenie((b + a) / 2))) { b = (b + a) / 2; } else { a = (b + a) / 2; } n++; } printf(" kolichestvo iterazi : %d\n", n); return (a + b) / 2; } float metod_hord(float a, float b) { float x = (a * uravnenie(b) - b * uravnenie(a)) / (uravnenie(b) - uravnenie(a)); int n = 0; while (fabs(uravnenie(x)) >= 0.001) { n++; if (znak(uravnenie(a)) != znak(uravnenie(x))) { b = x; } else { a = x; } x = (a * uravnenie(b) - b * uravnenie(a)) / (uravnenie(b) - uravnenie(a)); } printf(" kolichestvo iterazi : %d\n", n); return x; } ТЕСТИРОВАНИЕ: БЛОК СХЕМЫ: Метод касательных Метод итераций Метод половинного деления Метод хорд |