Вычисление функции рядом Тейлора - C (СИ)
Формулировка задачи:
Помогите пожалуйста разобраться с задачей:
Вычислить и вывести на экран значения исходной функции , значения функции, рассчитанное с помощью ряда Тейлора, на интервале от х нач до х кон из области определения функции с шагом dx и точностью ԑ. На экране так же должно отображаться количество просуммированных членов ряда.
(Нужно написать программу на си)
Вот моя программа, считает не правильно, не понимаю где ошибка
#include <stdio.h> #include <conio.h> #include <math.h> #include <locale.h> int main() { setlocale(LC_ALL, "rus"); int n = 0; double nach, kon, dx, x; double e, eps, sum = 0; printf("Введите начальное значение --> "); scanf("%lf", &nach); printf("Введите конечное значение --> "); scanf("%lf", &kon); printf("Введите точность --> "); scanf("%lf", &eps); printf("Введите число шагов --> "); scanf("%lf", &dx); printf("\n|---------------------------------------------------------------------------------------------------------|\n"); printf("| Значение аргумента | Значение функции | Кол-во просуммированных членов ряда |"); printf("\n|---------------------------------------------------------------------------------------------------------|\n"); x = nach; while (x <= kon) { e = x; sum = 0; n = 0; do{ sum += e; e = (pow(-1.0, n)*pow(x, 2 * n + 1)) / (2 * n + 1); n++; } while (fabs(e) <= eps); printf("|%.2lf |%lf |%d |", x, sum, n ); printf("\n|---------------------------------------------------------------------------------------------------------|\n"); x += dx; } getch(); return 0; }
Решение задачи: «Вычисление функции рядом Тейлора»
textual
Листинг программы
int main() { setlocale(LC_ALL, "rus"); int n = 0; double nach, kon, dx, x; double e, eps, sum = 0; printf("nach --> "); scanf("%lf", &nach); printf("kon --> "); scanf("%lf", &kon); printf("eps --> "); scanf("%lf", &eps); printf("dx --> "); scanf("%lf", &dx); dx=(kon-nach)/dx; /* !!! */ printf("\n|---------------------------------------------------------------------------------------------------------|\n"); printf("| x | f(x) | n |"); printf("\n|---------------------------------------------------------------------------------------------------------|\n"); x = nach; while (x <= kon) { e = x; sum = 0; n = 0; do{ sum += e; e = (pow(-1.0, n)*pow(x, 2 * n + 1)) / (2 * n + 1); n++; } while (fabs(e) > eps); /* !!! */ printf("|%.2lf |%lf |%d |", x, sum, n ); printf("\n|---------------------------------------------------------------------------------------------------------|\n"); x += dx; } getch(); return 0; }
Объяснение кода листинга программы
- Установка локали на русский язык с помощью функции setlocale.
- Инициализация переменных: n - счетчик, используемый в цикле do-while; nach, kon - границы интегрирования; dx - шаг интегрирования; e, eps - коэффициенты, используемые в формуле Тейлора; sum - сумма ряда Тейлора; x - текущее значение переменной интегрирования.
- Ввод границ интегрирования, шага интегрирования, коэффициентов и начального значения переменной интегрирования с помощью функции scanf.
- Вычисление значения dx, используя формулу (kon-nach)/dx.
- Вывод таблицы с графами функции и ее приближениями по ряду Тейлора с помощью функции printf.
- Использование цикла while для вычисления значений функции и ее приближений на заданном интервале. Внутри цикла do-while происходит вычисление значения суммы ряда Тейлора и ее приближения.
- Вывод очередного значения x, значения суммы ряда Тейлора, значения счетчика n и значения переменной e с помощью функции printf.
- Проверка условия для выхода из цикла do-while с помощью оператора if.
- Вывод таблицы с графами функции и ее приближениями по ряду Тейлора с помощью функции printf.
- Увеличение значения x на шаг интегрирования dx.
- Завершение программы с помощью функции getch и возврат значения 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д