void CalcParameters(double alpha, double beta) { int i; for (i = 0; i < n; i++) { A[i] = GivenYs[i]; } for (i = 0; i < n - 1; i++) { H[i] = GivenXs[i + 1] - GivenXs[i]; } M.a[0, 0] = 2D * H[0]; M.a[0, 1] = H[0]; M.y[0] = 3 * ((A[1] - A[0]) / H[0] - Math.Tan(alpha * Math.PI / 0xB4)); for (i = 0; i < n - 2; i++) { M.a[i + 1, i] = H[i]; M.a[i + 1, i + 1] = 2D * (H[i] + H[i + 1]); if (i < n - 2) { M.a[i + 1, i + 2] = H[i + 1]; } if ((H[i] != 0D) && (H[i + 1] != 0D)) { M.y[i + 1] = ((A[i + 2] - A[i + 1]) / H[i + 1] - (A[i + 1] - A[i]) / H[i]) * 3D; } else { M.y[i + 1] = 0D; } } M.a[n - 1, n - 2] = H[n - 2]; M.a[n - 1, n - 1] = 2D * H[n - 2]; M.y[n - 1] = 3D * (Math.Tan(beta * Math.PI / 0xB4) - (A[n - 1] - A[n - 2]) / H[n - 2]); if (Gauss.Eliminate() == false) { throw new InvalidOperationException(); } Gauss.Solve(); for (i = 0; i < n; i++) { C[i] = M.x[i]; } for (i = 0; i < n; i++) { if (H[i] != 0D) { D[i] = 1D / 3D / H[i] * (C[i + 1] - C[i]); B[i] = 1D / H[i] * (A[i + 1] - A[i]) - H[i] / 3D * (C[i + 1] + 2 * C[i]); } } }
void CalcParameters() { int i; for (i = 0; i < n; i++) { A[i] = GivenYs[i]; } for (i = 0; i < n - 1; i++) { H[i] = GivenXs[i + 1] - GivenXs[i]; } A[n] = GivenYs[1]; H[n - 1] = H[0]; for (i = 0; i < n - 1; i++) { for (int k = 0; k < n - 1; k++) { M.a[i, k] = 0D; M.y[i] = 0D; M.x[i] = 0D; } } for (i = 0; i < n - 1; i++) { if (i == 0) { M.a[i, 0] = 2D * (H[0] + H[1]); M.a[i, 1] = H[1]; } else { M.a[i, i - 1] = H[i]; M.a[i, i] = 2D * (H[i] + H[i + 1]); if (i < n - 2) { M.a[i, i + 1] = H[i + 1]; } } if ((H[i] != 0D) && (H[i + 1] != 0D)) { M.y[i] = ((A[i + 2] - A[i + 1]) / H[i + 1] - (A[i + 1] - A[i]) / H[i]) * 3D; } else { M.y[i] = 0D; } } M.a[0, n - 2] = H[0]; M.a[n - 2, 0] = H[0]; if (Gauss.Eliminate() == false) { throw new InvalidOperationException(); } Gauss.Solve(); for (i = 1; i < n; i++) { C[i] = M.x[i - 1]; } C[0] = C[n - 1]; for (i = 0; i < n; i++) { if (H[i] != 0D) { D[i] = 1D / 3D / H[i] * (C[i + 1] - C[i]); B[i] = 1D / H[i] * (A[i + 1] - A[i]) - H[i] / 3D * (C[i + 1] + 2 * C[i]); } } }