madzik4113

interpolacja langrade'a

Mar 10th, 2014
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.18 KB | None | 0 0
  1. //program dla podanych punktów xi i odpowiadajacym ich wartosciom yi liczy
  2. // wielomian Lagrange'a i przedstawia go w postaci:
  3. // a0+a1*x+a2*x^2+....+an*x^n
  4. //ilosc rownan n jest rowna ilosci pktow xi i yi;
  5. #include <iostream>
  6. #include <iomanip>
  7. #include <fstream>
  8. #include <cmath>
  9. #include <conio.h>
  10.  
  11. using namespace std;
  12.  
  13. const double EPS = 0.0000000001; // dokładność porównania z zerem
  14. const int MAXEQ = 100; // maksymalna ilość równań w układzie
  15.  
  16. bool EliminujX(int n, double AB[][MAXEQ+1])
  17. {
  18. int i,j,k;
  19. double m;
  20.  
  21. for(i = 0; i < n - 1; i++)
  22. {
  23. if(fabs(AB[i][i]) < EPS) return false;
  24. for(j = i + 1; j < n; j++)
  25. {
  26. m = -AB[j][i] / AB[i][i];
  27. for(k = i + 1; k <= n; k++) AB[j][k] += m * AB[i][k];
  28. }
  29. }
  30. return true;
  31. }
  32.  
  33. bool ObliczX(int n, double X[], double AB[][MAXEQ+1])
  34. {
  35. int i,j;
  36. double s;
  37.  
  38. for(i = n - 1; i >= 0; i--)
  39. {
  40. if(fabs(AB[i][i]) < EPS) return false;
  41. s = AB[i][n];
  42. for(j = n - 1; j > i; j--) s -= AB[i][j] * X[j];
  43. X[i] = s / AB[i][i];
  44. }
  45. return true;
  46. }
  47.  
  48. int main(int argc, char* argv[])
  49. {
  50. ofstream fout;
  51. int i,j,n,*tab;
  52. float x,*ai,*xi,*yi;
  53. double AB[MAXEQ][MAXEQ+1], X[MAXEQ];
  54.  
  55.  
  56.  
  57. cout.precision(5); // 5 cyfr po przecinku
  58. cout.setf(ios::fixed); // format stałoprzecinkowy
  59.  
  60.  
  61. cout<<"podaj ilosc rownan ";
  62. cin>>n;
  63. xi=new float[n];
  64. yi=new float[n];
  65. for(i=0;i<n;i++)
  66. {
  67. cout<<"podaj x["<<i<<"]=";
  68. cin>>xi[i];
  69. }
  70. for(i=0;i<n;i++)
  71. {
  72. cout<<"podaj y["<<i<<"]=";
  73. cin>>yi[i];
  74. }
  75. for(i=0;i<n;i++)
  76. for(j=0;j<n+1;j++)
  77. {
  78. AB[i][j]=pow(xi[i],j);
  79. if(j==n)AB[i][j]=yi[i];
  80. }
  81. if(EliminujX(n,AB) && ObliczX(n,X,AB))
  82. {
  83. for(i = 0; i < n; i++)fout << X[i] << endl;
  84. }
  85. else cout << "Rozwiazanie ukladu rownan nie powiodlo sie\n";
  86. cout<<X[0]<<" + ";
  87. for(i=1;i<n;i++)
  88. {
  89. cout<<X[i]<<"*x^"<<i<<" + ";
  90.  
  91. if(i==n-1)cout<<" ";
  92. }
  93. cout<<endl<<endl;
  94. system("pause");
  95. delete [] xi;
  96. delete [] yi;
  97. return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment