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

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Пожалуйста, помогите написать программу в Паскале. (http://www.tehnari.ru/f41/t72359/)

Анастасия93 25.04.2012 17:19

Пожалуйста, помогите написать программу в Паскале.
 
Тема вычисление интегралов с бесконечными пределами.
Заранее огромное преогромное спасибо)

Vladimir_S 25.04.2012 17:22

Цитата:

Сообщение от Анастасия93 (Сообщение 723394)
Тема вычисление интегралов с бесконечными пределами.
Заранее огромное преогромное спасибо)

Вот так-таки на все случаи жизни? Для любых-прелюбых несобственных интегралов? Нет уж, такое Вы лучше сами. Я, например, не возьмусь.

Анастасия93 25.04.2012 17:42

Да,на любые несобственные интегралы.Вычисление интеграллов с бесконечными пределами - тема курсовой работы.
И на эту тему нужна программа в паскале.
Вы сможете мне помочь?

Vladimir_S 25.04.2012 19:49

Цитата:

Сообщение от Анастасия93 (Сообщение 723407)
Вы сможете мне помочь?

Вероятно, да, если Вы выложите свои наработки. А делать за Вас курсовую "с нуля" - ну уж это, извините, с какой стати...

Анастасия93 04.05.2012 14:41

Const
E=0.001;
Var
h,a,b,Jn,J2n:real;
N,i:Word;
Begin
Write('a= ');
Readln(a);
Write('b= ');
Readln(b);
N:=2;
h:=(b-a)/N;
J2n:=0;
For i:=1 to N do
J2n:=J2n+h*Cos(a+h*i-h/2);
Repeat
Jn:=J2n;
N:=N*2;
h:=(b-a)/N;
J2n:=0;
For i:=1 to N do
J2n:=J2n+h*Cos(a+h*i-h/2);
Until Abs(Jn-J2n)<=E;
Writeln(' Integral = ',J2n:0:6);
Writeln('Accurate value = ',(Sin(b)-Sin(a)):0:6);
Readln;
End.

Vladimir_S 04.05.2012 15:26

Так, но это программа расчета обычного (собственного) интеграла от вполне конкретной функции Cos(x). Здесь не вижу никаких проблем. Уточните задание: всё-таки нужно написать программу вычисления конкретной функции или любой? А если любой, то как ее задать? Нет, пока не понимаю. Может быть, у Вас есть текст задания по курсовой? Выложите, посмотрим.

Анастасия93 25.05.2012 20:17

В методологическом указании к курсовой,описана только цель.
Задание на курсовую работу - Вычисление интегралов с бесконечными пределами.
Я,если честно сама не совсем понимаю,какая нужна программа.
Знала бы,не просила бы помощи...
Мне бы хоть примерную программу,а потом , я по ходу буду уже с преподавателем изменять её(если потребуется).

Vladimir_S 27.05.2012 11:19

Цитата:

Сообщение от Анастасия93 (Сообщение 737830)
Мне бы хоть примерную программу,а потом , я по ходу буду уже с преподавателем изменять её(если потребуется).

Хорошо, попробуем. Итак, в качестве примера рассматривается интеграл от функции 1/х². Можно сосчитать его в пределах от 0.1 до ∞, благо известно, что он равен 10. Поскольку в программе подынтегральная функция задана через подпрограмму, она, естественно, может быть заменена другой. Вероятно, в этом и состоит "универсальность".
Для вычисления интеграла в программе применен метод парабол (Симпсона). Алгоритм работы программы:

1. Ввод исходных данных:
а) нижний предел (в данном случае ввести 0.1).
б) некое исходное разумное значение верхнего предела; в дальнейшем при работе программы верхний предел будет наращиваться. При тестировании введите несколько десятков, скажем, 10, или 20, или 27 - не так уж и важно. Очень большие числа нежелательны. Равно как и слишком маленькие. Ориентируйтесь на область, где подынтегральная функция уже спадает раз в 10-100 от исходных значений.
в) точность результата.

2. Ищется оптимальный шаг путем увеличения числа точек промежутка от нижнего до исходного верхнего предела.

3. Наращивается верхний предел с сохранением ранее полученного шага разбиения.

4. Выводится результат.

Код:

Var
 a,b,b0,eps,Simp1,Simp2:Real;
 j,N,N0:Integer;

Function F(z:real):real;
begin
 F:=1/Sqr(z);
end;

Function Simpson(As,Bs:Real; Ns:Integer):Real;
var
 i:Integer;
 Sum,h:Real;
begin
 h:=(Bs-As)/(2*Ns);
 Sum:=(F(As)+F(Bs))/3*h;
 for i:=1 to Ns do
  Sum:=Sum+4.0*h/3.0*F(As+h*(2*i-1));
 for i:=2 to Ns do
  Sum:=Sum+2.0*h/3.0*F(As+h*(2*i-2));
 Simpson:=Sum;
end;

Begin
 Write('Lower limit = ');
 Readln(a);
 Write('Upper limit (initial value) = ');
 Readln(b0);
 b:=b0;
 Write('Accuracy (e.g. 0.0001) = ');
 Readln(Eps);
 N0:=10;
 N:=N0;
 Simp2:=Simpson(a,b,N);
 Repeat
  Simp1:=Simp2;
  N:=N+N0;
  Simp2:=Simpson(a,b,N);
 Until Abs(Simp1-Simp2)<Eps;
 N0:=N;
 Repeat
  Simp1:=Simp2;
  b:=b+b0;
  N:=N+N0;
  Simp2:=Simpson(a,b,N);
 Until Abs(Simp1-Simp2)<Eps;
 Writeln('Result:  ',Simp2:0:(Round(Ln(1/Eps)/Ln(10))+1));
 Readln
End.



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

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