Обратная матрица - C# (185382)
Формулировка задачи:
Люди добрые! Прошу у вас помощи, для курсовой осталось сделать последнее задание, нужно найти обратную матрицу для заданной. Может есть у кого готовые алгоритмы?.. перерыл достаточное количество сайтов и форумов, но что то нормального, работающего кода так и не нашел ...
Решение задачи: «Обратная матрица»
textual
Листинг программы
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication2 { public partial class Form1 : Form { // ВНИМЕНИЕ. Данная программа педназначена только для квадратных матриц, точно имеющих решение, с невыражденой главнй диаганалью и т.д и т.п. //Программа НЕ имеет обработчиков ошибок.// это число применяются для задания матрицы. многим методам программы необходимо знать размер матрицы поэтому // я его вынес " на верх". а ещё потому, что неумею выводить несколько параметров. // [url]http://www.cyberforum.ru/csharp-beginners/thread868040.html[/url] //Если не понравилось то можно посматреть тут [url]http://msdn.microsoft.com/ru-ru/magazine/jj863137.aspx[/url] // Данный код, есть переделка отсюда :[url]http://www.********************/showthread.php?t=133673[/url] /*размеры матриц*/ static int razmer; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void AddColumns(int m, DataGridView dgw) { //добавляет n столбцов в элемент управления dgw //Заполнение DGView столбцами DataGridViewColumn column; for (int i = 0; i < m; i++) { column = new DataGridViewTextBoxColumn(); column.DataPropertyName = "Столбец" + i.ToString(); column.Name = "Столбец" + i.ToString(); dgw.Columns.Add(column); } } private void AddRows(int k, DataGridView dgw) { //добавляет m строк в элемент управления dgw //Заполнение DGView строками for (int i = 0; i < k; i++) { dgw.Rows.Add(); dgw.Rows[i].HeaderCell.Value = "row" + i.ToString(); } } // метод инициализирует( бранирует или выделяет) место под новые строки и столбцы; создаёт 2-х мерный квадратный массив! public double[,] MatrixCreate1(int rowscols) { if (rowscols != 0) { /*Очищаем матрицу */ dataGridView1.Columns.Clear(); dataGridView2.Columns.Clear(); /*Заполнение DGView столбцами */ AddColumns(rowscols, dataGridView1); AddColumns(rowscols, dataGridView2); /*Заполнение DGView строками*/ AddRows(rowscols, dataGridView1); AddRows(rowscols, dataGridView2); Random rnd = new Random(); int g; double[,] hhh = new double[rowscols,rowscols]; /* { {5,8,8}, {5,10,3}, {7,9,19} };*/ //проверочная матрица for (int i = 0; i < rowscols; ++i) { for (int j = 0; j < rowscols; ++j) { g=rnd.Next(10, 500); hhh[i,j]=g; dataGridView1.Rows[i].Cells[j].Value = hhh[i,j]; } } return hhh; } return null; } static double[,] One1(double[,] hhh, int h) { //'единичная матрица // h = 3; //активаровать для проверки. результат найдите тут: [url]http://matrixcalc.org/[/url] double[,] ggg = new double[h, h];// единичная матрица // Dim A_edin(k + 1, k + 1) As Double 'затем она перейдёт в обратную for (int i = 0; i < h; ) { for (int j = 0; j < h; ) { if (i == j) { ggg[i, j] = 1; } else { ggg[i, j] = 0; } j++; } i++; } // 'единичная матрица //'обратная матрица double arg; int i1; // Dim arg As Double // Dim i1 As Integer for (int j = 0; j < h; ) { for (int i = 0; i < h; ) { if (i == j) { goto k; } arg = hhh[i, j] / hhh[j, j]; for (i1 = 0; i1 < h; ) { hhh[i, i1] = hhh[i, i1] - hhh[j, i1] * arg; ggg[i, i1] = ggg[i, i1] - ggg[j, i1] * arg; i1++; } k: i++; } j++; } for (int j = 0; j < h; ) { for (int i = 0; i < h; ) { double arg_2; if (i == j) { arg_2 = hhh[i, j]; for (i1 = 0; i1 < h; ) { hhh[i, i1] = hhh[i, i1] / arg_2; ggg[i, i1] = ggg[i, i1] / arg_2; i1++; } } i++; } j++; } return ggg; } // Метод для распечатки матрицы в грид1 public void Print1(double[,] matrix, int rowscols) { //double[][] result; for (int i = 0; i < rowscols; ++i) // Копирование значений for (int j = 0; j < rowscols; ++j) { dataGridView1.Rows[i].Cells[j].Value = matrix[i, j]; } } // метод для распечаткт в грид2 public void Print2(double[,] matrix, int rowscols) { //double[][] result; for (int i = 0; i < rowscols; ++i) // Копирование значений for (int j = 0; j < rowscols; ++j) { dataGridView2.Rows[i].Cells[j].Value = matrix[i, j]; } } private void button1_Click(object sender, EventArgs e) { razmer = Convert.ToInt32(textBox1.Text); double[,] jjj = MatrixCreate1(razmer); double[,] kkk = One1(jjj,razmer); Print1(jjj, razmer); Print2(kkk,razmer); } private void button2_Click(object sender, EventArgs e) { } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { } private void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e) { } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д