Разложение в ряд - PascalABC.NET (249677)
Формулировка задачи:
Здравствуйте. Нужна помощь с этим заданием. Как табулировать и строить таблицу я знаю, но не знаю, как начать. Учитель объяснял отдалённо, но я понял, что необязательно считать каждый член, достаточно лишь умножать предыдущий на какое-то число d[i], которое находится по формуле: d[i]:=N[i]/N[i-1].
Вот мои тщетные попытки, уже не соображаю, если честно. Заранее спасибо.
Распечатать таблицу значений ряда и значений системной функции для x, изменяющегося в диапазоне 0..3 с шагом 0.1. Ряд вычисляется с машинной точностью. Вычисление ряда в точке x оформить в виде отдельной функции.
Системная функция: F(x) = sin(x)
Разложение в ряд:
Определение.
Машинной точностью называется такое минимальное ε > 0, для которого в машинной арифметике ещё выполняется условие 1 + ε > 1. Дальнейшее уменьшение ε приведёт к тому, что 1 + ε = 1 из=за ограниченности разрядной сетки в машинном представлении числа.Алгоритм вычисления машинной точности mach_eps:
Решение задачи: «Разложение в ряд»
textual
Листинг программы
function s(x, eps: real): real; var a, sum: real; //текущий член ряда, текущая сумма ряда n: integer; //номер текущего члена ряда begin n := 0; //первый номер равен 0 a := x; //a0=x sum := a; //начальное значение суммы равно a0 x := x * x; //далее x = x^2 (это чтобы на каждой итерации x^2 не вычислять) while abs(a) > eps do //пока модуль очередного члена ряда больше точности, begin //вычисляем сумму ряда inc(n); //номер следующего члена ряда a := -x * a / 4 / n / (n + 0.5); //значение следующего члена ряда sum := sum + a //текущая сумма ряда end; s := sum //после окончания цикла присваиваем сумму возвращаемому значению функции end; var m_eps, t, x: real; //машинная точность, машинный ноль, аргумент функции i, r: integer; //аргумент функции * 10, количество цифр после десятичной точки begin t := 1; //вычисляем машинную точность repeat //повторяем... m_eps := t; //сохраняем текущую машинную точность t := t / 2; //уменьшаем текущую машинную точность x := 1 + t //складываем с 1 until x = 1; //...до тех пор, пока текущая точность не станет менее машинной точности r := trunc(1 - ln(m_eps) / ln(10)); //вычисляем количество цифр после десятичной точки for i := 0 to 30 do //цикл вывода значений begin x := i / 10; //находим x writeln(x:3:1, s(x, m_eps):r+4:r, sin(x):r+4:r) //печатаем всё, что нужно, в нужном формате end; readln end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д