Отчёт по лабораторной работе №1 Методы вычисления корней



Дата21.05.2024
өлшемі457,63 Kb.
#202717
Байланысты:
Отчёт по 1 лабораторной работе


МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ОБРАЗОВАНИЯ
«НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

ОТЧЁТ
по лабораторной работе № 1
«Методы вычисления корней»
по дисциплине:
«Программирование»



Выполнил(а):
Неугодова П.В.
Группа АТ-33

Проверил:

Кухто А.В.



Новосибирск


2024
ЦЕЛЬ РАБОТЫ:
19 вариант. Найти все корни уравнения на заданном интервале согласно варианту.

19



-3.0

3.0

0.05

Для этого:



  1. Отделить корни:

    1. вычислить таблицу значений функции на интервале [X_min, X_max] с шагом h;

    2. программно определить отрезки, на концах которых функция меняет знак;

  2. На каждом отрезке уточнить корень с точностью 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);

// Проверка на корень уравнения


if (fabs(result) < 0.09) {

printf("X-border = %.2f\n", xx);


//return 0;


}
}
while (x < b) {
x += h;
double fx = f(x);

if (fx * fx_prev < 0) {


printf("[%lf, %lf]:\n", x - h, x);
bisection(x - h, x);
kasat((x - h + x) / 2.0);
}

fx_prev = fx;


}

}


ТЕСТИРОВАНИЕ:


БЛОК СХЕМЫ:
Блок схема функции f:

Блок схема функции bisection:

Блок схема функции hords:

Блок схема функции main:




Достарыңызбен бөлісу:




©www.engime.org 2024
әкімшілігінің қараңыз

    Басты бет