Advertisement
enkov

Delay DE Max

Jul 11th, 2013
482
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.57 KB | None | 0 0
  1.         double[,] alpha;
  2.         double[,] beta;
  3.         int k_max;
  4.  
  5.         int T0 = 3, T = 15, h = 3;  // k in T0, T
  6.  
  7.         // max. element from alpha(beta)[n,k1] to alpha(beta)[n,k2]
  8.     public double MAX_S(double [,] arr, int n, int k1, int k2)
  9.         {
  10.             double pmax = arr[n, k1];
  11.  
  12.             k_max = k1;  // position of the maximal element
  13.             for (int s = k1+1; s <= k2; s++)
  14.                 if (pmax < arr[n, s])
  15.         {
  16.             pmax = arr[n, s]; k_max = s;
  17.         }
  18.             return pmax;
  19.         }
  20.  
  21.         private void CalcAlphaBeta()
  22.         {
  23.             alpha = new double[10, 20];
  24.             beta  = new double[10, 20];
  25.  
  26.             int N, k;
  27.             double x, max_a, max_b;
  28.            
  29.             for (k = T0 - h; k <= T; k++)
  30.             {
  31.                 alpha[0, k] = -k;
  32.                 beta[0, k]  = k;
  33.             }
  34.  
  35.             double Ln, Mn, Kn, Pn;
  36.             double na, nb;
  37.             double q1, q4, q3, q2, q5, q6, Q1, Q4, Q3, Q2, Q5, Q6;
  38.             double max_an, max_bn, Pa, Pb;
  39.             int R;
  40.             double n2 = 1;
  41.  
  42.             for (N = 1; N < 9; N++)
  43.             {
  44.                 Ln = Math.Min(-alpha[N - 1, 0], 0.50 - alpha[N - 1, 1]); Kn = Math.Min(Ln, n2);
  45.                 alpha[N, 0] = -Kn * Ln;
  46.                 alpha[N, 1] = 0.5 - Kn * Ln;
  47.                 alpha[N, 2] = Math.Pow(1.1, 0.1 * alpha[N - 1, 15]);
  48.  
  49.                 Mn = Math.Min(beta[N - 1, 0], beta[N - 1, 1] - 0.50); Pn = Math.Min(Mn, n2);
  50.                 beta[N, 0] = Pn * Mn;
  51.                 beta[N, 1] = 0.5 + Pn * Mn;
  52.                 beta[N, 2] = Math.Pow(1.1, 0.1 * beta[N - 1, 15]);
  53.  
  54.                 na = 4;
  55.                 for (k = T0; k <= T; k++)
  56.                 {
  57.                     max_a  = MAX_S(alpha, N-1, k-h, k);
  58.                     max_b  = MAX_S(beta, N-1, k-h, k);
  59.                     max_an = MAX_S(alpha, N, k-h, k-1);
  60.                     max_bn = MAX_S(beta, N, k-h, k-1);
  61.  
  62.                     if (k == 3)
  63.                         R = k - 1;
  64.                     else if (k <= 8)
  65.                         R = k - 2;
  66.                     else
  67.                         R = k - 3;
  68.  
  69.                     nb = na * 4;
  70.  
  71.                     q1 = nb - alpha[N - 1, k];
  72.                     q3 = nb - max_a;
  73.                     q5 = nb - alpha[N - 1, R];
  74.  
  75.                     q2 = nb - beta[N - 1, k];
  76.                     q4 = nb - max_b;
  77.                     q6 = nb - beta[N - 1, R];
  78.  
  79.                     Q1 = na / q1 / q1;  Q3 = na / q3 / q3;  Q5 = na / q5 / q5;
  80.                     Q2 = na / q2 / q2;  Q4 = na / q4 / q4;  Q6 = na / q6 / q6;
  81.  
  82.                     Pa = na / q1 + na / 2 / q3 + na / q5 - alpha[N - 1, k] * Q1 - max_a * Q3 - alpha[N - 1, R] * Q5;
  83.                     x = (Pa + alpha[N, k - 1] - alpha[N, R] * Q5) / (1 - Q1 - Q3);
  84.                     if (x > max_an)
  85.                         alpha[N, k] = x;
  86.                     else
  87.                         alpha[N, k] = (Pa + alpha[N, k - 1] - alpha[N, R] * Q5 + Q3 * max_an) / (1 - Q1);
  88.  
  89.                     Pb = na / q2 + na / 2 / q4 + na / q6 - beta[N - 1, k] * Q2 - max_b * Q4 - beta[N - 1, R] * Q6;
  90.                     x = (Pb + beta[N, k - 1] - beta[N, R] * Q6) / (1 - Q2 - Q4);
  91.                     if (x > max_bn)
  92.                         beta[N, k] = x;
  93.                     else
  94.                         beta[N, k] = (Pb + beta[N, k - 1] - beta[N, R] * Q6 + Q4 * max_bn) / (1 - Q2);
  95.  
  96.                     na = na * 2;
  97.                 }
  98.                 n2 = n2 / 2;
  99.             }
  100.         // the result is in the arrays 'alpha' and 'beta'
  101.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement