Автор работы: Пользователь скрыл имя, 24 Января 2011 в 21:19, реферат
Паскаль – гибкий и развитый в отношении типов данных язык. Привлекательны его рекурсивные возможности, а также поддержка технологии объектно-ориентированного программирования.
Изучение программирования на языке Паскаль может дать хороший старт в огромный и увлекательный мир программирования. Обучение языку программирования проходит намного более эффективно с изучением примеров.
В данной работе рассмотрен пример использования языка программирования высокого уровня Pascal для вычисления определенных интегралов.
Введение 2
1. Различные методы вычисления определенных интегралов 3
1.1. Метод Симпсона для интегрирования функций F(x) по
заданному промежутку и его реализация на языке Pascal 4
1.2. Метод Симпсона для интегрирования функции от двух
переменных F(x,y) по прямоугольной двумерной области и его
реализация на языке Pascal 5
1.3. Метод Ромберга и его реализация на языке Pascal 7
1.4. Метод Гаусса и его реализация на языке Pascal 10
Заключение 16
Литература
Метод вычислений нулей полинома заключается в том, чтобы поделить интервал [0,1] на маленькие подынтервалы и проверить каждый из них на изменение знака полинома. Если изменение знака имеет место, то однократное применение метода секущих позволяет достаточно хорошо определить положение нуля. Для уточнения этого значения применяется метод Ньютона. Для обработки интервала [-1,0] учитывается симметрия.
Листинг 1.7. Процедура compute_gauss_coeffs модуля integral
procedure
compute_gauss_coeffs(deg:word)
const
eps=6.0e-20;
var
i,index:word;
P0k, P0k_1,D0k, P1k,P1k_1, D1k,
x0,x1,y,z,dx,x,u:real;
procedure legendre_poly(n:word; x:real; var Pk,Pk_1,Dk:real);
var
Pk_2,Dk_1,Dk_2:real;
i,j,k:word;
begin
If n=0 then
Begin
Pk:=1.0;
Dk:=0.0;
end
else
begin
Pk_1:=1.0;
Pk:=x;
Dk_1:=0.0;
Dk:=1.0;
i:==3;
j:=1;
for k:=2 to n do
begin
Pk_2:=Pk_1;
Pk_1:=Pk;
Dk_2:=Dk_1;
Dk_1:=Dk;
Pk:=(i*x*Pk_1-j*Pk_2)/k;
Dk:=(i*(Pk_1+x*Dk_1)-j*Dk_2)/
Inc(I,2);
Inc(j);
end;
end
end;{legendre_poly}
begin{computr_gauss_
index:=(deg+1) div 2;
dx:=1.0/(10.0*deg);
x0:=0.0;
x1:=x0+dx;
if Odd(deg) then
begin
zero[index]:=0.0;
legendre_poly(deg,x0,P0k, P0k_1,D0k);
weight[index]:=2.0/(P0k_1*D0k*
end;
for i:=0 to 10*deg-1 do
begin
x0:=x1;
x1:=x1+dx;
legendre_poly(deg,x0,P0k_1,
legendre_poly(deg,x1,P1k,P1k_
if P0k*P1k<=0.0 then
begin
x:=x0-P0k*dx/(P1k-P0k);
legendre_poly(deg,x,P0k,P0k_1,
u:=P0k/D0k;
y:=x-u;
while Abs(x-y)>=eps do
begin
if keyPressed then begin
writeln(‘>=eps loop:’,x:10:10,’ ‘, y:10:10,’ ‘,Abs(x-y):10);
readln;
end;
x:=y;
legendre_poly(deg,x,P0k,P0k_1,
u:=P0k/D0k;
y:=x-u;
end;
inc(index);
legendre_poly(deg,y,P0k,P0k_1,
zero[index]:=y;
weight[index]:=2.0/(P0k_1*D0k*
if index=deg then
Break;
end;
end;
For i:=1 to deg div 2 do
begin
Zero[i]:=zero[deg-i+1];
Weight[i]:=weight[deg-i+1];
end;
end;{compute_gauss_coeffs}
В функции gauss (листинг 1.8.) запрограммирован один гауссовский шаг на заданном интервале. Конечно, серьезная прикладная программа будет делить интервал на меньшие подынтервалы, применять эту процедуру к каждому из них адаптивным способом.
Листинг1.8. Функция gauss модуля integral
Function
gauss(F:real_fun;x0,x1:real;
var
Index:word;
a,b,sum:real;
begin
a:=0.5*(x1-x0);
b:=0.5*(x1+x0);
sum:=0.0;
for index:=1 to deg do begin
sum:=sum+F(a*zero[index]+b)*
if KeyPressed then
end;
gauss:=a*sum;
end;
end.
Заключение
В
данной работе были рассмотрены различные
методы интегрирования определенных интегралов
и их реализация на языке программирования
высокого уровня Pascal. Таким образом было
показано, что данный язык программирования
возможно использовать для решения различных
задач из области высшей математики и
численных методов. В данной работе затронута
лишь одна проблема – проблема вычисления
интегралов, но Pascal позволяет решать и
такие проблемы как: решение дифференциальных
уравнений, вычисление с полиномами, решение
нелинейных уравнений, вычисления связанные
с линейной алгеброй.
Литература