Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.44 KB | None | 0 0
  1. #include <cmath>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6.  
  7.  
  8.  
  9. void dyskretyzacja(int n, int min, int max, double *x, double *y) {
  10.  
  11. double skok = (max - min) / (1.0 * n );
  12.  
  13.  
  14. for (int i = 0; i <= n; i++) {
  15. x[i] = min + skok * i;
  16. y[i] = (sin(2 * x[i]) * sin(sqrt(2) * x[i]));
  17. }
  18.  
  19. }
  20.  
  21. void znajdzGiR(double **g, double *r, double *x,double *y, int n, int m) {
  22. //for (int i = 0; i < n; i++) {
  23. // std::cout << "x[" << i << "]: " << x[i] << std::endl;
  24. //}
  25. //for (int i = 0; i < n; i++) {
  26. // std::cout << "y[" << i << "]: " << y[i] << std::endl;
  27. //}
  28.  
  29.  
  30.  
  31. //wypelnianie G
  32. for (int k = 0; k <= m; k++) {
  33. for (int j = 0; j <= m; j++) {
  34. double sum = 0;
  35. for (int i = 0; i <= n; i++) {
  36. sum += pow(x[i], j + k);
  37. }
  38.  
  39. g[k][j] = sum;
  40.  
  41. }
  42. }
  43.  
  44. // std::cout << "G:" << std::endl;
  45. for (int k = 0; k <= m; k++) {
  46. for (int j = 0; j <= m; j++) {
  47. // std::cout << g[k][j] << " ";
  48. }
  49. // std::cout << std::endl;
  50. }
  51.  
  52. //wypelnianie R
  53. for (int k = 0; k <= m; k++) {
  54. double sum = 0;
  55. for (int i = 0; i <= n; i++) {
  56. sum += y[i] * pow(x[i], k);
  57. }
  58. r[k] = sum;
  59. }
  60. }
  61.  
  62.  
  63. void zrobTrojkatna(int m, double **g, double *r) {
  64.  
  65. for (int x = 0; x <= m; x++) {
  66.  
  67.  
  68. for (int y = x + 1; y <= m; y++) {
  69. double wspolczynnik = 1 * (g[y][x] / g[x][x]);
  70.  
  71. // std::cout << wspolczynnik << std::endl;
  72.  
  73. for (int z = x; z <= m; z++) {
  74. g[y][z] = g[y][z] - wspolczynnik * g[x][z];
  75. }
  76. r[y] = r[y] - wspolczynnik * r[x];
  77.  
  78. }
  79. }
  80.  
  81.  
  82. //std::cout << "Trojk:" << std::endl;
  83. for (int k = 0; k <= m; k++) {
  84. for (int j = 0; j <= m; j++) {
  85. // std::cout << g[k][j] << " ";
  86. }
  87. // std::cout << std::endl;
  88. }
  89.  
  90. }
  91.  
  92. void rozwiazTrojkatna(double *aj, double **g, double *r, int m) {
  93.  
  94.  
  95. aj[m] = r[m] / g[m][m];
  96. for (int i = m - 1; i >= 0; i--){
  97. double suma = 0;
  98. for (int j = i + 1; j <= m; j++){
  99. suma += g[i][j] * aj[j];
  100. }
  101. aj[i] = (r[i] - suma) / g[i][i];
  102. }
  103.  
  104. }
  105.  
  106. void rozwiaz(int m,double **g, double *r, double &fx0, double *aj, double x0) {
  107.  
  108. zrobTrojkatna(m,g,r);
  109. rozwiazTrojkatna(aj,g,r,m);
  110.  
  111. double sum = 0;
  112. for (int i = 0; i <= m; i++) {
  113. sum += aj[i] * pow(x0, i); \
  114. }
  115. fx0 = sum;
  116.  
  117. }
  118.  
  119. void obliczBlad(double &S, int n,int m, double *aj,double *x, double *y) {
  120. double summm = 0;
  121. for (int i = 0; i <= n; i++){
  122. double sum = 0;
  123. for (int j = 0; j <= m; j++){
  124. sum += aj[j] * pow(x[i], j);
  125. }
  126. summm += pow(sum - y[i], 2);
  127. }
  128. S = sqrt(summm / (n + 1));
  129.  
  130. }
  131.  
  132. double Q(double x, double *a, int m)
  133. {
  134. double res = 0.0;
  135. for (int i = 0; i <= m; i++)
  136. {
  137. res += a[i] * pow(x, i);
  138. }
  139. return res;
  140. }
  141.  
  142.  
  143. int main()
  144. {
  145. using namespace std;
  146. int n = 49;
  147. int m = 5;
  148. int min = -2;
  149. int max = 2;
  150. double x0 = 1.5;
  151. double fx0 = 0;
  152.  
  153. double S = 0;
  154. double* x = new double[n + 1];
  155. double* y = new double[n + 1];
  156.  
  157. double** g = new double*[m + 1];
  158. double* r = new double[m + 1];
  159.  
  160. for (int i = 0; i <= m; i++) {
  161. g[i] = new double[m + 1];
  162. }
  163.  
  164. double *aj = new double[m + 1];
  165.  
  166.  
  167. dyskretyzacja(n, min, max, x, y);
  168. znajdzGiR(g, r, x, y, n, m);
  169. rozwiaz(m, g, r, fx0, aj, x0);
  170. obliczBlad(S, n, m, aj, x, y);
  171.  
  172. for (int i = 0; i <= m; i++) {
  173. std::cout << "wsp[" << i << "]: " << aj[i] << std::endl;
  174. }
  175. cout << "BLAD: " << S << endl;
  176.  
  177. //
  178. //
  179. //for (int i = 0; i < 50; i++)
  180. // cout << x[i] << endl;
  181. // cout << endl << endl;
  182. // for (int i = 0; i < 50; i++)
  183. // cout <<Q(x[i], aj, m) << endl;
  184.  
  185. for (;;);
  186.  
  187.  
  188. return 0;
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement