
Вопрос задан 26.02.2021 в 08:51.
Предмет Информатика.
Спрашивает Екимов Макс.
Составить программу, вычисляющую заданный интеграл по формуле Гаусса. Составить программу-функцию
для вычисления значений подъинтегральной функции. Составить головную программу, содержащую обращение к вычислительным процедурам и осуществляющую печать результатов. Вычислить абсолютную и относительную погрешность. интеграл от 0 до 1 x(1-x)^2 dxПрограммы составлять на Паскале

Ответы на вопрос

Отвечает Архипова Алина.
Const
{константы десятиточечного метода Гаусса}
g10c1 = 0.9739065285 / 6.2012983932;
g10c2 = 0.8650633667 / 6.2012983932;
g10c3 = 0.6794095683 / 6.2012983932;
g10c4 = 0.4333953941 / 6.2012983932;
g10c5 = 0.1488743390 / 6.2012983932;
g10x1 = 0.0666713443 / 6.2012983932;
g10x2 = 0.1494513492 / 6.2012983932;
g10x3 = 0.2190863625 / 6.2012983932;
g10x4 = 0.2692667193 / 6.2012983932;
g10x5 = 0.2955242247 / 6.2012983932;
function f(x: real): real;
begin
f := x * sqr(1 - x)
end;
function gsc(a, b: real): real;
{получение суммы для метода Гаусса}
var
p, q, s, s1, s2, s3, s4, s5: real;
begin
p := (b + a) / 2; q := (b - a) / 2;
s1 := g10c1 * (f(p + q * g10x1) + f(p - q * g10x1));
s2 := g10c2 * (f(p + q * g10x2) + f(p - q * g10x2));
s3 := g10c3 * (f(p + q * g10x3) + f(p - q * g10x3));
s4 := g10c4 * (f(p + q * g10x4) + f(p - q * g10x4));
s5 := g10c5 * (f(p + q * g10x5) + f(p - q * g10x5));
s := s1 + s2 + s3 + s4 + s5;
Result := s * (b - a)
end;
function Gauss(a, b, eps, gs: real): real;
{рекурсивная ф-ция подсчета с заданной точностью eps}
{gs - интеграл на (a,b), получать заранее}
var
m, ia, ib: real;
begin
m := (a + b) / 2;
ia := gsc(a, m);
ib := gsc(m, b);
if abs(ia + ib - gs) > eps then
begin
ia := gauss(a, m, eps / 2, ia); {рекурсия для первой половинки}
ib := gauss(m, b, eps / 2, ib){рекурсия для второй половинки}
end;
Result := ia + ib
end;
function Intg(a, b, eps: real): real;
begin
Result := Gauss(a, b, eps, gsc(a, b));
end;
var
a, b, eps, y1, y2: real;
begin
a := 0;
b := 1;
eps := 1e-6;
y1 := Intg(a, b, eps);
y2:=sqr(b)*(sqr(b)/4-2*b/3+0.5);
writeln('Значение интеграла по методу Гаусса: ', y1:0:8);
writeln('Значение интеграла по формуле: ', y2:0:8);
writeln('Абсолютная погрешность составляет: ', abs(y2-y1):0:8);
writeln('Относительная погрешность составляет: ', abs((y2-y1)/y1)*100:0:6,'%');
end.
Тестовое решение:
Значение интеграла по методу Гаусса: 0.08333337
Значение интеграла по формуле: 0.08333333
Абсолютная погрешность составляет: 0.00000004
Относительная погрешность составляет: 0.000044%
{константы десятиточечного метода Гаусса}
g10c1 = 0.9739065285 / 6.2012983932;
g10c2 = 0.8650633667 / 6.2012983932;
g10c3 = 0.6794095683 / 6.2012983932;
g10c4 = 0.4333953941 / 6.2012983932;
g10c5 = 0.1488743390 / 6.2012983932;
g10x1 = 0.0666713443 / 6.2012983932;
g10x2 = 0.1494513492 / 6.2012983932;
g10x3 = 0.2190863625 / 6.2012983932;
g10x4 = 0.2692667193 / 6.2012983932;
g10x5 = 0.2955242247 / 6.2012983932;
function f(x: real): real;
begin
f := x * sqr(1 - x)
end;
function gsc(a, b: real): real;
{получение суммы для метода Гаусса}
var
p, q, s, s1, s2, s3, s4, s5: real;
begin
p := (b + a) / 2; q := (b - a) / 2;
s1 := g10c1 * (f(p + q * g10x1) + f(p - q * g10x1));
s2 := g10c2 * (f(p + q * g10x2) + f(p - q * g10x2));
s3 := g10c3 * (f(p + q * g10x3) + f(p - q * g10x3));
s4 := g10c4 * (f(p + q * g10x4) + f(p - q * g10x4));
s5 := g10c5 * (f(p + q * g10x5) + f(p - q * g10x5));
s := s1 + s2 + s3 + s4 + s5;
Result := s * (b - a)
end;
function Gauss(a, b, eps, gs: real): real;
{рекурсивная ф-ция подсчета с заданной точностью eps}
{gs - интеграл на (a,b), получать заранее}
var
m, ia, ib: real;
begin
m := (a + b) / 2;
ia := gsc(a, m);
ib := gsc(m, b);
if abs(ia + ib - gs) > eps then
begin
ia := gauss(a, m, eps / 2, ia); {рекурсия для первой половинки}
ib := gauss(m, b, eps / 2, ib){рекурсия для второй половинки}
end;
Result := ia + ib
end;
function Intg(a, b, eps: real): real;
begin
Result := Gauss(a, b, eps, gsc(a, b));
end;
var
a, b, eps, y1, y2: real;
begin
a := 0;
b := 1;
eps := 1e-6;
y1 := Intg(a, b, eps);
y2:=sqr(b)*(sqr(b)/4-2*b/3+0.5);
writeln('Значение интеграла по методу Гаусса: ', y1:0:8);
writeln('Значение интеграла по формуле: ', y2:0:8);
writeln('Абсолютная погрешность составляет: ', abs(y2-y1):0:8);
writeln('Относительная погрешность составляет: ', abs((y2-y1)/y1)*100:0:6,'%');
end.
Тестовое решение:
Значение интеграла по методу Гаусса: 0.08333337
Значение интеграла по формуле: 0.08333333
Абсолютная погрешность составляет: 0.00000004
Относительная погрешность составляет: 0.000044%



Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
Конечно, я могу помочь вам составить программу для вычисления заданного интеграла по формуле Гаусса на языке Паскаль. Вот пример программы, которая решает вашу задачу:
pascalprogram GaussianIntegration; const N = 5; // Количество узлов интегрирования type TFunc = function(x: Real): Real; function SubIntegrand(x: Real): Real; begin Result := x * Power(1 - x, 2); end; function GaussianQuadrature(func: TFunc): Real; const Nodes: array[1..5] of Real = ( -0.9061798459, -0.5384693101, 0.0, 0.5384693101, 0.9061798459 ); Weights: array[1..5] of Real = ( 0.2369268850, 0.4786286705, 0.5688888889, 0.4786286705, 0.2369268850 ); var i: Integer; sum: Real; begin sum := 0; for i := 1 to N do sum := sum + Weights[i] * func((1 + Nodes[i]) / 2); Result := sum / 2; end; var result, exactResult, absoluteError, relativeError: Real; begin result := GaussianQuadrature(SubIntegrand); // Вычисление точного значения интеграла exactResult := 1 / 90; // Вычисление абсолютной и относительной погрешностей absoluteError := abs(exactResult - result); relativeError := absoluteError / exactResult; // Вывод результатов writeln('Вычисленное значение: ', result); writeln('Точное значение: ', exactResult); writeln('Абсолютная погрешность: ', absoluteError); writeln('Относительная погрешность: ', relativeError); end.
В этой программе мы определяем подынтегральную функцию SubIntegrand
, а также функцию GaussianQuadrature
, которая использует формулу Гаусса для вычисления интеграла. В главной программе мы вызываем GaussianQuadrature
с подынтегральной функцией SubIntegrand
, а затем вычисляем точное значение интеграла и погрешности.
Вы можете запустить эту программу на любой среде разработки, поддерживающей язык Паскаль. Она вычислит заданный интеграл, а также выведет значения абсолютной и относительной погрешности.


Топ вопросов за вчера в категории Информатика

Информатика 47

Информатика 33

Информатика 67

Информатика 18

Информатика 25

Информатика 563

Информатика 16
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili