Advertisement
Domerk

Суммирование рядов

Jan 7th, 2013
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.45 KB | None | 0 0
  1. {Итак, если я ничего не путаю, то для выполнения программы нам потребуется следующее:}
  2. {Sl(n=0)=1  - это легко получается при помощи подстановки начального значения в флормулу}
  3. {прочие значение можно вычислить по формуле Sl(n) = ((n+1)*x^n)/n!}
  4. {Воодим перемнную к, которая вычисляетстся следующим образом: k = Sl(n)/Sl(n-1) = ((n+1)*x)/(n*n)}
  5. {Отсюда получаем: Sl(n)=Sl(n-1)*k то есть Sl(n)=Sl(n-1)*((n+1)*x)/(n*n)}
  6. {Sl(n)=(Sl*(n+1)*x)/(n*n)}
  7.  
  8. {Важно учесть, что для получения кроависых тестовых результатов нужно довольно долго подбирать подходящий эпселан.
  9. Значения, найденные по формуле, могут сильно отличаться от вычесленных при помощи стандартной функции как раз из-за точности.
  10. Пугаться расхождений не стоит, всё работет правильно ;) }
  11.  
  12. {Входные данные: xn, xk, h, eps}
  13. {Выходные данные: sum}
  14.  
  15. var
  16. n, i: byte;
  17. x, xn, xk, sum, sl, eps, e, h: real;
  18.  
  19. begin
  20.  
  21.    writeln ('Введите начальное и конечное значения х, такие, чтобы -2.4 < x <2.4');
  22.    readln (xn, xk); {Считываем начальное и конечное значение х}
  23.  
  24.    writeln ('Введите шаг изменения х - дробное положительное число');
  25.    readln (h); {Считываем шаг изменения х}
  26.  
  27.    writeln ('Введите значение Эпсилон - число, принадлежащее промежутку (0; 0,1]');
  28.    readln (eps); {Считываем значение эпсилона}
  29.  
  30.    x:=xn; {присваиваем х начальное значение}
  31.  
  32.    writeln ('|   x   |   n   |    S    |  (e^x)*(1+x) |'); {выводим на экран шапку таблицы}
  33.    writeln ('------------------------------------------');
  34.  
  35.    repeat {вход в цикл с постусловием }
  36.       sum:=0; {начальному значению суммы присваиваем 0}
  37.       n:=0; {задаём начальное значение n}
  38.       sl:=1; {значение первого слагаемого всегда одинаково}
  39.  
  40.           while abs(sl)>=eps do begin {цикл с предусловием, выполняющийся, пока не достигнута нужная точность}
  41.                 sum:=sum+sl; {вычисляем сумму}
  42.                 n:=n+1; {увеличиваем n}
  43.                 sl:=(Sl*(n+1)*x)/(n*n); {вычисляем новое значение слагаемого}
  44.       end;
  45.      
  46.       e:=exp(x)*(x+1);  {вычисляем контрольное значение левой части данной формулы}
  47.      
  48.       writeln ('|',x:7:2,'|',n:7,'|',sum:9:4,'|',e:14:4,'|'); {выводим всё полученные результаты на экран в виде таблицы}
  49.       writeln ('------------------------------------------');
  50.       x:=x+h; {увеличиваем х на шаг}
  51.  
  52.    until (x>xk); {окончание цикла с постусловием}
  53.  
  54. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement