#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 относительную точность - размер очередного члена ряда относительно текущего значения суммы.
Комментариев нет:
Отправить комментарий