Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace GaussAndSeidel
- {
- class Program
- {
- const double epsilon = 0.00001;
- static double[,] A =
- {
- {7.4, 2.2, -3.1, -0.7 },
- {1.6, 4.8, -8.5, 4.5 },
- {4.7, 7.0, -6.0, 6.6 },
- {5.9, 2.7, 4.9, -6.3 }
- };
- static double[] B = { 2, 4, 6, 8 };
- static int N = A.GetLength(0);
- static void Gauss(double[] X)
- {
- double[] Q = new double[N - 1];
- for (int k = 0; k < N - 1; k++)
- {
- for (int i = 0; i < N - 1; i++)
- Q[i] = A[i + 1, k] / A[k, k];
- for (int i = 0, j = k; j < N - 1;)
- {
- A[j + 1, i] = A[j + 1, i] - Q[j] * A[k, i];
- if (i == N - 1)
- {
- B[j + 1] = B[j + 1] - Q[j] * B[k];
- j++;
- i = 0;
- }
- else i++;
- }
- }
- X[N - 1] = B[N - 1] / A[N - 1, N - 1];
- double s;
- for (int i = N - 2; ; i--)
- {
- s = 0;
- for (int j = i + 1; j < N; j++)
- s += A[i, j] * X[j];
- X[i] = (B[i] - s) / A[i, i];
- if (i == 0)
- break;
- }
- Console.WriteLine("Метод Гаусса.");
- for (int i = 0; i < N; i++)
- Console.WriteLine(X[i]);
- Console.WriteLine();
- }
- static void Seidel()
- {
- Random r = new Random();
- double[] X = { r.Next(4), r.Next(4), r.Next(4), r.Next(4) };
- double[] newX = { 0, 0, 0, 0 };
- bool first = true;
- int i = 0;
- do
- {
- i++;
- if (!first)
- {
- X[0] = newX[0];
- X[1] = newX[1];
- X[2] = newX[2];
- X[3] = newX[3];
- }
- else
- first = false;
- newX[0] = 1 / A[0, 0] * (-A[0, 1] * X[1] - A[0, 2] * X[2] - A[0, 3] * X[3] + B[0]);
- newX[1] = 1 / A[1, 1] * (-A[1, 0] * newX[0] - A[1, 2] * X[2] - A[1, 3] * X[3] + B[1]);
- newX[2] = 1 / A[2, 2] * (-A[2, 0] * newX[0] - A[2, 1] * newX[1] - A[2, 3] * X[3] + B[2]);
- newX[3] = 1 / A[3, 3] * (-A[3, 0] * newX[0] - A[3, 1] * newX[1] - A[3, 2] * newX[2] + B[3]);
- } while (Math.Sqrt(Math.Pow((newX[0] - X[0]), 2) + Math.Pow((newX[1] - X[1]), 2)
- + Math.Pow((newX[2] - X[2]), 2) + Math.Pow((newX[3] - X[3]), 2)) > epsilon);
- Console.WriteLine("Метод Зейделя:");
- Console.WriteLine("{0}\n{1}\n{2}\n{3}\nКоличество итераций:{4}", newX[0], newX[1], newX[2], newX[3], i);
- }
- static void Main(string[] args)
- {
- Console.WriteLine(N+"\n");
- double[] X = new double[N];
- Gauss(X);
- Seidel();
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment