Write a C program on Cubic spline interpolation method by MistarAV

 #include<stdio.h>

#include<conio.h>

#include<math.h>

void main(){

clrscr();

char choice='y';

int n,i,j,k;

float h[10],a,b,c,d,sum,s[10]={0},x[10],F[10],f[10],p,m[10][10]={0},temp;

printf("No of samples? ");

scanf("%d",&n);

printf("\nEnter all sample points: ");

for(i=0;i<n;i++)

scanf("%f%f",&x[i],&f[i]);

for(i=n-1;i>0;i--){

F[i]=(f[i]-f[i-1])/(x[i]-x[i-1]);

h[i-1]=x[i]-x[i-1];

}

//*********** formation of h, s , f matrix **************//

for(i=1;i<n-1;i++){

m[i][i]=2*(h[i-1]+h[i]);

if(i!=1){

m[i][i-1]=h[i-1];

m[i-1][i]=h[i-1];

}

m[i][n-1]=6*(F[i+1]-F[i]);

}

//*********** forward elimination **************//

for(i=1;i<n-2;i++){

temp=(m[i+1][i]/m[i][i]);

for(j=1;j<=n-1;j++)

m[i+1][j]-=temp*m[i][j];

}

//*********** backward substitution *********//

for(i=n-2;i>0;i--){

sum=0;

for(j=i;j<=n-2;j++)

sum+=m[i][j]*s[j];

s[i]=(m[i][n-1]-sum)/m[i][i];

}

while(choice=='y'){

printf("\nEnter x : ");

scanf("%f",&p);

for(i=0;i<n-1;i++)

if(x[i]<=p&&p<=x[i+1]){

a=(s[i+1]-s[i])/(6*h[i]);

b=s[i]/2;

c=(f[i+1]-f[i])/h[i]-(2*h[i]*s[i]+s[i+1]*h[i])/6;

d=f[i];

sum=a*pow((p-x[i]),3)+b*pow((p-x[i]),2)+c*(p-x[i])+d;

}

printf("\nCoefficients of sub intervals are : %f\n%f\n%f\n%f",a,b,c,d);

printf("\nFunctional value is: %f",sum);

printf("\nContinue (y/n) ? ");

scanf("%c",&choice);

}

getch();

}





Output

No of samples? 5

Enter all sample points: 1 2

2 3

3 4

4 5

5 6

Enter x : 3.5

Coefficients of sub intervals are : 0.000000

0.000000

1.000000

4.000000

Functional value is: 4.500000

Continue (y/n) ?

Comments

Popular posts from this blog

Google Apprenticeship 2023 scheme

SILENT CRYPTOMINER v2.0.1 - MINER FOR ETH ― ETC ― XMR & MORE BY MISTARAV

How to install VS Code in an Android Phone by Termux ?