Advertisement
SpaceQuester

Untitled

Feb 20th, 2017
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.02 KB | None | 0 0
  1. #define _USE_MATH_DEFINES
  2. #include "math.h"
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <locale.h>
  6. #include <time.h>
  7.  
  8. #define N 10
  9. #define K 2.9
  10.  
  11. const int omega_rand_glial_min = 0;
  12. const int omega_rand_glial_max = 1;
  13.  
  14. const int omega_rand_neuron_min = 5;
  15. const int omega_rand_neuron_max = 6;
  16.  
  17. const int theta_rand_min = 0;
  18. const int theta_rand_max = 2 * M_PI;
  19.  
  20. double A[N][N];
  21. double omega[N];
  22. double theta[N];
  23.  
  24. double kuramoto(int i, double theta[N])
  25. {
  26. double sum = 0;
  27.  
  28. for (int j = 0; j < N; j++)
  29. sum += A[i][j] * sin(theta[j] - theta[i]);
  30.  
  31. return omega[i] + sum * (double)K / N;
  32. }
  33.  
  34. void RungeKutta(double dt, double theta[N], double theta_next[N])
  35. {
  36. double k[N][4];
  37.  
  38. // k1
  39. for (int i = 0; i < N; i++)
  40. k[i][0] = kuramoto(i, theta) * dt;
  41.  
  42. double theta_k1[N];
  43. for (int i = 0; i < N; i++)
  44. theta_k1[i] = theta[i] + k[i][0] / 2;
  45.  
  46. // k2
  47. for (int i = 0; i < N; i++)
  48. k[i][1] = kuramoto(i, theta_k1) * dt;
  49.  
  50. double theta_k2[N];
  51. for (int i = 0; i < N; i++)
  52. theta_k2[i] = theta[i] + k[i][1] / 2;
  53.  
  54. // k3
  55. for (int i = 0; i < N; i++)
  56. k[i][2] = kuramoto(i, theta_k2) * dt;
  57.  
  58. double theta_k3[N];
  59. for (int i = 0; i < N; i++)
  60. theta_k3[i] = theta[i] + k[i][2] / 2;
  61.  
  62. // k4
  63. for (int i = 0; i < N; i++)
  64. k[i][3] = kuramoto(i, theta_k3) * dt;
  65.  
  66. for (int i = 0; i < N; i++)
  67. theta_next[i] = theta[i] + (k[i][0] + 2 * k[i][1] + 2 * k[i][2] + k[i][3]) / 6;
  68. }
  69.  
  70. void CopyArray(double source[N], double target[N])
  71. {
  72. for (int i = 0; i < N; i++)
  73. target[i] = source[i];
  74. }
  75.  
  76. int main()
  77. {
  78. srand(time(NULL));
  79.  
  80. for (int i = 0; i < N/2; i++)
  81. {
  82. omega[i] = ((double)rand() / RAND_MAX) * (omega_rand_glial_max - omega_rand_glial_min) + omega_rand_glial_min;
  83. }
  84.  
  85. for (int i = N/2; i < N; i++)
  86. {
  87. omega[i] = ((double)rand() / RAND_MAX) * (omega_rand_neuron_max - omega_rand_neuron_min) + omega_rand_neuron_min;
  88. }
  89.  
  90. /*w[0] = 5;
  91. w[1] = 5;
  92. w[2] = 5;
  93. w[3] = 5;
  94. w[4] = 5;*/
  95.  
  96. for (int i = 0; i < N; i++)
  97. {
  98. theta[i] = ((double)rand() / RAND_MAX) * (theta_rand_max - theta_rand_min) + theta_rand_min;
  99. }
  100.  
  101. /*theta[0] = 0;
  102. theta[1] = M_PI / 2;
  103. theta[2] = M_PI;
  104. theta[3] = ((double)3 / 2) * M_PI;
  105. theta[4] = 2 * M_PI;*/
  106.  
  107. /*{
  108. A[0][0] = 0;
  109. A[0][1] = 1;
  110. A[0][2] = 0;
  111. A[0][3] = 0;
  112. A[0][4] = 1;
  113.  
  114. A[1][0] = 1;
  115. A[1][1] = 0;
  116. A[1][2] = 1;
  117. A[1][3] = 0;
  118. A[1][4] = 0;
  119.  
  120. A[2][0] = 0;
  121. A[2][1] = 1;
  122. A[2][2] = 0;
  123. A[2][3] = 1;
  124. A[2][4] = 0;
  125.  
  126. A[3][0] = 0;
  127. A[3][1] = 0;
  128. A[3][2] = 1;
  129. A[3][3] = 0;
  130. A[3][4] = 1;
  131.  
  132. A[4][0] = 1;
  133. A[4][1] = 0;
  134. A[4][2] = 0;
  135. A[4][3] = 1;
  136. A[4][4] = 0;
  137. }*/
  138.  
  139. /*{
  140. A[0][0] = 1;
  141. A[0][1] = 1;
  142. A[0][2] = 1;
  143. A[0][3] = 1;
  144. A[0][4] = 1;
  145.  
  146. A[1][0] = 1;
  147. A[1][1] = 1;
  148. A[1][2] = 1;
  149. A[1][3] = 1;
  150. A[1][4] = 1;
  151.  
  152. A[2][0] = 1;
  153. A[2][1] = 1;
  154. A[2][2] = 1;
  155. A[2][3] = 1;
  156. A[2][4] = 1;
  157.  
  158. A[3][0] = 1;
  159. A[3][1] = 1;
  160. A[3][2] = 1;
  161. A[3][3] = 1;
  162. A[3][4] = 1;
  163.  
  164. A[4][0] = 1;
  165. A[4][1] = 1;
  166. A[4][2] = 1;
  167. A[4][3] = 1;
  168. A[4][4] = 1;
  169. }*/
  170. FILE *fp0;
  171. fp0 = fopen("A.txt", "w+");
  172.  
  173. for (int i = 0; i < N; i++)
  174. {
  175. for (int j = 0; j < N; j++)
  176. {
  177. A[i][j] = 1;
  178. /*if (i == j)
  179. {
  180. A[i][j] = 0;
  181. }*/
  182. printf("i: %d\n", i);
  183. printf("j: %d\n", j);
  184. printf("A: %d\n", A[i][j]);
  185. fprintf(fp0, "%d\t", A[i][j]);
  186. }
  187. fprintf(fp0, "\n");
  188. }
  189. fclose(fp0);
  190.  
  191. const double t_start = 0;
  192. const double t_max = 25;
  193. const double dt = 0.1;
  194.  
  195. double t = t_start;
  196.  
  197. FILE *fp1;
  198. fp1 = fopen("omega.txt", "w+");
  199. for (int i = 0; i < N; i++)
  200. {
  201. fprintf(fp1, "%f\n", omega[i]);
  202. }
  203. fclose(fp1);
  204.  
  205. FILE *fp2;
  206. fp2 = fopen("results.txt", "w+");
  207. //setlocale(LC_NUMERIC, "French_Canada.1252");
  208.  
  209. while (t < t_max + dt)
  210. {
  211. fprintf(fp2, "%f\t", t);
  212. for (int i = 0; i < N; i++)
  213. {
  214. fprintf(fp2, i == N - 1 ? "%f" : "%f\t", theta[i]);
  215. }
  216. fprintf(fp2, "\n");
  217.  
  218. double theta_next[N];
  219.  
  220. RungeKutta(dt, theta, theta_next);
  221. CopyArray(theta_next, theta);
  222.  
  223. t += dt;
  224. printf("Progress: %d%%\n", (int)(100 * t / t_max));
  225. }
  226.  
  227. fclose(fp2);
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement