Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4. #include<stdbool.h>
  5. #define N 1010
  6.  
  7. typedef struct pt
  8. {
  9. double x , y;
  10. } pt;
  11.  
  12. pt a[N];
  13. double A[N];
  14.  
  15. void gen(int n , double roots[N] , double tmp)
  16. {
  17. double coeff[N];
  18. int i , j;
  19. for(i = 0 ; i<=n ; ++i)
  20. coeff[i] = 0;
  21. coeff[n] = 1;
  22. for(i = 1; i<=n ; ++i)
  23. {
  24. for(j = n - i - 1 ; j<n ; ++j)
  25. {
  26. coeff[j] = coeff[j] + (-1)*roots[i-1]*coeff[j+1];
  27. }
  28. }
  29.  
  30. for(i = n ; i>=0 ; --i)
  31. {
  32. A[i] += (coeff[i]*tmp);
  33. }
  34.  
  35. }
  36. void make_polynomial(int n)
  37. {
  38. double tmp;
  39. int i , j , k;
  40. double roots[N];
  41.  
  42. printf("\nP(X) = ");
  43.  
  44. for(i = 0 ; i<=n ; ++i)
  45. A[i] = 0;
  46.  
  47.  
  48. for(i = 1 ; i<=n ; ++i)
  49. {
  50. tmp = a[i].y;
  51. k = 0;
  52. for(j = 1 ; j<=n ; ++j)
  53. {
  54. if(i == j)
  55. continue;
  56. tmp = tmp * (1.0 / (a[i].x - a[j].x));
  57. roots[k++] = a[j].x;
  58. }
  59. gen(n-1 , roots , tmp);
  60. }
  61.  
  62. for(i = n-1 ; i>=0 ; --i)
  63. {
  64. // if(fabs(A[i]) < 0.0000001)
  65. // continue;
  66. if(i == 0)
  67. printf("(%.2lf)" , A[i]);
  68. else if(i == 1)
  69. printf("(%.2lf)*(X) + " , A[i]);
  70. else
  71. printf("(%.2lf)*(X^%d) + " , A[i] , i);
  72.  
  73. }
  74. printf("\n");
  75. }
  76.  
  77. double interpolate(double x , int n)
  78. {
  79. double res = 0.0 , tmp;
  80. int i , j;
  81. for(i = 1 ; i<=n ; ++i)
  82. {
  83. tmp = a[i].y;
  84. for(j = 1 ; j<=n ; ++j)
  85. {
  86. if(i == j)
  87. continue;
  88. tmp = tmp * ( (x - a[j].x) / (a[i].x - a[j].x) );
  89. }
  90. res+=tmp;
  91. }
  92. return res;
  93. }
  94. signed main()
  95. {
  96. int n , i;
  97. double x;
  98.  
  99. printf("\t--Langrange\'s Interpolation--\n\n");
  100.  
  101. printf("Enter number of data points: ");
  102. scanf("%d" , &n);
  103.  
  104. printf("\nEnter the data points:\n");
  105. for(i = 1 ; i<=n ; ++i)
  106. scanf("%lf %lf" , &a[i].x , &a[i].y);
  107.  
  108. make_polynomial(n);
  109.  
  110. printf("\n\nEnter value of x: ");
  111. scanf("%lf" , &x);
  112.  
  113. printf("\nP(%.0lf) = %.4lf\n" , x , interpolate(x , n));
  114.  
  115.  
  116. return 0;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement