|
Метод Гаусса для вычисления определителя
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
const int n=3;//размерность матрицы
double
matr[n][n]={
2,0,0,
3,3,0,
1,3,4
};
double par,det=1.0,r[n];
int i,j,ii,k,jj,t=1;
for (j=0;j<n-1;j++)
{
if (matr[j][j]==0) //исключаем деление на 0
{
ii=j+1;
do
{
if((matr[ii][j]!=0)||(ii==n-1)) //ищем строку, в которой j-й элемент не 0
{
break;
}
ii++;
} while(true);
if((matr[ii][j]==0)&&(ii==n-1))// если нет такой строки, определитель = 0
{
t=0;
};
for(k=0;k<n;k++)// меняем j-ю строку и найденую
{
r[k]=matr[j][k];
matr[j][k]=matr[ii][k];
matr[ii][k]=r[k];
}
}
//прямой ход
//приведение к треугольному виду
for (i=j+1;i<n;i++)
{
if(matr[i][j]!=0)// если matr[i][j]=0, делать ничего не надо
{
par=matr[i][j]/matr[j][j];
for (jj=j;jj<n;jj++)
{
matr[j][jj]=matr[j][jj]*par;
matr[i][jj]=matr[i][jj]- matr[j][jj];
matr[j][jj]=matr[j][jj]/par;
}
}
}
}
if (t!=0){
for (i=0;i<n;i++)
{
det=det*matr[i][i];
}
} else
det=0;
cout<<det;
system( "pause");
return 0;
}
Комментарии к тексту:
, 28-03-2011, 18:01:45
Светлана, 16-09-2011, 04:35:54
Спасибо за помощь, очень пригодилось в решении численных методов.
Артём, 09-11-2011, 19:43:40
Спасибо за программу, очень помогла. Но в ней есть недочет. При перестановке строк знак определителя меняется. Автор это не учёл
|
|