- •Вопрос 26. Сортировка обменом (так называемая "пузырьковая" сортировка).
- •Вопрос 27. Комбинированный тип данных. Запись. Описание записи. Доступ к полям записи
- •Вопрос 28. Оператор with.
- •Вопрос 29. Модуль crt
- •Вопрос 30. Модуль graph
- •Вопрос 31. Инициализация графики, подготовительные работы, управление цветом, закрытие режима
- •Вопрос 32. Процедуры и функции для работы с "графическими примитивами".
- •Вопрос 33. Процедуры для работы с текстом.
- •Вопрос 34. Типизированные файлы. Процедуры и функции для работы с типизированными файлами
- •Вопрос 35. Процедуры и функции для работы с файлами любого типа
- •Вопрос 36. Текстовые файлы, их описание и основные отличия от типизированных файлов.
- •Вопрос 37. Нетипизированные файлы.
- •Вопрос 38. Модули. Модульное программирование.
- •Вопрос 39. Указатели и динамическая память. Выделение и освобождение динамической памяти.
- •Вопрос 40. Основы объектно-ориентированного программирования.
- •Вопрос 41. Метод хорд
- •Вопрос 42. Метод касательных
- •Вопрос 43. Метод итераций
- •Вопрос 44. Методом средних прямоугольников
- •Вопрос 45. Методом трапеций
- •Вопрос 46. Методом Симпсона
- •Вопрос 47. MathCad. Нахождение корней уравнений.
- •Вопрос 48. MathCad. Нахождение определенных интегралов
- •Вопрос 49. MathCad. Построение графика функций
- •Вопрос 50. MathCad. Работа с матрицами
Вопрос 44. Методом средних прямоугольников
Метод прямоугольников — метод численного интегрирования функции одной переменной, заключающийся в замене подынтегральной функции на многочлен нулевой степени, то есть константу, на каждом элементарном отрезке. Если рассмотреть график подынтегральной функции, то метод будет заключаться в приближённом вычислении площади под графиком суммированием площадей конечного числа прямоугольников, ширина которых будет определяться расстоянием между соответствующими соседними узлами интегрирования, а высота — значением подынтегральной функции в этих узлах. Алгебраический порядок точности равен 0.
Если отрезок является элементарным и не подвергается дальнейшему разбиению, значение интеграла можно найти по
Формуле прямоугольников (средних):
Составные квадратурные формулы
В случае разбиения отрезка интегрирования на элементарных отрезков приведённые выше формулы применяются на каждом из этих элементарных отрезков между двумя соседними узлами. В результате, получаются составные квадратурные формулы
Для средних прямоугольников:
Формулу с вычислением значения в средней между двумя узлами точке можно применять лишь тогда, когда подынтегральная функция задана аналитически, либо каким-нибудь иным способом, допускающим вычисление значения в произвольной точке. В задачах, где функция задана таблицей значений остаётся лишь вычислять среднее значение между интегралами, посчитанными по формулам левых и правых прямоугольников соответственно, что приводит к составной квадратурной формуле трапеций.
Поскольку составные квадратурные формулы являются ни чем иным, как суммами, входящими в определение интеграла Римана, при они сходятся к точному значению интеграла. Соответственно, с увеличением точность получаемого по приближённым формулам результата возрастает.
Погрешность метода
Для формулы прямоугольников (средних)
uses crt;
type Func=function(x:real):real; //функциональный тип
{$F+} //описание функций
function F1(x:real):real;
begin
F1:=x*x*x*sqrt(1+x);
end;
function F2(x:real):real;
begin
F2:=1/(3+2*cos(x));
end;
function F3(x:real):real;
begin
F3:=1/(x*sqr(ln(x)));
end;
{$F-}
function Rectangles(a,b:real; f:Func; n:integer):real; //интеграл в первом приближении
var h,f1,sum,x,y:real;
i:integer;
begin
h := (b-a) / n;
sum := 0;
x := a;
for i := 1 to n do
begin
y := x;
x := x + h;
f1 := f((x + y)/2);
sum := sum + f1;
end;
Rectangles:= sum*h;
end;
function RectanglesRunge(a,b:real;f:Func; var n:integer;eps:real):real;//с заданной точностью
var i1,i2:real;
begin
i1 := Rectangles(a,b,f,n);
n := n+n;
i2 := Rectangles(a,b,f,n);
while abs(I1-I2) > 2*eps do
begin
if n >=1000 then break;
i1 := i2;
n := n+n;
i2 := Rectangles(a,b,f,n);
end;
RectanglesRunge := i2;
end;
const eps=0.0001;
a1=0.8;b1=1.0; //переставил местами, а то интеграл отрицательный
a2=0.0;b2=pi/2;
a3=0.0;b3=2.7;
var n:integer;
begin
clrscr;
n:=10;
writeln('Значение интеграла x*x*x*sqrt(1+x) на интервале ',a1:0:1,' ',b1:0:1,' = ',
RectanglesRunge(a1,b1,f1,n,eps):0:5);
n:=10;
writeln('Значение интеграла 1/(3+2*cos(x)) на интервале ',a2:0:1,' ',b2:0:1,' = ',
RectanglesRunge(a2,b2,f2,n,eps):0:5);
n:=10;
writeln('Значение интеграла 1/(x*sqr(ln(x))) на интервале ',a3:0:1,' ',b3:0:1,' = ',
RectanglesRunge(a3,b3,f3,n,eps):0:5);
readln
END.