Метод гаусса интегрирование
Автор Анастасия Макарова задал вопрос в разделе Другие языки и технологии
помогите сделать прогу в "с++"!!!тема "численное интегрирование функции. метод гаусса" и получил лучший ответ
Ответ от Ormandiore[гуру]
вот, нашла программу на паскале. надеюсь, вам будет не очень сложно вамостоятельно перевести ее в синтаксис с++
program gaussint;
{ Вычисление интегpала десятиточечным методом Гаусса }
{константы десятиточечного метода Гаусса}
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:=pi*sin(pi*x);
end;
function gauss_calc(a,b:real):real; {сам десятиточечный метод Гаусса}
var n,m,s,s1,s2,s3,s4,s5 :real;
begin
m:=(b+a)/2; n:=(b-a)/2;
s1:=g10c1*(f(m+n*g10x1)+f(m-n*g10x1));
s2:=g10c2*(f(m+n*g10x2)+f(m-n*g10x2));
s3:=g10c3*(f(m+n*g10x3)+f(m-n*g10x3));
s4:=g10c4*(f(m+n*g10x4)+f(m-n*g10x4));
s5:=g10c5*(f(m+n*g10x5)+f(m-n*g10x5));
s:=s1+s2+s3+s4+s5;
gauss_calc:=s*(b-a);
end;
{рекурсивная ф-ция подсчета с заданной точностью}
{ gc - ранее посчитаный интеграл на интервале (a,b)}
function gauss(a,b,eps,gc:real):real;
var t,ga,gb :real;
begin
t:=(a+b)/2; {разбиваем интервал на две половинки}
ga:=gauss_calc(a,t); {в каждой половинке считаем интеграл}
gb:=gauss_calc(t,b);
if abs(ga+gb-gc)>eps then {проверяем точность вычислений}
begin
ga:=gauss(a,t,eps/2,ga); {рекурсия для первой половинки}
gb:=gauss(t,b,eps/2,gb); {рекурсия для второй половинки}
end; {при этом точность повышаем, чтобы }
{при сложении ошибка не накапливалась}
gauss:=ga+gb; {интеграл = сумме интегралов половинок}
end;
var
Integral :real;
a,b,eps :real;
begin
write('Введите начало интервала интегрирования a='); readln(a);
write('Введите конец интервала интегрирования b='); readln(b);
write('Введите точность интегрирования eps='); readln(eps);
Integral:=gauss(a,b,eps,gauss_calc(a,b));
writeln('Интеграл = ',Integral);
end.