Решение системы уравнений методом Гаусса, исправить код - C#

Узнай цену своей работы

Формулировка задачи:

Здравсвуйте! Пишу код, который решает системы уравнений методом Гаусса, но на последнем этапе произошла загвостка.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            int stolb = 4;
            int stroka = 3;
 
            double[,] matrix = new double[stroka, stolb];  // заданная матрица
            double[,] matrix2 = new double[stroka, stolb]; // промежуточная
            double[,] matrixBuf = new double[stroka, stolb]; // конечная матрица
 
            matrix[0, 0] = 2;
            matrix[0, 1] = 1;
            matrix[0, 2] = 4;
            matrix[0, 3] = 16;

            matrix[1, 0] = 3;
            matrix[1, 1] = 2;
            matrix[1, 2] = 1;
            matrix[1, 3] = 10;

            matrix[2, 0] = 1;
            matrix[2, 1] = 3;
            matrix[2, 2] = 3;
            matrix[2, 3] = 16;
 
            for (int i = 0; i < stroka; i++)
            {
                for (int q = 0; q < stolb; q++)
                {
                    matrix2[i,q] = matrix[i, q];
                }
            }

            for (int i = 0; i < stroka; i++)
            {
                for (int q = 0; q < stolb; q++)
                {
                    Console.Write(matrix[i, q] + "\t");
                }
                Console.WriteLine();
            }
            Console.WriteLine("  ");
            Console.ReadLine();

            int count = 0;
            int countElem = 0;
            int countElem2 = 0;
            for (int i = 0; i < stroka; i++)
            {
                count++;
                double[] matrixStroka = new double[stolb - count];
 
                for (int q = 0; q < stolb - count; q++)
                {
                    if (count == 1)
                    {
                        countElem++;
                        matrixStroka[q] = -(matrix2[i, q + count] / matrix2[i, i]);
                        if (countElem == stolb - count)
                        {
                            matrixStroka[q] = -(matrixStroka[q]);
                        }
                    }
                    
                    else
                    {
                        countElem2++;
                        if (countElem2 != stolb - count)
                            matrixStroka[q] = -(matrix2[i, q + count] / matrix2[i, i]);
                        else
                            matrixStroka[q] = (matrix2[i, q + count] / matrix2[i, i]);
                    }
                }

                    for (int q = 0; q < stolb - count; q++)
                    {
                        matrixBuf[count - 1, q] = matrixStroka[q];
                    }
 
                    if (count == stroka)
                    {
                        matrixBuf[count - 1, 0] = -(matrixBuf[count - 1, 0]);
                        break;
                    }
                
                for (int q = 0; q < stolb - count; q++)
                {
                    Console.WriteLine("dfd[{0}] = {1}", q, matrixStroka[q]);
                }
                Console.ReadLine();
 
                double[,] matrixProiz = new double[stroka - count, stolb - count]; 
                for (int t = 0; t < stroka-count; t++)
                {
                    for (int q = 0; q < stolb - count; q++)
                    {
                        matrixProiz[t, q] = matrixStroka[q] * matrix2[t+count, count-1];
                        Console.Write(matrixProiz[t, q] + "\t");
                    }
                    Console.WriteLine();
                }
                Console.ReadLine();
 
                int countSt = 0;
                for (int t = 0; t < stroka - count; t++)
                {
                    for (int q = 0; q < stolb - count; q++)
                    {
                        countSt++;
                        if (countSt != stolb - count)
                            matrix2[t + count, q + count] = matrixProiz[t, q] + matrix2[t + count, q + count];
                        else
                        {
                            matrix2[t + count, q + count] = -(matrixProiz[t, q]) + matrix2[t + count, q + count];
                            countSt = 0;
                        }
                    }
                }
 
                for (int u = 0; u < stroka; u++)
                {
                    for (int q = 0; q < stolb; q++)
                    {
                       
                        Console.Write(matrix2[u, q] + "\t");
                    }
                    Console.WriteLine();
                }
                Console.WriteLine("  ");
                Console.ReadLine();
            }
            //Console.ReadLine();
 
            for (int u = 0; u < stroka; u++)
            {
                for (int q = 0; q < stolb; q++)
                {
                    Console.Write(matrixBuf[u, q] + "\t");
                }
                Console.WriteLine();
            }
            Console.WriteLine("  ");
            Console.ReadLine();
 
            double[] result = new double[stroka];
            double resultat = matrixBuf[stroka - 1, 0];
            result[stroka-1] = matrixBuf[stroka - 1, 0];
            int a = stroka - 2;
            int countRez = 0;
            int countEl = 0;
            for (int u = a; u < a; --u)  // перемножение и сложение элементов
            {
 
                for (int q = 0; q < stolb; q++)
                {
                    countEl++;
                    if (countEl == 1)
                        resultat = resultat * matrixBuf[u, 0];  //перемножение эл-ов
                    else 
                    {
                        resultat = resultat + matrixBuf[u, q]; // сложение эл-ов
                    }
                }
                
            } 

            for (int r = 0; r < result.Length; r++)
            {
                Console.WriteLine("Result[{0}] = {1}", r, result[r]);
            }
            Console.ReadLine();

        }
    }
}
В последнем кусочке кода долно происходить следующее (цифры взяты другие): x3 =5/8 x2 = -6 + 10 * 5/ 8 = 1/4 x1 = -1 + 2*1/4 + 2*5/ 8 = 3/4 Но в массиве, куда записываются конечные результаты, выводятся нули. Помогите пожалуйста найти ошибку и исправить код.

Решение задачи: «Решение системы уравнений методом Гаусса, исправить код»

textual
Листинг программы
int countEl = 0;
            int countStr = 0;
            int countS = 0;
            result[0] = matrixBuf[stroka - 1, 0];
            double[] buffer = new double[stroka];
            double a = 0;
            for (int u = 0; u < stroka - 1; u++)  // перемножение и сложение элементов
            {
                countStr++;
                for (int q = 0; q < 2; q++)
                {
                    countEl++;
                    if (countEl == 1)
                    {
                        for (int t = 0; t < stroka; t++)
                        {
                            buffer[t] = result[t] * matrixBuf[stroka - u - 2, t];
                        }
                    }
                    else 
                    {
                        for (int t = 0; t < buffer.Length; t++)
                        {
                            countS++;
                            a = a + buffer[t];
                            if(countS == stroka)
                            {
                                result[u + 1] = a;
                                countStr = 0;
                            }
                        }
                    }
                }
                if (countEl == 2)
                {
                    countEl = 0;
                }
                
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5
Похожие ответы