Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- float interpol_Lagrange(int n, float abs[n], float ord[n], float x);
- float lix (int n, float abs[n], float x, int ind);
- float interpol_Newton(int n, float abs[n], float ord[n], float x, int deg, float *b);
- float difdiv(float* abs, float* ord, int deg, int ind);
- void remplir_b(float* abs, float* ord, int n, float b[n]);
- void remplir_dens(float* abs,float* ord);
- void remplir_revenu(float* abs,float* ord);
- int main()
- {
- float i = 0;
- float x,res;
- float abs[20];
- float ord[20];
- float b[20];
- remplir_dens(abs,ord);
- remplir_b(abs,ord,20,b);
- while(i < 40)
- {
- res=interpol_Newton(20,abs,ord,i,19,b);
- printf("%f : %f\n",i ,res);
- i += 0.5;
- }
- return (0);
- }
- float interpol_Lagrange(int n, float abs[n], float ord[n], float x)
- {
- int i = 0;
- float poly = 0;
- for(i = 0; i < n; i++)
- {
- poly += ord[i] * lix(n, abs, x, i);
- }
- return poly;
- }
- float lix (int n, float abs[n], float x, int ind)
- {
- int j;
- float pi = 1;
- for(j = 0; j < n; j++)
- {
- if (j != ind)
- {
- pi = pi*((x-abs[j])/(abs[ind]-abs[j]));
- }
- }
- return (pi);
- }
- float interpol_Newton(int n, float abs[n], float ord[n], float x, int deg, float *b)
- {
- float res;
- if (deg == 0)
- return b[n - 1];
- else
- {
- res = b[n - deg - 1] + (x - abs[n - deg - 1]) * interpol_Newton(n, abs, ord, x, deg - 1, b);
- return res;
- }
- }
- float difdiv(float* abs, float* ord, int deg, int ind)
- {
- float dif;
- if (ind<deg)
- return 0;
- if (deg==0)
- {
- dif=ord[ind];
- }
- else if (deg==1)
- dif=(ord[ind]-ord[0])/(abs[ind]-abs[0]);
- else
- {
- dif =(difdiv(abs,ord,deg-1,ind) - difdiv(abs,ord,deg-1,deg-1))/(abs[ind]-abs[deg-1]);
- }
- return (dif);
- }
- void remplir_b(float* abs, float* ord, int n, float b[n])
- {
- int i;
- for (i=0;i<n;i++)
- {
- b[i]=difdiv(abs,ord,i,i);
- //printf("%f",b[i]);
- }
- }
- void remplir_dens(float* abs,float* ord)
- {
- float abs1[20]={0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38};
- float ord1[20]={0.99987,0.99997,1,0.99997,0.99988,0.99973,0.99953,0.99927,0.99289,0.99846,0.99805,0.999751,0.99705,0.99650,0.99664,0.99533,0.99472,0.99472,0.99333,0.99326};
- int i;
- for (i=0;i<20;i++)
- {
- abs[i]=abs1[i];
- ord[i]=ord1[i];
- }
- }
- void remplir_revenu(float* abs,float* ord)
- {
- float abs1[21]={752,855,871,734,610,582,221,492,569,462,907,643,862,524,679,902,918,828,875,809,894};
- float ord1[21]={85,83,162,79,81,83,281,81,81,80,243,84,84,82,80,226,260,82,186,77,223};
- int i;
- for (i=0;i<21;i++)
- {
- abs[i]=abs1[i];
- ord[i]=ord1[i];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement