Скачиваний:
34
Добавлен:
01.05.2014
Размер:
270.85 Кб
Скачать

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) Составим головную программу, содержащую обращение к вычислительным процедурам и осуществляющую печать результатов.

////////////////////////////////////////////////////////////////

Соседние файлы в папке LR_10 v