Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.56 KB | None | 0 0
  1. #include<iostream>
  2. #include<math.h>
  3. #include<conio.h>
  4. #include<iomanip>
  5.  
  6. using namespace std;
  7.  
  8. double wartosc(double B)
  9. {
  10. return pow(B, 5);
  11. }
  12. double lagrange(int n, double a, double b,double B)
  13. {
  14. double p;
  15. double tab[100];
  16. double suma=0.0;
  17. double iloczyn;
  18. double licznik;
  19. double mianownik;
  20. int i,j;
  21. p = (b-a)/(double)n;
  22.  
  23. for(i=0; i<=n; i++)
  24. {
  25. tab[i] = a + p*(double)i;
  26. }
  27. for(j=0;j<=n;j++)
  28. {
  29. iloczyn = 1.0;
  30. licznik = 0.0;
  31. mianownik = 0.0;
  32.  
  33. for(i=0;i<=n;i++)
  34. {
  35. if(i!=j)
  36. {
  37. licznik = B-tab[i];
  38. mianownik = tab[j] - tab[i];
  39. iloczyn = iloczyn*(licznik/mianownik);
  40. }
  41. }
  42. suma = suma + (wartosc(a + p*(double)j)*iloczyn);
  43. }
  44. return suma;
  45. }
  46. double czybyszew(int n,double a,double b,double B)
  47. {
  48. double mianownik = 1, licznik = 1;
  49. double wi = 0.0, w = 0.0;
  50. double p = (b-a)/n, zi, zj, ci, cj;
  51. double const pi = 3.141592653589793;
  52.  
  53. for (int i = 0; i < n+1; i++)
  54. {
  55.  
  56. for (int j = 0; j < n+1; j++)
  57. {
  58. zj = cos(pi*(2*j + 1)/(2*n + 2));
  59. zi = cos(pi*(2*i + 1)/(2*n + 2));
  60. cj = 0.5*((b - a)*zj + a + b);
  61. ci = 0.5*((b - a)*zi + a + b);
  62. if(i != j)
  63. {
  64. mianownik = mianownik*(ci - cj);
  65. licznik = licznik*(B - cj);
  66. }
  67. else
  68. {
  69. mianownik = mianownik*1;
  70. licznik = licznik*1;
  71. }
  72. }
  73. licznik = (licznik)*wartosc(ci);
  74. wi = licznik/mianownik;
  75. w += wi;
  76. mianownik = licznik = 1;
  77. }
  78. return w;
  79. }
  80. int main()
  81. {
  82.  
  83. double a,b;
  84. int n;
  85. cout<< "Wprowadz a, b, n:" <<endl;
  86. cin>>a;
  87. cin>>b;
  88. cin>>n;
  89. double B, xmax, wart, xmax2, wart2;
  90. double blad_zad1, blad_zad2;
  91. double max_blad_zad1 = 0.0, max_blad_zad2 = 0.0;
  92.  
  93. for(B=a; B<=b; B = B + 0.1)
  94. {
  95. blad_zad1 = fabs(lagrange(n,a,b,B)-wartosc(B));
  96. if(blad_zad1 > max_blad_zad1) max_blad_zad1 = blad_zad1; xmax = B; wart = lagrange(n,a,b,B);
  97.  
  98. blad_zad2 = fabs(czybyszew(n,a,b,B)-wartosc(B));
  99. if(blad_zad2 > max_blad_zad2) max_blad_zad2 = blad_zad2; xmax2 = B; wart2 = czybyszew(n,a,b,B);
  100. }
  101.  
  102. cout << endl << "Maksymalny blad w metodzie ze stalym interwalem miedzy wezlami:" <<endl << "DELTA = " << max_blad_zad1 <<endl << "Wartosc argumentu z maksymalnym bledem:" << xmax << endl << "Wartosc funkcji w punkcie z maksymalnym bledem" << wart << endl;
  103. cout << endl << "Maksymalny blad w metodzie wezlow Czebyszewa:" <<endl << "DELTA = " << max_blad_zad2 <<endl<< "Wartosc argumentu z maksymalnym bledem:" << xmax2 << endl << "Wartosc funkcji w punkcie z maksymalnym bledem" << wart2 << endl<<endl;
  104. getch();
  105. return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement