В данном разделе представлены два матричных калькулятора) Первый - сделан как можно проще, а Второй уже более менее похож на настоящий калькулятор матрицы реализован с помощь КЛАССА ДЛЯ РАБОТЫ С МАТРИЦАМИ(для простоты реализации изначально работает с матрицами 3х3 записанных в DataGridView).
ПЕРВЫЙ ВАРИАНТ)
Данная программа корректно работает только с квадратными матрицами. Матрицы заполняются случайными числами. Самое важное тут то, что она умеет считать определитель, а все остальное элементарные вещи и базовые понятия, которые не должны вызывать у вас трудностей) Все массивы выводятся в label
З.Ы. Перемножение матриц происходит неправильно... Правильный алгоритм перемножения выложил в раздел Массивы... Исправлять тут ничего не буду... Также во ВТОРОМ ВАРИАНТЕ, который представлен вместе с Классом есть правильный алгоритм перемножения матриц...
ПЕРВЫЙ ВАРИАНТ)
Данная программа корректно работает только с квадратными матрицами. Матрицы заполняются случайными числами. Самое важное тут то, что она умеет считать определитель, а все остальное элементарные вещи и базовые понятия, которые не должны вызывать у вас трудностей) Все массивы выводятся в label
З.Ы. Перемножение матриц происходит неправильно... Правильный алгоритм перемножения выложил в раздел Массивы... Исправлять тут ничего не буду... Также во ВТОРОМ ВАРИАНТЕ, который представлен вместе с Классом есть правильный алгоритм перемножения матриц...
label3.Text = "";
label8.Text = "";
label10.Text = "";
label13.Text = "";
label15.Text = "";
int n=Convert.ToInt32(textBox1.Text);
int m = Convert.ToInt32(textBox2.Text);
int s = 0,s1=0;
Random rnd = new Random();
int[,] a=new int[n,m];
int[,] b = new int[n, m];
int[,] c = new int[n, m];
int[,] f = new int[n, m];
int[,] k = new int[n, m];
for (int i = 0; i < n; i++) //матрица1
{
for (int j = 0; j < m; j++)
{
a[i, j] = rnd.Next(-44,53);
label3.Text += a[i, j]+" ";
if (i == j || i < j)
s += a[i, j];
if ((i == (n - 1) && (j == 0 || j == 1)) || (i == (n - 2) && j == 0))
s1 += a[i, j];
}
label3.Text+= Environment.NewLine;
}
for (int i = 0; i < n; i++) //матрица2
{
for (int j = 0; j < m; j++)
{
b[i, j] = rnd.Next(-44, 53);
label8.Text += b[i, j] + " ";
}
label8.Text += Environment.NewLine;
}
for (int i = 0; i < n; i++) //умножение и сложение
{
for (int j = 0; j < m; j++)
{
c[i, j] = a[i,j]+b[i,j];
f[i, j] = a[i, j] * b[j, i];
label10.Text += c[i, j] + " ";
label13.Text += f[i, j] + " ";
if (j % n == (n-1)) label13.Text += Environment.NewLine;
}
label10.Text += Environment.NewLine;
}
label6.Text = s.ToString();
label7.Text = s1.ToString();
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
k[i, j] = a[j, i];
}
}
//Тран... матрицы
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
label15.Text+=k[i, j]+" ";
}
label15.Text += Environment.NewLine;
}
// определитель
//переменная n(размерность иходной ''квадратной'' матрицы) должна получить значение до этого момента
double[,] L = new double[n, n];
double[,] U = new double[n, n];
//до этого момента массив A должен быть полностью определен
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
U[0, i] = a[0, i];
L[i, 0] = a[i, 0] / U[0, 0];
double sum = 0;
for (int kk = 0; kk < i; kk++)
{
sum += L[i, kk] * U[kk, j];
}
U[i, j] = a[i, j] - sum;
if (i > j)
{
L[j, i] = 0;
}
else
{
sum = 0;
for (int kk = 0; kk < i; kk++)
{
sum += L[j, kk] * U[kk, i];
}
L[j, i] = (a[j, i] - sum) / U[i, i];
}
}
}
double det2 = 1;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (i == j) det2 *= U[i, j];
}
}
label17.Text = det2.ToString();
Второй Вариант)))
Значения матриц вводятся вручную, матрицы имеют вид 3x3)))
Для начала Сам Код Класса для работы с матрицами)))
namespace Matrix
{
class MyMatrix
{
int[,] a=new int[3,3];
//передача значений
public void Set(int i, int j, int znach)
{
a[i, j] = znach;
}
//сложение
public static MyMatrix operator +(MyMatrix matrix1, MyMatrix matrix2)
{
MyMatrix NewMatrix = new MyMatrix();
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
NewMatrix.a[i, j] = matrix1.a[i, j] + matrix2.a[i, j];
}
}
return NewMatrix;
}
//вывод матрицы
public string Visual(int i, int j)
{
return a[i, j].ToString();
}
//вывод всей и сразу.Хд
public DataGridView FullVisual(DataGridView dt)
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
dt.Rows[j].Cells[i].Value = a[i, j];
}
}
return dt;
}
//вычитание
public static MyMatrix operator -(MyMatrix matrix1, MyMatrix matrix2)
{
MyMatrix NewMatrix = new MyMatrix();
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
NewMatrix.a[i, j] = matrix1.a[i, j] - matrix2.a[i, j];
}
}
return NewMatrix;
}
//транспонирование
public MyMatrix Trans()
{
MyMatrix NewMatrix = new MyMatrix();
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
NewMatrix.a[i, j] = a[j, i];
}
}
return NewMatrix;
}
//умножение
public static MyMatrix operator *(MyMatrix matrix1, MyMatrix matrix2)
{
MyMatrix NewMatrix = new MyMatrix();
for (int i = 0; i < 3; i++)
{
for (int k = 0; k < 3; k++)
{
//int a = 0;
for (int j = 0; j < 3; j++)
{
//a += matrix1.a[j,k] * matrix2.a[i, j];
NewMatrix.a[i, k]+= matrix1.a[j, k] * matrix2.a[i, j];
}
//NewMatrix.a[i, k] = a;
}
}
return NewMatrix;
}
//заполнение
public void Zapoln(DataGridView grid)
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
a[i, j] = Convert.ToInt32(grid.Rows[j].Cells[i].Value);
}
}
}
}
}
Далее программная реализация, поставленной задачи.хд
Теперь все, что написано вне класса, так сказать.хд
namespace Matrix
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 3; i++)
{
dataGridView1.Rows.Add();
dataGridView2.Rows.Add();
dataGridView3.Rows.Add();
//dataGridView1.Rows[i].Cells[0].Value = i.ToString();
}
}
private void button1_Click(object sender, EventArgs e)
{
MyMatrix matrix1 = new MyMatrix();
MyMatrix matrix2 = new MyMatrix();
MyMatrix matrix3;
matrix1.Zapoln(dataGridView1);
matrix2.Zapoln(dataGridView2);
matrix3 = (matrix1 + matrix2);
matrix3.FullVisual(dataGridView3);
}
private void button2_Click(object sender, EventArgs e)
{
MyMatrix matrix1 = new MyMatrix();
MyMatrix matrix2 = new MyMatrix();
MyMatrix matrix3;
matrix1.Zapoln(dataGridView1);
matrix2.Zapoln(dataGridView2);
matrix3 = (matrix1 - matrix2);
matrix3.FullVisual(dataGridView3);
}
private void button3_Click(object sender, EventArgs e)
{
MyMatrix matrix1 = new MyMatrix();
MyMatrix matrix3;
matrix1.Zapoln(dataGridView1);
matrix3 = matrix1.Trans();
matrix3.FullVisual(dataGridView3);
}
private void button4_Click(object sender, EventArgs e)
{
MyMatrix matrix1 = new MyMatrix();
MyMatrix matrix2 = new MyMatrix();
MyMatrix matrix3;
matrix1.Zapoln(dataGridView1);
matrix2.Zapoln(dataGridView2);
matrix3 = (matrix1 * matrix2);
matrix3.FullVisual(dataGridView3);
}
}
}
Вот как-то так) Тут все работает правильно)