Вычисление функции рядом Тейлора - 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.