Обратная матрица - 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)
        {
 
        }
    }
}

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


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

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

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