Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 26.01.2010, 09:50   #11 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Linka Посмотреть сообщение
Спасибо еще раз.

Прошу прощения, за возможно глупый вопрос, но имеет ли место быть в этом решении рекуррентная формула ?
В какой-то мере да - каждый следующий член ряда вычисляется из предыдущего.
Vladimir_S вне форума   Ответить с цитированием

Старый 26.01.2010, 09:50
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Если решение проблемы затянулось - можете прочитать данные темы

Вычислить методом тарапеции в VBA
Вычислить сумму

Старый 30.01.2010, 01:37   #12 (permalink)
Linka
Member
 
Аватар для Linka
 
Регистрация: 24.01.2010
Сообщений: 43
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 26
По умолчанию

Уважаемый Владимир. У меня к вам еще один вопрос, уже не совсем по паскалю, а связанный непосредственно с математикой. Прошу прощения за большой пост, но не знаю как иначе объяснить.

Проблема, в том, что оператор вычисления, нужно вывести из рекуррентной формулы.

Приведу пример, который был дан как образец к заданию:
Ссылка удалена

вот ниже выкладываю, что вышло у меня после разложения в ряд (сверху само задание, что в самом первом сообщении...):
Ссылка удалена
Ссылка удалена

И полученная рекуррентная формула, отличается от нашего оператора
a:=-a*SQR(2*Xs)/(2*n-1)/(2*n);

Не могли, бы вы описать, как получился наш оператор и почему моя формула неверна ? Спасибо большущее сразу

Последний раз редактировалось Fenix; 11.06.2013 в 13:02 Причина: Ссылка мертва
Linka вне форума   Ответить с цитированием
Старый 30.01.2010, 09:04   #13 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Linka Посмотреть сообщение

И полученная рекуррентная формула, отличается от нашего оператора
a:=-a*SQR(2*Xs)/(2*n-1)/(2*n);

Не могли, бы вы описать, как получился наш оператор и почему моя формула неверна ? Спасибо большущее сразу
Собственно, отличаются они знаменателем. Вот давайте его и рассмотрим.
В знаменателе исходного выражения стоит величина (2n)! . Нарисуем, для наглядности, таблицу:
Код:
   n                       (2n)!
   1                         2*1
   2                     4*3*2*1
   3                 6*5*4*3*2*1
   4             8*7*6*5*4*3*2*1
Таким образом, ясно, что для того, чтобы получить следующее (n-ое) значение знаменателя, нужно предыдущее умножить на 2n*(2n-1). Что в программе и сделано.
Vladimir_S вне форума   Ответить с цитированием
Старый 09.02.2010, 20:45   #14 (permalink)
Linka
Member
 
Аватар для Linka
 
Регистрация: 24.01.2010
Сообщений: 43
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 26
По умолчанию

Владимир, спасибо ) Вы мне очень помогли )

И еще если позволите, два, на сей раз последних, вопроса:

1.Что делает эта строка ?
Код:
Until Abs(a)<1E-7;

2.Чтобы в третьем столбце выводился порядковый номер элемента в ряде, надо менять всю структуры программы ? Как я понимаю, функция может только одно какое-то значение возвращать, и n из нее нельзя показать ?
Linka вне форума   Ответить с цитированием
Старый 09.02.2010, 21:26   #15 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Linka Посмотреть сообщение
Владимир, спасибо ) Вы мне очень помогли )

И еще если позволите, два, на сей раз последних, вопроса:

1.Что делает эта строка ?
Код:
Until Abs(a)<1E-7;
2.Чтобы в третьем столбце выводился порядковый номер элемента в ряде, надо менять всю структуры программы ? Как я понимаю, функция может только одно какое-то значение возвращать, и n из нее нельзя показать ?
1. Эта строка прерывает вычисление: ведь ряд - это бесконечная сумма, значит нужен критерий, по которому можно остановить расчет. Я выбрал такой: вычисление останавливается, когда следующий член ряда (и все остальные, соответственно) оказывается по абсолютной величине меньшим наперед заданного малого числа, в данном случае (с потолка) 1E-7. Конечно, можно и более "научно", но для этого надо вспоминать теорию остаточных членов функциональных рядов, а мне лень.
2. Не очень понятен вопрос. В вычислении функции для каждого значения аргумента участвуют формально ВСЕ члены ряда со ВСЕМИ номерами, от 1 до бесконечности. В данном случае бесконечность заменена на некое максимальное значение n, которое получается при "срабатывании" условия, описанного в п.1. Вас интересует его вывести?
Если да, то, действительно, придется несколько изменить программу, в частности, заменить функцию процедурой. Как-то так:
Код:
VAR
 X,SUM:REAL;
 i,Nmax:INTEGER;

Procedure SUM_CALC(Xs:REAL; var S:REAL; var n:INTEGER);
 VAR
   a:REAL;
 Begin
  a:=-SQR(2*Xs)/2;
  S:=1+0.5*a;
  n:=1;
  Repeat
   Inc(n);
   a:=-a*SQR(2*Xs)/(2*n-1)/(2*n);
   S:=S+0.5*a;
  Until Abs(a)<1E-7;
 End;

BEGIN
 For i:=0 TO 45 DO
  Begin
   X:=Pi*i/90;
   SUM_CALC(x, SUM, Nmax);
   WriteLn(i:2,'*Pi/90', SUM:10:5, SQR(Cos(X)):10:5, Nmax:5);
  End;
 ReadLn;
END.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 07:34.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.