Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace ConsoleApplication
- {
- public class Gauss_method
- {
- public double[] method(double[,] sole, int dimension, out double[] result, out double[,] triangularMatrix)
- {
- int xCount, yCount, Count = 0;
- int maxIndexY = 0;
- double Coeff;
- double maxValue = 0;
- double sum = 0;
- double[] result_el = new double[2];
- while (Count < dimension - 1)
- {
- glav_el(sole, dimension, Count); //Вычисление главного элемента
- maxValue = GlavElement.maxValue; //Значение максимального элемента
- maxIndexY = GlavElement.maxIndexY;//Значение индекса максимального элемента
- sole = ChangeLines(sole,Count,maxIndexY,dimension); //Меняем строки местами
- sole = Zeroing(sole,Count,dimension); //Обнуление
- Count++;
- }
- triangularMatrix = TriangularMatrix(dimension, sole);//Треугольная матрица
- result = back_stroke(dimension, sole);// Обратный проход
- return result;
- }
- public void glav_el(double[,] sole, int dimension, int Count) //Нахождение главного элемента и его индекса
- {
- int yCount;
- double maxValue = 0;
- int maxIndexY = Count;
- double[] max = new double[2];
- maxValue = sole[Count,Count];
- for (yCount = Count+1; yCount <= dimension - 1; yCount++)
- {
- if (maxValue < sole[yCount,Count])
- {
- maxValue = sole[yCount,Count];
- maxIndexY = yCount;
- }
- }
- GlavElement.maxIndexY = maxIndexY;
- GlavElement.maxValue = maxValue;
- }
- double[] back_stroke(int dimension, double[,] sole) //Обратных ход
- {
- double[] result = new double[dimension];
- int yCount, xCount;
- double sum;
- result[dimension - 1] = sole[dimension - 1,dimension] / sole[dimension - 1,dimension - 1]; //находим значение последнего неизвестного
- for (yCount = dimension - 2; yCount >= 0; yCount--)
- {
- sum = 0;
- for (xCount = dimension - 1; xCount >= yCount; xCount--)
- {
- sum += sole[yCount,xCount] * result[xCount];
- }
- result[yCount] = (sole[yCount,dimension] - sum) / sole[yCount,yCount];
- }
- return result;
- }
- double[,] ChangeLines(double[,] sole, int Count, int maxIndexY, int dimension) //Меняем строки местами
- {
- double tmp;
- int xCount;
- if (Count != maxIndexY)
- {
- for (xCount = Count; xCount <= dimension; xCount++)
- {
- tmp = sole[Count,xCount];
- sole[Count,xCount] = sole[maxIndexY,xCount];
- sole[maxIndexY,xCount] = tmp;
- }
- }
- return sole;
- }
- double[,] Zeroing(double[,] sole, int Count, int dimension)//Обнуление
- {
- int yCount;
- double Coeff;
- for (yCount = Count + 1; yCount <= dimension - 1; yCount++)
- {
- Coeff = -(sole[yCount,Count] / sole[Count,Count]);
- for (int k =Count ; k <= dimension; k++)
- {
- sole[yCount, k] += sole[Count, k] * Coeff;
- }
- }
- return sole;
- }
- double[,] TriangularMatrix(int dimension,double[,]sole) //треугольная матрица
- {
- double[,] triangularMatrix = new double[dimension,dimension+1];
- int yCount, xCount;
- for (yCount = 0; yCount <= dimension - 1; yCount++)
- {
- for (xCount = 0; xCount <= dimension; xCount++)
- triangularMatrix[yCount,xCount] = sole[yCount,xCount];
- }
- return triangularMatrix;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement