Advertisement
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 Zeydel
- {
- class Program
- {
- static void Main(string[] args)
- {
- double maxd, maxdp = 0, eps, k, sum_kv = 0;
- int i, j;
- double[] B, X, d;
- double[,] A;
- Console.Write("Задайте количество строк: ");
- int n = Convert.ToInt32(Console.ReadLine());
- B = new double[n];
- X = new double[n];
- d = new double[n];
- A = new double[n, n];
- for (i = 0; i < n; i++)
- {
- B[i] = 0;
- X[i] = 0;
- d[i] = 0;
- for (j = 0; j < n; j++)
- {
- A[i, j] = 0;
- }
- }
- Console.WriteLine("Построчно введите значения матрицы коэффициентов перед x\n(при i=j A[i][j] не равно 0)");
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n; j++)
- {
- Console.Write("A[" + i + "][" + j + "] = ");
- A[i, j] = Convert.ToDouble(Console.ReadLine());
- if ((i == j) && (A[i, j] == 0))
- {
- Console.WriteLine("Ошибка ввода");
- Console.ReadKey();
- return;
- }
- }
- }
- Console.WriteLine("Введите значения результирующей матрицы");
- for (i = 0; i < n; i++)
- {
- Console.Write("B[" + i + "] = ");
- B[i] = Convert.ToDouble(Console.ReadLine());
- }
- Console.WriteLine("Матрица коэффициентов перед х имеет вид:");
- for (i = 0; i < n; ++i)
- {
- for (j = 0; j < n; ++j)
- {
- Console.Write(A[i, j] + " ");
- }
- Console.WriteLine();
- }
- Console.WriteLine("Результирующая матрица имеет вид:");
- for (i = 0; i < n; ++i)
- {
- Console.WriteLine(B[i]);
- }
- //Выполняем проверку
- for (i = 0; i < n; ++i)
- {
- for (j = 0; j < n; ++j)
- {
- if (i != j)
- {
- k = -A[i, j] / A[i, i];
- sum_kv += k * k;
- }
- else
- {
- sum_kv += 0;
- }
- }
- }
- sum_kv = Math.Sqrt(sum_kv);
- if (sum_kv >= 1)
- {
- Console.WriteLine("Последовательность не является сходящейся!");
- Console.ReadKey();
- return;
- }
- //Водим значение погрешности
- Console.WriteLine("Введите значение погрешности:");
- eps = Convert.ToDouble(Console.ReadLine());
- //Производится решение методом Зейделя
- do
- {
- for (i = 0; i < n; ++i)
- {
- d[i] = X[i];
- X[i] = B[i];
- for (j = 0; j < n; ++j)
- {
- if (i != j)
- {
- X[i] -= A[i, j] * X[j];
- }
- }
- X[i] = X[i] / A[i, i];
- d[i] = Math.Abs(d[i] - X[i]);
- }
- maxd = d[0];
- for (i = 1; i < n; ++i)
- {
- if (d[i] > maxd)
- {
- maxd = d[i];
- }
- }
- } while (maxd > eps);
- //Вывод ответа
- Console.WriteLine("Корнями данной системы линейных алгебраических уравнений являются:");
- for (i = 0; i < n; ++i)
- {
- Console.WriteLine("X[" + i + "] = " + X[i]);
- }
- Console.ReadKey();
- return;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement