Advertisement
agmike

spline (NR in C) in C#

Apr 10th, 2014
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.99 KB | None | 0 0
  1. static void spline(float[] x, float[] y, int n, float ld, bool lnat, float rd, bool rnat, float[] y2)
  2. {
  3.     int i, k;
  4.     float p, qn, sig, un;
  5.     float[] u = new float[n];
  6.     if (lnat)
  7.         y2[0] = u[0] = 0.0f;
  8.     else {
  9.         y2[0] = -0.5f;
  10.         u[0] = (3.0f / (x[1] - x[0])) * ((y[1] - y[0]) / (x[1] - x[0]) - ld);
  11.     }
  12.     for (i = 1; i < n - 1; ++i) {
  13.         sig = (x[i] - x[i - 1]) / (x[i + 1] - x[i - 1]);
  14.         p = sig * y2[i - 1] + 2.0f;
  15.         y2[i] = (sig - 1.0f) / p;
  16.         u[i] = (y[i + 1] - y[i]) / (x[i + 1] - x[i]) - (y[i] - y[i - 1]) / (x[i] - x[i - 1]);
  17.         u[i] = (6.0f * u[i] / (x[i + 1] - x[i - 1]) - sig * u[i - 1]) / p;
  18.     }
  19.     if (rnat)
  20.         qn = un = 0.0f;
  21.     else {
  22.         qn = 0.5f;
  23.         un = (3.0f / (x[n - 1] - x[n - 2])) * (rd - (y[n - 1] - y[n - 2]) / (x[n - 1] - x[n - 2]));
  24.     }
  25.     y2[n - 1] = (un - qn * u[n - 2]) / (qn * y2[n - 2] + 1.0f);
  26.     for (k = n - 2; k >= 0; --k)
  27.         y2[k] = y2[k] * y2[k + 1] + u[k];
  28. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement