return 3*cos(arg/2)*exp(arg/4) + 5*sin(2.5*arg)*exp(-arg/3) + 2*arg;
}
double p(double arg)
{
return pow(arg-a,-alpha)*pow(b-arg,-beta);
}
double find_mu(int deg, double a, double b)//нахождение mu
{
if(a)
if(deg) return (pow(b,deg)*pow(b-::a,1-alpha)-pow(a,deg)*pow(a-::a,1-alpha))/(1+deg-alpha)+::a*deg/(1+deg-alpha)*find_mu(deg-1,a,b);
else return (pow(b-::a,1-alpha)-pow(a-::a,1-alpha))/(1-alpha);
else
if(deg) return (pow(a,deg)*pow(::b-a,1-beta)-pow(b,deg)*pow(::b-b,1-beta))/(1+deg-beta)+::b*deg/(1+deg-beta)*find_mu(deg-1,a,b);
else return (pow(::b-a,1-beta)-pow(::b-b,1-beta))/(1-beta);
}
void init_param(double a, double b)//разбиение на отрезки
{
for(int i = 0; i < n; i++)
node_x[i] = a + i*(b-a)/(n-1);
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
arr_x[i][j] = pow(node_x[j],i);
for(unsigned int i = 0; i < n; i++)
mu[i] = find_mu(i, a, b);
}
void gauss() // считаем коэф. Кв. Формулы методом Гаусса
{
for(int i = 0; i < n; i++)
for(int j = i+1; j < n; j++)
{
double koef = arr_x[j][i]/arr_x[i][i];
for(int k = i; k < n+1; k++)
arr_x[j][k] -= arr_x[i][k]*koef;
mu[j] -= mu[i]*koef;
}
A_koefs[n-1] = mu[n-1]/arr_x[n-1][n-1];
for(int i = n-2; i >= 0; i--)
{
double temp = 0;
for(int j = n-1; j > i; j--)
temp += arr_x[i][j]*A_koefs[j];
A_koefs[i] = (mu[i] - temp)/arr_x[i][i];
}
}
double simple_nk(double a, double b)//подсчет интеграла на каждом из отрезков
{
cout<<"Simple Newton Kotes start"<<endl;
double result = 0;
init_param(a,b);
gauss();
cout<<"Interval of integration: ["<<a<<"; "<<b<<"]"<<endl;
cout<<"Number of points: "<<n<<endl;
for(int i = 0; i < n; i++)
cout<<"A["<<i+1<<"] = "<<A_koefs[i]<<endl;
for(int i = 0; i < n; i++)
result += A_koefs[i]*f(node_x[i]);
cout<<"Result: "<<result<<endl;
cout<<"Simple Newton Kotes stop"<<endl;
cout<<endl;
return result;
}
double dif_nk(unsigned int k) //суммирование значений интегралов на отрезках
{
double result = 0;
if(k - 1)
{
cout<<"Composite Newton Kotes start"<<endl;
cout<<"----------------------------"<<endl;
double h = (b - a)/(k-1);
for(double i = a; i + h <= b; i += h)
result += simple_nk(i, i + h);
}
else
{
cout<<"Wrong number of points"<<endl;
exit(1);
}
cout<<"Result: "<<result<<endl;
cout<<"Composite Newton Kotes stop"<<endl;
return result;
}
double find_optim()
{
double S4 = dif_nk(5);
double S8 = dif_nk(9);
double H = (b - a)/4;
double ch = 1 - pow(2.0,-n);
double zn = fabs(S4 - S8);
double k = 1/static_cast<double>(n);
return H*pow(eps*ch/zn,k);
}
--------------------------------------------------------------------------------Simple Newton Kotes start
Interval of integration: [1.7; 3.2]
Number of points: 3
A[1] = 0.250000000000001
A[2] = 0.999999999999998
A[3] = 0.250000000000001
Result: 9.3772655647162
Simple Newton Kotes stop
Input number of nodes for composite method
8
Composite Newton Kotes start
---------------------------Simple Newton Kotes start
Interval of integration: [1.7; 1.91428571428571]
Number of points: 3
A[1] = 0.0357142857142842
A[2] = 0.142857142857146
A[3] = 0.0357142857142844
Result: 0.830415466510424
Simple Newton Kotes stop
Simple Newton Kotes start
Interval of integration: [1.91428571428571; 2.12857142857143]
Number of points: 3
A[1] = 0.0357142857142858
A[2] = 0.142857142857142
A[3] = 0.0357142857142861
Result: 0.922533733328308
Simple Newton Kotes stop
Simple Newton Kotes start
Interval of integration: [2.12857142857143; 2.34285714285714]
Number of points: 3
A[1] = 0.0357142857142838
A[2] = 0.142857142857146
A[3] = 0.0357142857142846
Result: 1.12682318518261
Simple Newton Kotes stop
Simple Newton Kotes start
Interval of integration: [2.34285714285714; 2.55714285714286]
Number of points: 3
A[1] = 0.035714285714292
A[2] = 0.142857142857131
A[3] = 0.0357142857142918
Result: 1.37615893217413
Simple Newton Kotes stop
Simple Newton Kotes start
Interval of integration: [2.55714285714286; 2.77142857142857]
Number of points: 3
A[1] = 0.0357142857142576
A[2] = 0.142857142857199
A[3] = 0.0357142857142583
Result: 1.59627617049209
Simple Newton Kotes stop
Simple Newton Kotes start
Interval of integration: [2.77142857142857; 2.98571428571429]
Number of points: 3
A[1] = 0.0357142857143121
A[2] = 0.142857142857091
A[3] = 0.0357142857143118
Result: 1.7263825325223
Simple Newton Kotes stop
Result: 7.57859002020986
Composite Newton Kotes stop
Для продолжения нажмите любую клавишу . . .
-------------------------------------------------------------------------------Значение при применении малой трехточечной квадратурной формулы с равностоящими узлами без разбиения дала менее точный результат, чем при разбиении отрезка на части.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.