private static double[] Gauss(Eq equat) { double[,] m = new double[equat.n, equat.n]; for (int i = 0; i < equat.n; i++) { for (int j = 0; j < equat.n; j++) { m[i, j] = equat.matr[i, j]; } } double d = Eq.Det(m); if (d != 0) { equat.Diag(); for (int i = equat.n - 1; i >= 0; i--) { double sum = 0; for (int j = equat.n - 1; j > i; j--) { sum += equat.x[j] * equat.matr[i, j]; } equat.x[i] = (equat.b[i] - sum) / equat.matr[i, i]; } } return(equat.x); }
public bool IsPO() { bool isPO = true; for (int i = 1; i <= n; i++) { double[,] temp = new double[i, i]; for (int j = 0; j < i; j++) { for (int k = 0; k < i; k++) { temp[j, k] = matr[j, k]; } } double det = Eq.Det(temp); if (det > 0) { continue; } else { isPO = false; break; } } return(isPO); }
public static double Det(double[,] ma) { double det = 1; double[] b = new double[(int)Math.Sqrt(ma.Length)]; Eq q = new Eq(ma, b); q.Diag(); for (int i = 0; i < q.n; i++) { det *= q.matr[i, i]; } return(det); }
private static double NewtonKotes(double a, double b, int m, int n) { double h1 = (b - a) / m, res = 0; for (int i = 1; i <= m; i++) { double[] mu = new double[n], x = new double[n]; double[,] matr = new double[n, n]; double hm = h1 / (n - 1); for (int j = 0; j < n; j++) { x[j] = (a + (i - 1) * h1) + j * hm; mu[j] = GetMu(j, -bt, a + i * h1) - GetMu(j, -bt, a + (i - 1) * h1); } for (int j = 0; j < n; j++) { for (int k = 0; k < n; k++) { matr[j, k] = Math.Pow(x[k], j); } } Eq equat = new Eq(matr, mu); double[] coof = Gauss(equat); for (int j = 0; j < n; j++) { res += coof[j] * func(x[j]); } } return(res); }