Часто выбирают равномерное разбиение, в котором все точки расположены на одинаковом расстоянии 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)
{
//Вытаскиваем фамилии в массив lastnames
string file1 = "C:\\Desktop\\lastname.txt";
StreamReader rd1 = new StreamReader(new FileStream(file1, FileMode.Open), System.Text.Encoding.Default);
string lastname = "";
lastname = rd1.ReadToEnd().Replace("\n", "").Replace("\r", " ");//Считываем строку из файла, удаляя из нее символы переноса строки.
String[] lastnames = lastname.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
//Вытаскиваем номера в массив
string file2 = "C:\\Desktop\\num.txt";
StreamReader rd2 = new StreamReader(new FileStream(file2, FileMode.Open), System.Text.Encoding.Default);
string number = "";
number = rd2.ReadToEnd().Replace("\n", "").Replace("\r", " ");//Считываем строку из файла, удаляя из нее символы переноса строки.
String[] numbers = number.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine("Введите искомый номер телефона:");
string numserch = Console.ReadLine();
//поиск элемента в массиве номеров
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] == numserch)
{
Console.WriteLine("Владелец данного номера: " + lastnames[i]);
}
}
Console.ReadLine();
}
Пусть - какое-то разбиение отрезка [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