Advertisement
Guest User

Untitled

a guest
Dec 1st, 2015
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.23 KB | None | 0 0
  1. # include <iostream>
  2. # include <math.h>
  3. # include <conio.h>
  4. # include <stdlib.h>
  5. #include <fstream>
  6.  
  7. using namespace std;
  8.  
  9. int flag[11][11];
  10. const int n = 10;
  11. double x[n + 1] = { 0.2740, 0.4390, 0.6040, 0.7690, 0.9340, 1.0990, 1.2640, 1.4290, 1.5940, 1.7590, 1.9240 };
  12. double y[n + 1] = { -0.2090, -0.0510, 0.0120, 0.0100, -0.0290, -0.0820, -0.1200, -0.1170, -0.0440, 0.12300, 0.4130 };
  13. double z[3] = { 1.2230, 1.6830, 1.7640 };
  14. fstream output("output.txt");
  15. double delt(int, int);
  16. double Newt_F(double);
  17. double Newt_B(double);
  18. double Stirl(int, double);
  19.  
  20. double delt(int m, int k)
  21. {
  22. double d;
  23. if (m == 1) { d = y[k + 1] - y[k]; }
  24. else { d = delt(m - 1, k + 1) - delt(m - 1, k); }
  25. if (m == 1 && flag[1][k] == 0)
  26. {
  27. output << "Разделенная разность дельта в степени " << m << " F с индексом " << k << " равна " << d << endl;
  28. flag[1][k] = 1;
  29. }
  30. return d;
  31. };
  32. double Newt_F(double q)
  33. {
  34. double S, Q, p; int i;
  35. Q = 1; S = y[0];p = 1;
  36. for (i = 1;i <= n;i++)
  37. {
  38. Q = Q*(q - i + 1);
  39. p = p*i;
  40. S = S + (Q / p)*delt(i, 0);
  41.  
  42. }
  43. return (S);
  44. }
  45. double Newt_B(double q)
  46. {
  47. double S, Q, p; int i;
  48. Q = 1; S = y[n]; p = 1;
  49. for (i = 1;i <= n;i++)
  50. {
  51. Q = Q*(q + i - 1);
  52. p = p*i;
  53. S = S + (Q / p)*delt(i, n - i);
  54. // output << "Итерполяция назад: " << "Разность номер " << i << " равна " << S << endl;
  55. }
  56. return (S);
  57. }
  58. double Stirl(int d, double q)
  59. {
  60. double S, Q = 1, p1 = 1, p2 = 1; int t, i;
  61. if (d>(n - d)) { t = n - d; }
  62. else { t = d; }
  63. S = y[d];
  64. //output << "Методом Стирлинга: " << "Разность номер 1 равна " << S << endl;
  65. for (i = 1;i <= t;i++)
  66. {
  67. p1 = p2*(2 * i - 1); p2 = p1 * 2 * i;
  68. S = S + (q*Q / p1)*(delt(2 * i - 1, t - i) + delt(2 * i - 1, t - i + 1)) / 2;
  69. S = S + ((q*q)*Q / p2)*delt(2 * i, t - i);
  70. Q = Q*(q*q - i*i);
  71. //output << "Методом Стирлинга: " << "Разность номер " << i+1 << " равна " << S << endl;
  72. }
  73. return S;
  74. }
  75.  
  76.  
  77. int main()
  78. {
  79. setlocale(LC_ALL, "rus");
  80. int i, j, d; double mn, b, q;
  81. for (i = 1;i<2;i++)
  82. {
  83. for (int p = 0; p < 11; p++)
  84. for (int j = 0; j < 11; j++)
  85. flag[p][j] = 0;
  86. b = z[i];
  87. cout << "\n\n***Программа вычисляет значение в точке x[" << i + 1
  88. << "] = " << b << " *** ";
  89. mn = 10000;
  90. for (j = 1;j <= n;j++)
  91. {
  92. if (fabs(x[j] - b)<mn)
  93. {
  94. mn = fabs(x[j] - b);
  95. d = j;
  96. }
  97. }
  98. if ((d>(n - 4) / 2) & (d <= (n + 4) / 2) & (mn / (x[2] = x[1])<0.25))
  99. {
  100. q = fabs(b - x[d]) / (x[1] - x[0]);
  101. cout << "\n Расчет ведется метолом Стирлинга "
  102. << "\n Результат: " << Stirl(d, q);
  103. }
  104. else
  105. if ((n - d)>n / 2)
  106. {
  107. q = (b - x[0]) / (x[1] - x[0]);
  108. cout << "\n Расчет ведется методом Ньютона для интерполяции вперед"
  109. << "\n Результат: " << Newt_F(q);
  110. }
  111. else
  112. {
  113. q = (-x[n] + b) / (x[1] - x[0]);
  114. cout << "\n Расчет ведется методом Ньютона для интерполяции назад"
  115. << "\n Результат: " << Newt_B(q);
  116. };
  117. }
  118. getch();
  119. return 0;
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement