C# метод Зейделя ошибка

TimeLordRu

Известный
Автор темы
151
38
C#:
using System;
namespace mtr1
{
    class Program
    {
        static int int_number()
        {
            int number;
            while ((!int.TryParse(Console.ReadLine(), out number)) || (number < 1))
            {
                Console.Write("Ошибка! Введите целочисленное положительное число: ");
            }
            return number;
        }
        static float float_number()
        {
            float number;
            while (!float.TryParse(Console.ReadLine(), out number))
            {
                Console.Write("Ошибка! Введите целочисленное положительное число: ");
            }
            return number;
        }
        public static void Main()
        {
            Console.Write("Введите размерность: ");
            int n = int_number();
            double[] x0 = new double[n];
            double[] x1 = new double[n];
            double[,] matrix = new double[n, n + 1];
            double[,] matrixconst = new double[n, n + 1];
            double[] x = new double[n];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    Console.Write($"Введите элемент x[{i + 1}, {j + 1}]: ");
                    matrix[i, j] = float_number();
                    matrixconst[i, j] = matrix[i, j];
                }
                Console.Write($"Введите число, которому равна {i + 1} строка: ");
                matrix[i, n] = float_number();
                matrixconst[i, n] = matrix[i, n];
                x[i] = matrix[i, n];
            }


            bool pravda;
            double e = 0.001;

            int iter1 = 0;

            for (int i = 0; i < n; i++)
            {
                x0[i] = 1;
            }
            do
            {
                iter1++;
                for (int i = 0; i < n; i++)
                {
                    double sum = 0;

                    for (int j = 0; j < n; j++)
                    {
                        if (j != i)
                        {

                            sum += (matrix[i, j] * x0[j]);

                            x1[i] = (x[i] - sum) / matrix[i, i];

                            x0[i] = x1[i];
                        }
                    }
                }
                pravda = true;

                for (int i = 0; i < n; i++)
                {
                    if (Math.Abs(x1[i] - x0[i]) > e)
                    {
                      
                        pravda = false;
                        break;
                    }
                }



            }
            while (pravda == false);
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine($"x{i + 1} = {Math.Round(x1[i], 4)}");
            }

            Console.WriteLine($"кол-во итераций {iter1} ");
            Console.WriteLine();


        }
    }
}
в некоторых системах уравнений нормально считает, а в некоторых не правильно. Не знаете, где ошибка?

ошибка в том, что он выводит решение к последнему уравнению системы. А чтобы это решение состыковывалось с остальными уравнениями системы, маленько не понимаю
 
Последнее редактирование: