Решение системы уравнений методом Гаусса, исправить код - C#
Формулировка задачи:
Здравсвуйте! Пишу код, который решает системы уравнений методом Гаусса, но на последнем этапе произошла загвостка.
В последнем кусочке кода долно происходить следующее (цифры взяты другие):
x3 =5/8
x2 = -6 + 10 * 5/ 8 = 1/4
x1 = -1 + 2*1/4 + 2*5/ 8 = 3/4
Но в массиве, куда записываются конечные результаты, выводятся нули. Помогите пожалуйста найти ошибку и исправить код.
Листинг программы
- 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();
- }
- }
- }
Решение задачи: «Решение системы уравнений методом Гаусса, исправить код»
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;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д