Файл: Отчёт по лабораторной работе 1 Метод исчисления корней.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 06.12.2023
Просмотров: 17
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ОБРАЗОВАНИЯ
«НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
ОТЧЁТ
по лабораторной работе № 1
«Метод исчисления корней»
по дисциплине:
«Программирование»
Выполнил(а): Буркова К.М. Группа АТ-24 | Проверил: Кухто А.В. |
Новосибирск
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;
}
ТЕСТИРОВАНИЕ:
БЛОК СХЕМЫ:
-
Метод касательных
-
Метод итераций
-
Метод половинного деления
-
Метод хорд