пусть
часто выбирают равномерное разбиение, в котором все точки расположены на одинаковом расстоянии h = (b - a) / n, при этом .
реализация (pascalabc.net): функция int_lr принимает подинтегральную функцию, левую и правую границы отрезка интегрирования и количество отрезков в разбиения. в основной программе интеграл вычисляется для n = 1, 2, 4, 8, 1024, выводится n, результат численного интегрирования и разность между полученным значением и точным значением интеграла. можно заметить, что при увеличении n в 2 раза ошибка уменьшается примерно в 2 раза.
function int_lr(f: real-> real; l, r: real; n: integer): real;
begin
var h : = (r - l) / n;
var s : = 0.to(n - 1).select(i -> f(l + i * ;
result : = s * h;
end;
const exact = 1250 / 3;
begin
var n : = 1;
for var _ : = 1 to 11 do
begin
var int : = int_lr(x -> (x - 5) ** 2 * (10 - x), 0, 10, n);
writeln(n: 4, int: 9: 3, abs(int - exact): 9: 3);
n : = 2 * n;
end;
end.
вывод программы:
1 2500.000 2083.333
2 1250.000 833.333
4 781.250 364.583
8 585.938 169.271
16 498.047 81.380
32 456.543 39.876
64 436.401 19.735
128 426.483 9.816
256 421.562 4.896
512 419.111 2.445
1024 417.888 1.221
var a,b,c: real;
begin
readln(a,b);
if(a > b) then
begin
writeln('a больше');
c : = a;
a : = a*b*3;
b : = (b+c)/ 2;
writeln('a = ',a,' b = ',b);
end;
if(b > a) then
begin
writeln('b больше');
c : = b;
b : = a*b*3;
a : = (a+c)/ 2;
writeln('a = ',a,' b = ',b);
end;
end.
Поделитесь своими знаниями, ответьте на вопрос:
Написать программу для решения циклической k=(sin(1+1)*sin(1+2)*sin(1+3)*sin(1+*sin(1++n), .
ответ:
простая, если на обыкновенном паскале то вот.
в комментариях ошибка, перевод из рад. в градусы на 14 строке.