Построить таблицу зависимости длины ряда n, чтобы обеспечить точность функции ln(x) не меньше заданной - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

1. Построить таблицу зависимости длины ряда n, что обеспечивает точность функции ln(x) не меньше заданное значение eps в точке x = (b + a) / 2, от eps:
eps n Абсолютная
погрешность
Остаточный
член
10-2 4 0.005 0.001
... ... ... ...
Значение eps меняется о 10-2 до 10-14 с шагом 10-3 Разложение в ряд ln(x): 2. Для n (длина ряда фиксированная и равна n), полученного в п.1 при eps = 10-8, в точках xi = a + hi, h = (b – a)/10, i = 0, ..., 10 вычислить абсолютную погрешность и остаточный член ряда. Результаты представить в виде таблицы:
xi Абсолютная
погрешность
Остаточный
член
10-2 0.005 0.001
... ... ...
Закомментированы строки, при которых работает программа для гиперболического синуса sh(x) функция (при этом условии всё работает нормально). Помогите решить проблему: при выводе на экран не меняется значения Абсолютной погрешности в 1-й таблице и соответственно остаточный член остаётся равен нулю! Где-то что-то нужно поправить, но не могу найти где...

Решение задачи: «Построить таблицу зависимости длины ряда n, чтобы обеспечить точность функции ln(x) не меньше заданной»

textual
Листинг программы
program lnx;
 //uses crt;
var
  x, e, s, a, i, b: real;
  n: integer;
 
begin
  //clrscr;
  i := 0.98;               //   начало отрезка
  b := 5.5;                //   конец отрезка
  x := (i + b) / 2;
  e := 0.001;               // точность
  writeln('<br>');
  Write('Точность |');write('n     |');Write('  Абсолютная ошибка   |');writeln(' Остаточный член ряда  |');
  writeln('<br>');
  while e >= power(10, -14) do // продолжаем пока "e" >= 10 в -14
  begin
    s := 0;
    n := 1;
    a := 1;
    repeat
      //a := a * (x - 1) / x;
      a := power(-1,n-1)* power(x-1, n)/n;
      //s := s + a / n;
      s:= s + a;
      n := n + 1;  
    until a / n < e;
    write(e, '    |');
    write(n, '    |');
    //writeln('Сумма ряда',s:25:15);
    //writeln('ln(',x:6:5,')=',Ln(x):25:15);
    write(abs(ln(x) - s):18:15, '    |');           //Абсолютная ошибка
    //a := a * (x - 1) / x;
    a := power(-1,n-1)* power(x-1, n)/n;
    //s := s + a / n;
    s:= s + a;
    writeln(s:18:15, '     |');                        // Остаточный член ряда
   e := e / 1000;
  end;
  writeln('<br>');
  readln;
end.

Объяснение кода листинга программы

  1. Ввод начальных значений переменных: i := 0.98; b := 5.5; x := (i + b) / 2; e := 0.001;
  2. Цикл while для построения ряда: Счетчик n инициализируется единицей. Переменная a инициализируется единицей. Переменная s инициализируется нулем. Цикл выполняется до тех пор, пока остаток от деления абсолютной ошибки на 10 в степени -14 не станет меньше или равным заданной точности e.
  3. В цикле: a := a (x - 1) / x; a := power(-1,n-1) power(x-1, n)/n; s := s + a / n; n := n + 1;
  4. После цикла: Вывод значений n, абсолютной ошибки и остаточного члена ряда.
  5. Ввод-вывод заголовок цикла while: writeln(''); Write('Точность |');write('n     |');Write('  Абсолютная ошибка   |');writeln(' Остаточный член ряда  |'); writeln('');
  6. После цикла while: e := e / 1000;
  7. Ввод-вывод заголовок цикла while: writeln('___'); readln;
  8. Ввод-вывод окончание программы: end.

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы