Решение системы уравнений методом Гаусса, исправить код - 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; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д