III. Порядок выполнения работы:
1) Составить вспомогательные функции для вычисления факториала, количества перестановок, а также нисходящих и восходящих разностей.
2) Составить функцию для инициализации массивов, содержащих таблицу задания функции.
3) Составить функции для вычисления значений функции с помощью интерполяционного многочлена Ньютона для интерполяции назад и схемы Стирлинга, содержащие обращения к вспомогательным функциям.
4) Составить головную программу, содержащую обращение к вычислительным процедурам и осуществляющую печать результатов.
5) Провести вычисления по программе:
IV. Выполнение работы:
Точки х2 и х3 лежат в конце таблицы, поэтому для определения значений функций в этих точках нам следует воспользоваться интерполяционным многочленом Ньютона для интерполяции назад.
Точка х1 лежит в середине таблицы. Кроме того
,
т. е. .
Поэтому для нахождения значения функции в точке х1 целесообразно использовать схему Стирлинга.
Для того, чтобы выполнить эту задачу, нам необходимо совершить следующие действия:
1) Составим вспомогательные функции для вычисления факториала, количества перестановок, а также нисходящих и восходящих разностей.
////////////////////////////////////////////////////////////////
Int fact(int I)
{
if (i<=1) return 1;
else return (i*fact(i-1));
}
////////////////////////////////////////////////////////////////
int C(int j, int k)
{
return (fact(k)/(fact(j)*fact(k-j)));
}
////////////////////////////////////////////////////////////////
double down_dif(int r, int k, float* F)
{
double sum=0;
for(int j=0; j<=r; j++)
sum+=pow(-1,j)*C(j,r)*F[k+r-j];
return (sum);
}
////////////////////////////////////////////////////////////////
double up_dif(int r, int k, float* F)
{
return (down_dif(r,k-r,F));
}
////////////////////////////////////////////////////////////////
double down_dif_St(int r, int k, float* F)
{
double sum=0;
for(int j=0; j<=k; j++)
sum+=pow(-1,j)*C(j,k)*F[k-j];
return (sum);
}
////////////////////////////////////////////////////////////////
2) Составим функцию для инициализации массивов, содержащих таблицу задания функции.
void mas_init(float* X, float* F)
{
X[0]=0.3120; F[0]=-0.3060;
X[1]=0.4990; F[1]=-0.0760;
X[2]=0.6870; F[2]=0.0180;
X[3]=0.8740; F[3]=0.0150;
X[4]=1.0620; F[4]=-0.0440;
X[5]=1.2490; F[5]=-0.1210;
X[6]=1.4370; F[6]=-0.1770;
X[7]=1.6240; F[7]=-0.1720;
X[8]=1.8120; F[8]=-0.0650;
X[9]=1.9990; F[9]=0.1800;
X[10]=2.1870; F[10]=0.6080;
}
3) Составим функции для вычисления значений функции с помощью интерполяционного многочлена Ньютона для интерполяции назад и схемы Стирлинга, содержащие обращения к вспомогательным функциям.
////////////////////////////////////////////////////////////////
double back_Newton(float x, float* X, float* F)
{
double sum=F[n], q, a;
q=(x-X[n])/h;
a=q;
for(int i=1; i<=n; i++, a*=(q+i-1))
sum+=a*up_dif(i,n,F)/fact(i);
return (sum);
}
////////////////////////////////////////////////////////////////
double Stirling(float x, float* X, float* F)
{
double sum, q, a;
q=(x-X[6])/h;
sum=F[6];
a=1;
for(int i=1; i<=n; i++, a*=(q*q-i+1))
sum+=q*a*(down_dif_St(2*i-1,i,F)+down_dif_St(2*i,i-1,F))/(fact(2*i-1)*2)+q*q*a*down_dif_St(2*i,i,F)/fact(2*i);
return (sum);
}
////////////////////////////////////////////////////////////////
4) Составим головную программу, содержащую обращение к вычислительным процедурам и осуществляющую печать результатов.
////////////////////////////////////////////////////////////////