|
Метод Гаусса, программа
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
const int n=4;//размерность системы
double
//последний столбец — вектор свободных членов
matr[n][n+1]={
3,-2,-5,1,3,
2,-3,1,5,-3,
1,2,0,-4,-3,
1,-1,-4,9,22
},
y[n];
double par,sum,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))// если нет такой строки, значит система не разрешима
{
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+1;jj++)
{
matr[j][jj]=matr[j][jj]*par;
matr[i][jj]=matr[i][jj]- matr[j][jj];
matr[j][jj]=matr[j][jj]/par;
}
}
}
}
for (i=0;i<n;i++)
{
if (matr[i][i]==0)// если хоть один диагональный элемент равен 0, значит система не разрешима
{
t=0;
};
}
//обратный ход
if (t!=0)
{
y[n-1]=matr[n-1][n]/matr[n-1][n-1];
for (i=n-2;i>=0;i--)
{
j=n-1;
sum=matr[i][j]*y[j];
for (j=n-2;j>0;j--)
{
if (j!=i)
{
sum=sum+matr[i][j]*y[j];
}
}
y[i]=(matr[i][n]-sum)/matr[i][i];
}
for(i=0;i<n;i++)
{
cout<<y[i]<<endl;
}
}
else
cout<< "opredelitel=0"<<endl;
system( "pause");
return 0;
}
Комментарии к тексту:
дима, 21-12-2008, 13:29:11
мало //коментариев((((
, 10-06-2009, 00:27:57
не думала, что можно так просто и найти эту прогу))))))) СПС огоромнойе)))
, 10-11-2009, 19:32:47
почему только на этом языке((((
|
|