static void MechanicalInit() { if (!mech) { mech = true; MechanicalGreeting(); Table.Init(); SetCell(f0, ff); SetLength(f0, Printer.f); } else { Reset(); } FindGaussQuadrature(); var f = new Vector(n); for (int i = 0; i < n; i++) { f[i] = F(node[i]); } var G = new SquareMatrix(n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { G[i, j] = -A[j] * K(node[i], node[j]); } } for (int i = 0; i < n; i++) { G[i, i] += 1; } un = GaussMod.Do(G, f, false); }
static void Main(string[] args) { Init(); Title = "Task1.2"; OutputEncoding = Encoding.GetEncoding(1251); Left("Рассмотрим исходную систему AX = B"); var A = new SquareMatrix(6.5176E-06, -8.0648E-03, 4.23528, 5.9176E-03, -0.80648, 1.46528, 0.87176, 0.79352, 0.91528); var B = new Vector(3.61628, 1.52097, 1.81150); Right(A, B); var ord = GaussOrd.Do(A, B, true); var mod = GaussMod.Do(A, B, true); var det = SquareMatrix.Determinant(A, true); var inv = GaussMod.Invert(A, true); Line(); var x = inv * B; AlwaysLeft("X = A^(-1) * B"); AlwaysRight(x); Line(); OutputResidual(A * x - B); Line(); AlwaysLeft("Число обусловленности матрицы A (куб.)"); AlwaysRight(A.Cond1); AlwaysLeft("Число обусловленности матрицы A (окт.)"); AlwaysRight(A.Cond8); ReadKey(); }
static void DegenerateInit() { if (!degenerate) { degenerate = true; DegenerateGreeting(); Table.Init(); SetCell(f0, ff); SetLength(f0, Printer.f); } else { Reset(); } var H = SquareMatrix.Id(n); var B = new Vector(n); double d = h / m; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { for (int l = 0; l < m * m; l++) { H[i, j] -= d * Beta(i, a + (0.5 + l) * d) * Alpha(j, a + (0.5 + l) * d); } } for (int l = 0; l < m * m; l++) { B[i] += d * Beta(i, a + (0.5 + l) * d) * F(a + (0.5 + l) * d); } } A = GaussMod.Do(H, B, false).X; }
static void Main(string[] args) { Init(); Title = "Task2 Итерационные методы решения линейных систем"; OutputEncoding = Encoding.GetEncoding(1251); var A = new SquareMatrix(100, 6, 2, 2, 100, 5, 3, 4, 100); var B = new Vector(60, 70, 80); Left("Рассмотрим исходную систему AX = B"); Right(A, B); if (!CheckConvergenceCondition(A)) { return; } xGauss = GaussMod.Do(A, B, false); Left("Решение модифицированным методом Гаусса"); Right(xGauss); OutputResidual(A * xGauss - B); Line(); var D = A.DiagonalInvert(); var H = Id(A.Rows) - D * A; var g = D * B; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (i != j) { H[i, j] = 1 / System.Math.Pow(2, System.Math.Abs(i - j) + 1); } else { H[i, j] = 0; } } } g = new Vector(3); for (int i = 0; i < 3; i++) { g[i] = 1; } Left("Приведём систему к виду X = HX + G"); Right(H, g); Iteration.A = A; Iteration.B = B; FixedPoint(H, g, steps); FixedPoint(H, g, e); Seidel(H, g, steps); Seidel(H, g, e); SuccessiveOverRelaxation(H, g, steps); ReadKey(); }