源自於
http://www.dailyfreecode.com/Code/newtons-backward-difference-method-2380.aspx
Code for NEWTON'S BACKWARD DIFFERENCE METHOD in C Programming
#include<stdio.h> #include<conio.h> #include<math.h> void main() { float x[10],y[10][10],sum,p,u,temp; int i,n,j,k=0,f,m; float fact(int); clrscr(); printf("\nhow many record you will be enter: "); scanf("%d",&n); for(i=0; i<n; i++) { printf("\n\nenter the value of x%d: ",i); scanf("%f",&x[i]); printf("\n\nenter the value of f(x%d): ",i); scanf("%f",&y[k][i]); } printf("\n\nEnter X for finding f(x): "); scanf("%f",&p); for(i=1;i<n;i++) { for(j=i;j<n;j++) { y[i][j]=y[i-1][j]-y[i-1][j-1]; } } printf("\n_____________________________________________________\n"); printf("\n x(i)\t y(i)\t y1(i) y2(i) y3(i) y4(i)"); printf("\n_____________________________________________________\n"); for(i=0;i<n;i++) { printf("\n %.3f",x[i]); for(j=0;j<=i;j++) { printf(" "); printf(" %.3f",y[j][i]); } printf("\n"); } i=0; do { if(x[i]<p && p<x[i+1]) k=1; else i++; }while(k != 1); f=i+1; u=(p-x[f])/(x[f]-x[f-1]); printf("\n\n u = %.3f ",u); n=n-i+1; sum=0; for(i=0;i<n;i++) { temp=1; for(j=0;j<i;j++) { temp = temp * (u + j); } m=fact(i); sum = sum + temp*(y[i][f]/m); } printf("\n\n f(%.2f) = %f ",p,sum); getch(); } float fact(int a) { float fac = 1; if (a == 0) return (1); else fac = a * fact(a-1); return(fac); } /* ______________________________________ OUT PUT ______________________________________ how many record you will be enter: 5 enter the value of x0: 2.5 enter the value of f(x0): 9.75 enter the value of x1: 3 enter the value of f(x1): 12.45 enter the value of x2: 3.5 enter the value of f(x2): 15.70 enter the value of x3: 4 enter the value of f(x3): 19.52 enter the value of x4: 4.5 enter the value of f(x4): 23.75 Enter X for finding f(x): 4.25 _____________________________________________________ x(i) y(i) y1(i) y2(i) y3(i) y4(i) _____________________________________________________ 2.500 9.750 3.000 12.450 2.700 3.500 15.700 3.250 0.550 4.000 19.520 3.820 0.570 0.020 4.500 23.750 4.230 0.410 -0.160 -0.180 u = -0.500 f(4.25) = 21.583750 */
沒有留言:
張貼留言