Часто выбирают равномерное разбиение, в котором все точки расположены на одинаковом расстоянии 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 * h)).Sum;
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);
static void Main(string[] args)
{
Console.WriteLine("Введіть напрям руху");
char S = Console.ReadKey().KeyChar;
S = Char.ToUpper(S);
Console.WriteLine();
Console.WriteLine("Введіть цифрову команду ");
Console.WriteLine();
String temp = Console.ReadLine();
int N = Convert.ToInt16(temp);
Console.WriteLine();
switch (S)
{
case 'П': Console.WriteLine("Робот Рухається на Північ");
break;
case 'З':
Console.WriteLine("Робот Рухається на Захід");
break;
case 'С': Console.WriteLine("Робот Рухається на Схід");
break;
case 'Д': Console.WriteLine("Робот Рухається на Південь");
break;
default:
Console.WriteLine("Помилка вводу напряму руху!");
break;
}
switch (N)
{
case 0:
Console.WriteLine("Робот Продовжив рух ");
break;
case 1:
Console.WriteLine("Робот Повернув на ліво");
break;
case -1 : Console.WriteLine("Робот Повернув на право");
break;
default:
Console.WriteLine("Помилка вводу напряму руху!");
break;
}
Console.ReadKey();
}
Объяснение:
Если я правильно понял условие :) могут возникнуть проблемы в с отображением украинской буквы і
Пусть - какое-то разбиение отрезка [a, b]. Формулой левых прямоугольников называется приближение
Часто выбирают равномерное разбиение, в котором все точки расположены на одинаковом расстоянии 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 * h)).Sum;
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