Цитата:
Сообщение от Анастасия93
Мне бы хоть примерную программу,а потом , я по ходу буду уже с преподавателем изменять её(если потребуется).
|
Хорошо, попробуем. Итак, в качестве примера рассматривается интеграл от функции 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.