Advertisement
Guest User

Untitled

a guest
Feb 27th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.33 KB | None | 0 0
  1. // DFT.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include<cstdlib>
  6. #include<cstdio>
  7. #include<iostream>
  8. #include<cmath>
  9. #include"gnuplot_i.hpp"
  10. #include<Windows.h>
  11. #include<conio.h>
  12.  
  13. using namespace std;
  14.  
  15. #define pi 2*acos(0.0)
  16. #define eps 0.01
  17.  
  18.  
  19.  
  20. double x[510];
  21. double dft[510];
  22. int n = 501;
  23. double f1, f2;
  24. vector<vector<double>> M;
  25. vector<double> b;
  26. vector<double> c;
  27.  
  28. void DFT()
  29. {
  30. for (int i = 0; i < n; i++)
  31. {
  32. double r = 0.;
  33. double im = 0.;
  34. for (int j = 0; j < n; ++j) {
  35.  
  36. double alpha = double((2 * pi* i * j) / n);
  37.  
  38. r += x[j] * double(cos(alpha));
  39. im += x[j] * double(sin(alpha));
  40.  
  41. }
  42.  
  43. dft[i] = sqrt(r*r+im*im);
  44. }
  45. }
  46. void wait() {
  47. FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
  48. #ifndef FOUT
  49. cout << endl << "Press any key to continue..." << endl;
  50. #endif
  51. _getch();
  52. }
  53. void Plot()
  54. {
  55. Gnuplot gnu("lines");
  56. string a = "set style line 1 lc rgb '#0060ad' lt 2 lw 2 pt 0 ps 1.5";
  57. string b = "C:/Users/Asus/Documents/Visual Studio 2015/Projects/DFT/DFT/temp.txt"; b = "plot '" + b; b += "' using ($1*1):($2) with linespoints ls 1";
  58.  
  59. gnu.plot_points(b, a);
  60. wait();
  61. system("pause");
  62. }
  63. pair<double,double> Find_extr()
  64. {
  65. vector<double> a;
  66. for (int i = 1; i < n / 2; i++)
  67. {
  68. if (dft[i] - dft[i-1] > eps && dft[i] - dft[i + 1] > eps) a.push_back((i+1)*0.002);
  69. }
  70. if (a.size() > 2) cout << "ERROR" << endl; else
  71. if (a.size() == 2) return make_pair(a[0], a[1]); else
  72. return make_pair(a[0],0);
  73. }
  74. vector<vector<double>> Matrix()
  75. {
  76. vector<vector<double>> A;
  77. vector<double> a1, a2, a3, a4, a5;
  78. double sum = 0;
  79. for (int i = 0; i < n; i++) sum += pow(i*0.01, 6.);
  80. a1.push_back(sum);
  81.  
  82. sum = 0;
  83. for (int i = 0; i < n; i++) sum += pow(i*0.01, 5.);
  84. a1.push_back(sum);
  85. a2.push_back(sum);
  86.  
  87. sum = 0;
  88. for (int i = 0; i < n; i++) sum += pow(i*0.01, 4.);
  89. a1.push_back(sum);
  90. a2.push_back(sum);
  91. a3.push_back(sum);
  92.  
  93. sum = 0;
  94. for (int i = 0; i < n; i++) sum += pow(i*0.01, 3.)*sin(2*pi*f1*i*0.01);
  95. a1.push_back(sum);
  96. a4.push_back(sum);
  97.  
  98.  
  99. sum = 0;
  100. for (int i = 0; i < n; i++) sum += pow(i*0.01, 3.);
  101. a1.push_back(sum);
  102. a2.push_back(sum);
  103. a3.push_back(sum);
  104. a5.push_back(sum);
  105.  
  106. sum = 0;
  107. for (int i = 0; i < n; i++) sum += pow(i*0.01, 2.)*sin(2 * pi*i*0.01*f1);
  108. a2.push_back(sum);
  109. a4.push_back(sum);
  110.  
  111. sum = 0;
  112. for (int i = 0; i < n; i++) sum += pow(i*0.01, 2.);
  113. a2.push_back(sum);
  114. a3.push_back(sum);
  115. a5.push_back(sum);
  116.  
  117. sum = 0;
  118. for (int i = 0; i < n; i++) sum += (i*0.01)*sin(2 * pi*i*0.01*f1);
  119. a3.push_back(sum);
  120. a4.push_back(sum);
  121.  
  122.  
  123. sum = 0;
  124. for (int i = 0; i < n; i++) sum += i*0.01;
  125. a3.push_back(sum);
  126. a5.push_back(sum);
  127.  
  128. sum = 0;
  129. for (int i = 0; i < n; i++) sum += pow(sin(2 * pi*i*0.01*f1),2);
  130. a4.push_back(sum);
  131.  
  132.  
  133. sum = 0;
  134. for (int i = 0; i < n; i++) sum +=sin(2 * pi*i*0.01*f1);
  135. a4.push_back(sum);
  136. a5.push_back(sum);
  137.  
  138.  
  139. a5.push_back(500.);
  140.  
  141.  
  142. A.push_back(a1);
  143. A.push_back(a2);
  144. A.push_back(a3);
  145. A.push_back(a4);
  146. A.push_back(a5);
  147.  
  148. for (int i = 0; i < 5; i++) cout << A[i].size() << endl;
  149. return A;
  150.  
  151. }
  152. vector<double> BB()
  153. {
  154. vector<double> B;
  155. double sum;
  156.  
  157. sum = 0;
  158. for (int i = 0; i < n; i++) sum += pow(double(i)/100.,3)*x[i];
  159. B.push_back(sum);
  160.  
  161. sum = 0;
  162. for (int i = 0; i < n; i++) sum += pow(i*0.01, 2)*x[i];
  163. B.push_back(sum);
  164.  
  165. sum = 0;
  166. for (int i = 0; i < n; i++) sum += pow(i*0.01, 1)*x[i];
  167. B.push_back(sum);
  168.  
  169. sum = 0;
  170. for (int i = 0; i < n; i++) sum += (sin(2 * pi*i*0.01*f1))*x[i];
  171. B.push_back(sum);
  172.  
  173. sum = 0;
  174. for (int i = 0; i < n; i++) sum += x[i];
  175. B.push_back(sum);
  176.  
  177. cout << B.size() << endl;
  178. return B;
  179. }
  180. vector<double> MKK()
  181. {
  182. vector<double>res;
  183. double temp;
  184. double U[10][10] = {0};
  185. double y[10] = { 0 };
  186. double ans[10] = { 0 };
  187. for (int i = 0; i < 5; i++)
  188. {
  189. temp = 0;
  190. for (int k = 0; k < i; k++)
  191. temp = temp + U[k][i] * U[k][i];
  192. U[i][i] = sqrt(M[i][i] - temp);
  193. for (int j = i; j < 5; j++)
  194. {
  195. temp = 0;
  196. for (int k = 0; k < i; k++)
  197. temp = temp + U[k][i] * U[k][j];
  198. U[i][j] = (M[i][j] - temp) / U[i][i];
  199. }
  200. }
  201. for (int i = 0; i < 5; i++) {
  202. for (int j = 0; j < 5; j++) {
  203. cout << U[i][j] << " ";
  204. }
  205. cout << endl;
  206. }
  207. for (int i = 0; i < 5; i++)
  208. {
  209. temp = 0;
  210. for (int k = 0; k < i; k++)
  211. temp = temp + U[k][i] * y[k];
  212. y[i] = (b[i] - temp) / U[i][i];
  213. }
  214. for (int i = 4; i >= 0; i--)
  215. {
  216. temp = 0;
  217. for (int k = i + 1; k < 5; k++)
  218. temp = temp + U[i][k] * ans[k];
  219. ans[i] = (y[i] - temp) / U[i][i];
  220. }
  221. for (int i = 0; i < 5; i++)
  222. {
  223. res.push_back(ans[i]);
  224. cout << "x" << i << "= " << ans[i] << endl;
  225. }
  226.  
  227. return res;
  228. }
  229. int main()
  230. {
  231. freopen("f3.txt","r",stdin);
  232. freopen("temp.txt","w",stdout);
  233. for (int i = 0; i < n; i++) scanf("%lf",&x[i]);
  234. DFT();
  235. for (int i = 0; i < n; i++) printf("%.3lf %.3lf\n",double(i)/100.,dft[i]);
  236. fclose(stdout);
  237. freopen("CON","w",stdout);
  238.  
  239. // Plot();
  240. pair<double,double> extr = Find_extr();
  241. cout << extr.first << " " << extr.second<< endl;
  242. f1 = extr.first; f2 = extr.second;
  243. M = Matrix();
  244.  
  245. for (int i = 0; i < 5; i++)
  246. {
  247. for (int j = 0; j < 5; j++) cout << M[i][j] << " ";
  248. cout << endl;
  249. }
  250.  
  251.  
  252. b = BB();
  253.  
  254. for (int i = 0; i < 5; i++) cout << b[i] << " ";
  255. cout << endl;
  256.  
  257. c = MKK();
  258. return 0;
  259. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement