Скачиваний:
16
Добавлен:
01.05.2014
Размер:
3.44 Кб
Скачать
#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