Численные методы
Численные методы
СЛАУ
Метод Гаусса
Метод Гаусса для обращения матриц
Метод Гаусса для вычисления определителя
Интегрирование
Метод прямоугольников
Метод трапеций
Метод Симпсона
Методы оптимизации
Поиск отрезка локализации
Алгоритм Свена
Одномерный поиск минимума
Метод дихотомии
Метод золотого сечения
Метод Фибоначчи
Двухмерный поиск минимума
Метод градиентов
Метод наискорейшего спуска
Метод Флетчера-Ривса
 
 
Главная
Определения
Ссылки
Поиск


Метод Гаусса для вычисления определителя

#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
Спасибо за программу, очень помогла. Но в ней есть недочет. При перестановке строк знак определителя меняется. Автор это не учёл