Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Вычисления бесконечных сумм и определенных интегралов (http://www.tehnari.ru/f43/t263458/)

Alessandro4 20.03.2019 09:49

Вычисления бесконечных сумм и определенных интегралов
 
Вложений: 1
Помогите решить задачу

Vladimir_S 20.03.2019 10:39

Цитата:

Сообщение от Alessandro4 (Сообщение 2637078)
Помогите решить задачу

Так. Ну начнем с того, что в методичке, как всегда, брехня. Ну вот не могут они без этого, прям кусок в горло не лезет, если не наврут! Имею в виду, что суммирование должно быть не от k=1, а от k=0, и это принципиальнейший момент!
Два вопроса.
1. Что означает n=1 (1) 5 ? Не понимаю.
2. "В заданных точках х" — это в каких? Где и кем они "заданы"?

Vladimir_S 20.03.2019 10:42

А, насчет первого вопроса — кажется, дошло: это, по всей вероятности, надо понимать, как "для n от 1 до 5 с шагом 1". Ладно.
Второй вопрос остается. Или можно взять произвольную сетку в интервале (-1,+1)?

Vladimir_S 20.03.2019 12:51

И молчанье гробовое было ему ответом...
Ладно, вот Вам программа. Результат выводится в файл, каковой можно использовать для построения графиков (самостоятельного!!!):
Код:

Var
 x:Real;
 n,j:ShortInt;
 P:Array[1..5,-10..10] of Real;
 f:Text;

function Nfact(q:Byte):LongInt;
var
  i:Byte;
  fact:LongInt;
begin
  if q=0 then fact:=1 else
    begin
      fact:=1;
      for i:=1 to q do
        fact:=fact*i;
    end;
  Nfact:=fact;
end;

function Sign(d:Byte):ShortInt;
begin
 if ((d mod 2)=0) then Sign:=1 else Sign:=-1;
end;

function X2np(X:Real; n:Byte):Real;
Var i:Byte;
    Y:Real;
begin
  if n=0 then X2np:=1 else
  if n=1 then X2np:=X else
  begin
    Y:=X;
    for i:=2 to n do Y:=Y*X;
    X2np:=Y;
  end;
end;


function Pnx(n:byte; x:Real):Real;
var
 Sum:Real;
 k:Byte;
begin
 Sum:=0;
 for k:=0 to (n div 2) do
  Sum:=Sum+Sign(k)*Nfact(2*(n-k))/Nfact(k)/Nfact(n-k)/Nfact(n-2*k)*X2np(x,(n-2*k));
 Pnx:=Sum/X2np(2,n);
end;

Begin
 for n:=1 to 5 do
  for j:=-10 to 10 do
  P[n,j]:=Pnx(n,j/10);
 Assign(f,'Result.txt');
 ReWrite(f);
 Writeln(f,'                  n=1        n=2        n=3        n=4        n=5');
 for j:=-10 to 10 do
  begin
  write(f,' x = ',j/10:4:1,'  ');
  for n:=1 to 5 do write(f,P[n,j]:12:7);
  Writeln(f);
  end;
 Close(f);
End.


Alessandro4 20.03.2019 14:37

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

Vladimir_S 20.03.2019 14:55

Цитата:

Сообщение от Alessandro4 (Сообщение 2637125)
но код у них в разы меньше и проще и в предыдущем задании с методом Симпсона было тоже самое

Ну уж... чем богаты! tehno015

Alessandro4 21.03.2019 14:34

Препод сказал мол, создать одну подпрограмму(функцию) факториала и постоянно обращаться к ней при факториале. А можно как то без массива обойтись и сделать код покороче, попроще, ибо мне трудно вникать, препод сказал код можно хоть большим хоть на полстраницы сделать результат будет одинаковый

Vladimir_S 21.03.2019 16:10

Цитата:

Сообщение от Alessandro4 (Сообщение 2637273)
Препод сказал мол, создать одну подпрограмму(функцию) факториала и постоянно обращаться к ней при факториале.

А я что, по-Вашему, сделал? Так и есть — это функция Nfact. Кроме того, там ещё введены функции "знак" ("Sign") — это для -1^k, возведения в целую неотрицательную степень X2np и, собственно, вычисления полинома Лежандра Pnx. Сама же программа занимает всего несколько строк.
Цитата:

Сообщение от Alessandro4 (Сообщение 2637273)
А можно как то без массива обойтись

Можно. Но не нужно. С массивом как раз проще, понятнее и компактнее. Ведь программа в итоге должна вывести результаты для 5 значений n и как минимум для 20 значений x. Такую вот таблицу. Так проще всего заранее сосчитать эту матрицу (массив).
Цитата:

Сообщение от Alessandro4 (Сообщение 2637273)
препод сказал код можно хоть большим хоть на полстраницы сделать результат будет одинаковый

Извините, но за дурость Вашего препода я не отвечаю.
P.S. Может быть, я и неправ, но складывается у меня ощущение, что Вы не хотите толком учиться программированию, а хотите отныть зачёт у препода. Тут я Вам, извините, не помощник: без конца курочить программу в угоду вкусам и пристрастиям Вашего препода я не собираюсь. Хотите по сути разобраться — милости прошу, всегда рад помочь.

Vladimir_S 21.03.2019 16:42

Вложений: 3
И ещё.
Если Вы до сих пор не сподобились оттранслировать и запустить программу, то вот Вам результат её работы:
Вложение 435563
А это — построенные по полученным данным графики:
Вложение 435564
Можете сравнить эти графики с картинкой из Вики (там, правда, еще построено для n=0):
Вложение 435565
и убедиться в правильности работы программы.
Так что идёт Ваш препод... да-да, Вы правильно поняли.

Alessandro4 23.03.2019 13:54

Вложений: 1
Как раз таки хочу учиться программированию, но полтора часа лекции и 4 пары практических по паскалю в две недели... Кхм.. да и тк у меня база(по паскалю) по приходу в ВУЗ была нулевая, мне сейчас немного тяжеловато. Насчет кода, у меня не получается запустить программу в паскале ABC
Вот задания к лабораторной работе:


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.