Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа 10 / LR_10 v / Main
.CPP#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
int const n=10;
void main()
{
clrscr();
void mas_init(float*,float*,float);
double back_Newton(float,float*,float*,float);
double Stirling(float,float*,float*,float);
float X[n+1], F[n+1];
double Ln1, Ln2, Ln3;
float x11,x1,x22,x2,x33,x3,h,h1;
printf("\n Welcome!\n\n");
printf("Program calculation fuction y=f(x).\n\n");
mas_init(X,F,h);
printf("\nInput the argument x1: ");
scanf("%f",&x11);
x1=x11;
Ln1=Stirling(x1,X,F,h);
printf("Ln(x1) = %f\n",Ln1);
printf("\nInput the argument x2: ");
scanf("%f",&x22);
x2=x22;
Ln2=back_Newton(x2,X,F,h);
printf("Ln(x2) = %f\n",Ln2);
printf("\nInput the argument x3: ");
scanf("%f",&x33);
x3=x33;
Ln3=back_Newton(x3,X,F,h);
printf("Ln(x3) = %f\n",Ln3);
printf("\n\nPress any key to exit, please.\n");
getch();
}
void mas_init(float* X, float* F,float h1)
{
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;
h1=X[1]-X[0];
}
//************************************************************//
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);
}
//************************************************************//
/*
double forward_Newton(float x, float* X, float* F, float h)
{
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 back_Newton(float x, float* X, float* F, float h)
{
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,float h)
{
double sum, q, a;
q=(x-X[5])/h;
sum=F[5];
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);
}
Соседние файлы в папке LR_10 v