МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ОБРАЗОВАНИЯ
«НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
ОТЧЁТ по лабораторной работе № 1 «Методы вычисления корней» по дисциплине:
«Программирование»
Выполнил(а):
Неугодова П.В.
Группа АТ-33
Проверил:
Кухто А.В.
Новосибирск
2024
ЦЕЛЬ РАБОТЫ: 19 вариант. Найти все корни уравнения на заданном интервале согласно варианту.
19
-3.0
3.0
0.05
Для этого:
Отделить корни:
вычислить таблицу значений функции на интервале [X_min, X_max] с шагом h;
На каждом отрезке уточнить корень с точностью eps = 0.001. Метод уточнения для каждого отрезка выбрать самостоятельно при условии, что все методы различны. Для каждого метода вывести число итераций. Если корень всего один, то применить два метода.
ХОД РАБОТЫ: Данный код содержит несколько функций и основную функцию main(), которая использует эти функции для решения уравнения и вывода результатов.
1. Функция double f(double x):
- Описание: Эта функция определяет уравнение, которое мы хотим решить. В данном случае, она возвращает значение функции для заданного значения x.
- Входные параметры: x - значение переменной x, для которого нужно вычислить значение функции.
- Выходное значение: Значение функции f(x).
2. Функция double bisection(double a, double b):
- Описание: Эта функция реализует метод половинного деления для нахождения корня уравнения на заданном интервале [a, b].
- Входные параметры: a и b - границы интервала, на котором мы ищем корень уравнения.
- Выходное значение: Значение корня уравнения, найденное методом половинного деления.
3. Функция double kasat(double x0):
- Описание: Эта функция реализует метод касательных для нахождения корня уравнения.
- Входные параметры: x0 – исходная точка, с которой начинаем вычисление значения заданной функции.
- Выходное значение: Значение корня уравнения, найденное методом касательных.
4. Функция int main():
- Описание: Это основная функция программы. Она определяет интервал [a, b], шаг h и использует функции f(x), bisection(a, b) и kasat(x0) для нахождения корней уравнения и вывода результатов.
- Входные параметры: Нет.
- Выходное значение: Целое число, обычно 0, которое указывает на успешное выполнение программы.
ЛИСТИНГ: #include #include
#define EPS 0.001
double f(double x) {
return 1 - pow(x, 3) - sin(x);
}
double bisection(double a, double b) { //метод половинного деления
int it = 0;
double x;
while ((b - a) >= EPS) {
x = (a + b) / 2.0; //делим отрезок пополам
if (f(x) == 0.0) // если есть корень - прерываем цикл
break;
//если нет, сужаем интервал поиска
else if (f(x) * f(a) < 0)
b = x;
else
a = x;
it++;
}
printf("M1:count iterations = %d, X = %lf\n", it, x);
return x;
}
double kasat(double x0) { //метод касательных
int it = 0;
double x = x0;
do {
x0 = x; // если abs(f(x))>=eps
x = x0 - f(x0) / (exp(-x0) + 0.5 / (2 * sqrt(fabs(x0)))); //пересечение первой касательной с осью Ox в теле цикла
it++;
} while (fabs(x) < EPS);
printf("M3:count iterations = %d, X = %lf\n", it, x);
return x;
}
int main() {
double a = -3.0, b = 3.0, h = 0.05;
double x = a, fx_prev = f(a);
printf("Table of values:\n");
for (double xx = a; xx <= b; xx += h) {
double result = f(xx);
printf("x = %.2f, y = %.6f\n", xx, result);