gauss-jordan 소원
7291 단어 or
matrix가 굉장히 가식적이에요. boost의 matrix를 썼어요.
맞는지 모르겠지만 아주 간단한 테스트만 했어요.
#include <iostream>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
using namespace std;
using namespace boost::numeric::ublas;
template<class T>
void swap_elem(T& a , T& b)
{
T tmp;
tmp = a;a=b;b=tmp;
}
void swap_row(matrix<double> &mat ,int t ,int k)
{
double tmp;
int n = mat.size2();
for(int i = 0 ; i < n ; i++){
swap_elem(mat(t,i) , mat(k,i));
}
}
void gauss_jordan(matrix<double> &mat)
{
int m = mat.size1();
int n = mat.size2();
for(int i = 0 , j = 0 ; i < m && j < n ; )
{
int k = i;
for(; k < m ; k ++)
{
if( mat(k , j) !=0 ) break;
}
if (k == m){
j ++;
}else{
if(k != i) swap_row(mat , k , i);
double tmp = 0;
tmp = 1.0/mat(i,j);
for(k = j ; k < n ; k++)
mat(i,k) = mat(i,k) * tmp;
for(k = 0 ; k < m ; k++)
{
if(k == i) continue;
if(mat(k , j) == 0) continue;
tmp = -mat(k , j);
for(int t = j ; t < n ; t++)
mat(k,t) = mat(k,t) + mat(i,t) * tmp;
}
i++ ; j++;
}
}
}
int main()
{
/* matrix<double> mat(3,3);
mat(0,0)=1;mat(0,1)=1;mat(0,2)=0;
mat(1,0)=1;mat(1,1)=-1;mat(1,2)=1;
mat(2,0)=4;mat(2,1)=2;mat(2,2)=1;
*/
matrix<double> mat(3,4);
mat(0,0)=2;mat(0,1)=2;mat(0,2)=-2;mat(0,3)=5;
mat(1,0)=7;mat(1,1)=7;mat(1,2)=1;mat(1,3)=10;
mat(2,0)=5;mat(2,1)=5;mat(2,2)=-1;mat(2,3)=5;
// mat(0,1) = 1;mat(0,0)=1;
// mat(1,1) = 2;mat(1,0)=2;
// swap_row(mat , 0 , 1);
gauss_jordan(mat);
cout<< mat <<endl;
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
위험 대입 or and단순 대입 사용and、or하면 죽는다 and, or부터=...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.