#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cmath>
using namespace std;
long double matrix[3][7];
// end of init
void dbg()
{
for(int i = 0; i < 3; i++)
{
for(int j = 3; j < 6; j++)
{
cout.width(9);
cout <<fixed << setprecision(4) << right << matrix[j] << " ";
}
cout << endl << endl;
}
}
int main()
{
//1 string
matrix[0][0] = 3.75;
matrix[0][1] = -0.28;
matrix[0][2] = 0.17;
matrix[0][3] = 1;
matrix[0][4] = 0;
matrix[0][5] = 0;
matrix[0][6] = 0.75;
//2 string
matrix[1][0] = 2.11;
matrix[1][1] = -0.11;
matrix[1][2] = -0.12;
matrix[1][3] = 0;
matrix[1][4] = 1;
matrix[1][5] = 0;
matrix[1][6] = 1.11;
//3 string
matrix[2][0] = 0.22;
matrix[2][1] = -3.17;
matrix[2][2] = 1.81;
matrix[2][3] = 0;
matrix[2][4] = 0;
matrix[2][5] = 1;
matrix[2][6] = 0.05;
for(int i = 1; i < 3; i++)
{
for(int j = 1; j < 7; j++)
{
matrix[j] -= matrix[0][j] / (matrix[0][0] / matrix[0]);
}
}
matrix[1][0] = 0;
matrix[2][0] = 0;
for(int j = 2; j < 7; j++)
{
matrix[2][j] -= matrix[1][j] / (matrix[1][1] / matrix[2][1]);
}
matrix[2][1] = 0;
long double det = matrix[0][0] * matrix[1][1] *matrix[2][2];
cout << "Det = " << det << endl;
for(int j = 3; j <7; j++)
{
matrix[2][j] /= matrix[2][2];
}
matrix[2][2] = 1;
for(int i =0; i < 2;i++)
{
for(int j = 6; j > 1 ; j--)
{
matrix[j] -= matrix[2][j] / (matrix[2][2] / matrix[2]);
}
}
for(int j = 2; j <7; j++)
{
matrix[1][j] /= matrix[1][1];
}
matrix[1][1] = 1;
for(int j = 6; j >0 ; j-- )
{
matrix[0][j] -= matrix[1][j] / (matrix[1][1] / matrix[0][1]);
}
for(int j = 1; j <7; j++)
{
matrix[0][j] /= matrix[0][0];
}
matrix[0][0] = 1;
cout << "Obr matriza" << endl << endl;
dbg();
cout << "Otvet [" << matrix[0][6] <<" , " << matrix[1][6] << " , " << matrix[2][6] << "]" ;
return EXIT_SUCCESS;
}
программа каторая решает системы линейных уравнений
А^1=Ap/|A|.
|A| - определитель матрицы A.
Ap - Матрица эл. которой яв. алгебраическим дополнением эл. матрицы At.
At - транспонированая матрица.
Так вот в чем проблема. Как разделить матрицу на число, я что-то пропустил. Как умножить на число знаю, каждый эл. умножить на число. А делить как? Так же?
PS
Я не знаю где создать эту тему, решил здесь. Плизз не сносите быстро так или переместите куда нужно.
Есть и другой способ нахождения обратной матрицы. Вот я как-то такое делал, система 3*3, решение методом Гаусса, может пригодится. Неотлаженную, но логика вроде верная, просьба за глюки по почкам не бить;) Сам алгоритм, последовательное отделение переменных получением нижней диагональной матрицы, поставь и посмори промеж. выводы.
хм...я отом же говорю метод гауса, и вперед. кстати его же используй для нахождения обратной матрицы
посмотри здесь:
Это нужно вычеркнуть строку и столбец по i j из предыдушей матрицы и найти определитель (n-1)-го порядка. Определитель матрицы найти не проблема, т.к. функцию уже написал, а вот как найти минор и у меня получилась рекурсия, тоесть из функции определителя вызывается функция минора. Короче осталось написать функцию вычисления минора. Может нужно создать новую кв. матрицу(масив)(n-1)го порядка и в него вписать нужные эл., больше ничего в голову не пришло. Плизз помогите.