#c_sharp #алгоритм #ряды
Господа, нужна помощь по понимаю задачи вычисления суммы ряда с определенной точностью.
Насколько я понимаю, последнее слагаемое ряда не должно превышать точность.
Алгоритм, приведенный ниже, показывает очень похожий на правду результат с положительными
иксами, но как дело доходит до отрицательных, сумма ряда может сильно отличаться от
оригинального значения экспоненты в данной степени.
Для подтверждения того, о чем я говорю, приведу пару примеров.
Вопрос: такое сильное отличие при работе с отрицательными степенями экспоненты -
это нормально или это косяк алгоритма? (Во втором примере сумма ряда вообще отрицательная,
хотя экспонента ограничена снизу нулем).
static void Main(string[] args)
{
double eps, x, i = 1, sum = 0, addend = 1;
Console.WriteLine("Введите x.");
x = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Введите eps.");
eps = Convert.ToDouble(Console.ReadLine());
while (Math.Abs(addend) > eps)
{
sum += addend;
addend = addend * x / i;
++i;
}
sum += addend;
Console.WriteLine("Значение суммы ряда функции exp(x) в точке " + x + " с точностью
" + eps + " равно " + sum);
Console.WriteLine("Точное значение равно " + Math.Exp(x));
Console.ReadKey();
}
Пример 1 (запуск с положительным значением икса):
Введите x.
16
Введите eps.
0,000001
Значение суммы ряда функции exp(x) в точке 16 с точностью 1E-06 равно
8886110,52050769
Точное значение равно 8886110,52050787
Пример 2 (запуск с отрицательным значением икса):
Введите x.
-13
Введите eps.
0,1
Значение суммы ряда функции exp(x) в точке -13 с точностью 0,1 равно
-0,0251088977651358
Точное значение равно 2,26032940698105E-06
Ответы
Ответ 1
Cмотрите. Вы пытаетесь вычислить значение 2.26*10^-6 с точностью 0.1. Естественно, Ваш цикл останавливается гораздо раньше, чем значение приближается к точному. Выводите значения addend и sum на каждой итерации, и Вы увидите, в чем дело. Вы можете задавать не абсолютную, a относительную точность - размер очередного члена ряда относительно текущего значения суммы.
Комментариев нет:
Отправить комментарий