Решение алгебраического уравнения
Автор: Darks 356 • Ноябрь 20, 2022 • Лабораторная работа • 916 Слов (4 Страниц) • 156 Просмотры
[pic 1]
Лабораторная работа 8.
Решение алгебраического уравнения
Цель работы
Изучение метода деления отрезка пополам для определения корня алгебраического уравнения f(x)=0 на заданном отрезке [a,b]. Изучение понятия погрешности вычисления.
Контрольные вопросы
- Абсолютная погрешность – модуль разности между точным числом А и приближенным, .[pic 2]
- Относительная погрешность – это отношение абсолютной погрещности и точного числа.
- Погрешность вычислений складывается из: погрешностей, допущенных при постановке задачи за счет ее упрощения (погрешности задачи), погрешностей, связанных с использованием приближенных методов решения задачи (погрешности метода), погрешностей, связанных с ограниченным количеством разрядов, используемых для представления чисел (погрешности округления) ,погрешностей, возникающих при выполнении операций над приближенными числами (погрешности операций).
- Для использования в программе математических функций необходимо в программе подключить библиотеку <math.h> и указать в терминале ключ –lm при компиляции.
Текст программы
#include <stdio.h>
#include <math.h>
#define EPS 0.00001
#define QTY 20
void table(double, double);
double Func(double);
double sircle(double);
double FindRoot(double, double);
void main(void)
{
double x1 = -1.0, x2 = 3.0, root = FindRoot(x1, x2);
printf("Корень: %.10g\n", sircle(root));
printf("При этом абсолютная погрешность равна: %f, а относительная: %.10f\n\n", sircle(EPS), (EPS/(sircle(root)-EPS)));
table(x1, x2);
}
void table(double x1, double x2) //вывод таблицы со значениями
{
printf(" ___________________________\n");
printf("| x | F(x) |\n");
printf("|_____________|_____________|\n");
double step = (x2-x1)/QTY;
for (int i = 0; ((i<=step)||(x1<=x2)); i++)
{
printf("|%-+10.1f |%+10.10f|\n", x1, Func(x1));
printf("|_____________|_____________|\n");
x1+=0.2;
}
}
double Func(double x) //математическая функция
{
double y = sin(x)-x+1;
return y;
}
double sircle(double x) //функция округления до нужного количества знаков
{
x = (x/EPS);
x = (int)x;
x = (x)*EPS;
...