Составить программу, вычисляющую заданный
10-11 класс
|
интеграл по формуле Гаусса. Составить программу-функцию для вычисления значений
подъинтегральной функции. Составить головную программу, содержащую обращение к
вычислительным процедурам и осуществляющую печать результатов. Вычислить абсолютную
и относительную погрешность.
интеграл от 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%
Другие вопросы из категории
var n, i, sum : integer;
a : array [1..1000] of integer;
begin readln (n);
sum := 0;
for i := 1 to n do begin
a[i] := random (100);
write (a[i], ' ');
sum := sum + a[i];
end;
writeln;
write (sum / n);
end.
ОБЪЯСНИТЬ ЧТО ВЫПОЛНЯЕТ КАЖДАЯ СТРОКА!!!
Дано описание:
type month = 1..12;
var d:28..31;
m:month;
Переменной d присвоить количество дней в месяце m (год считать не високосным)
500р, составить алгоритм решения, что выйдет дешевле
Читайте также
массиве. Результаты сохранить в одномерном массиве и элементы массива отсортировать по возрастанию Даны три одномерных массива. Упорядочить их по возрастанию элементов. Составить программу проверки, сколько раз повторяется заданное число в каждом массиве. Результаты сохранить в одномерном массиве и элементы массива отсортировать по возрастанию
1) Составить программу, проверяющую, является ли заданное натуральное число совершенным, то есть равным сумме своих положительных делителей, кроме самого этого числа.
2) Напечатать числа в виде следующей таблицы:
5 5 5 5 5
6 6 6 6
7 7 7
8 8
9
задание: дана матрица А(N, N). Составить программу подсчета количества положительных элементов, расположенных выше главной диагонали
2. Составить программу для упорядоченное двух элементов по убыванию.
вывести список книг, изданных после 2003 года.
2)составить программу , организующую массив записей о пяти студентах и их оценках по трем предметам. провести сортировку и вывести список отличников.