Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2015, 23:55   #1
DaGgeR18RUS
Новичок
Джуниор
 
Аватар для DaGgeR18RUS
 
Регистрация: 12.01.2015
Сообщений: 2
По умолчанию PascalABC.NET Нахождение суммы ряда

Доброй ночи. Хочу попросить помощи в выводе формулы реккурентного соотношения для лабораторной. Давно уже мучаюсь, но математическая подготовка подкачала. Собственно сама формула которую нужно разложить в ряд:


Наработки, которые имею в данный момент(при подстановке правильной формулы программа должна начать адекватно работать):
Код:
program prog9;
const
  imax = 1000;
var
  x, x2 : real;
  s, a  : real;
  EPS   : real;
  i     : integer;
BEGIN
  {Ввод}
  writeln('Нахождение значения функции F(x)=x+1- П^2/12 -ln(x+1)');
  writeln('через её разложение в ряд.');
  repeat
    write('Введите аргумент х (|x|<1): ');
    readln(x);
    if (abs(x) >= 1) then
      writeln('Аргумент х по модулю должен быть меньше единицы!');
  until (abs(x) < 1);
  repeat
    write('Введите точность EPS (EPS > 0): ');
    readln(EPS);
    if (EPS<=0) then
      writeln('Точность EPS должна быть больше нуля!');
  until (EPS > 0);
  
  {Нахождение суммы ряда с точность EPS}
  a:= ((2*x*x)+1)/4 ; //очередное слагаемое(начиная с первого слагаемого "a")
  i:= 1;              //номер слагаемого
  s:= a;              //сумма ряда(начиная с первого слагаемого "a")
  x2:= x*x;           //квадрат "х" для вычислений
  
  {Пока не достигнута точность}
  while (abs(a) > EPS) and (i <= imax) do
    begin
    inc(i);
    writeln(a); //!!!!!!!!! для отладки
    a:= -1*2*a*(x+1) /(i*x2) ;  //находим следующее слагаемое через предыдущее
    s:=s+a;        //добавляем к сумме
    end;
  
  {Вывод ответа}
  writeln;
  if i<=imax then
    begin
      writeln('Значение функции F(x)=x+1- П^2/12 -ln(x+1)');
      writeln('F(x)= ',s,' - с помощью ряда');
      writeln('F(x)= ',x+1 - sqr(pi)/12 - ln(x+1),' - стандартная функция');
    end
  else
    begin
    writeln('Решение не найдено. Ряд расходится.');
    writeln('F(x)= ',x+1 - sqr(pi)/12 - ln(x+1),' - стандартная функция');
    end;
END.
DaGgeR18RUS вне форума Ответить с цитированием
Старый 13.01.2015, 07:50   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Мне кажется что эта программа в принципе не взлетит...
Я конечно понимаю, что лезу в чужой монастырь, но все же оставлю тут ссыль на пример разложения с описанием: http://www.programmersforum.ru/showp...1&postcount=35
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.01.2015, 05:29   #3
DaGgeR18RUS
Новичок
Джуниор
 
Аватар для DaGgeR18RUS
 
Регистрация: 12.01.2015
Сообщений: 2
По умолчанию

Задачу удалось решить используя неполное рекуррентное соотношение
Код:
program prog9;
const
  imax = 100000;     //выше точность-больше слагаемых
var
  x     : real;      //очевидно это икс, задаваемый пользователем
  s, a  : real;      //сумма, слагаемое
  EPS   : real;      //точность
  i     : integer;   //номер слагаемого
  b,c   : real;      //соотношение
BEGIN
  {Ввод}
  writeln('Нахождение значения функции F(x)=x+1- П^2/12 -ln(x+1)');
  writeln('через её разложение в ряд.');
  repeat
    write('Введите аргумент х (|x|<1): ');
    readln(x);
    if (abs(x) >= 1) then
      writeln('Аргумент х по модулю должен быть меньше единицы!');
  until (abs(x) < 1);
  repeat
    write('Введите точность EPS (EPS > 0): ');
    readln(EPS);
    if (EPS<=0) then
      writeln('Точность EPS должна быть больше нуля!');
  until (EPS > 0);
  
  {Нахождение суммы ряда с точность EPS}
  b:= x*x;            //x^i+1
  c:= 1;              //(-1)^i+1
  a:= ((2*x*x)+1)/4 ; //первое слагаемое
  i:= 1;              //номер слагаемого
  s:= a;              //сумма ряда(начиная с первого слагаемого "a")
  
  {Пока не достигнута точность}
  while (abs(a) > EPS) and (i <= imax) do
    begin
    inc(i);
    c:=-c;
    b:= b*x;
    a:= c*((i+1)*b+1)/sqr(i+1) ; //находим следующее слагаемое через "с" и "b"
    s:=s+a;                      //добавляем к сумме
    end;
  
  {Вывод ответа}
  writeln;
  if i<=imax then
    begin
      writeln('Значение функции F(x)=x+1- П^2/12 -ln(x+1)');
      writeln('F(x)= ',s,' - с помощью ряда');
      writeln('F(x)= ',x+1 - sqr(pi)/12 - ln(x+1),' - стандартная функция');
    end
  else
    begin
    writeln('Решение не найдено. Ряд расходится.');
    writeln('F(x)= ',x+1 - sqr(pi)/12 - ln(x+1),' - стандартная функция');
    end;
END.
DaGgeR18RUS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нахождение суммы нескончаемого ряда тейлора Катя Миронова Помощь студентам 0 03.03.2013 17:07
PascalABC. Вычислить сумму ряда с точностью Е=10^(–5) lems Помощь студентам 0 11.06.2012 13:26
Нахождение суммы членов ряда vinci Общие вопросы C/C++ 0 16.03.2012 13:49
Нахождение конечной суммы ряда Su-34 Помощь студентам 1 21.12.2011 12:52
[Delphi] Нахождение суммы ряда? Yanahant Помощь студентам 1 07.05.2009 01:56