Skip to content

Instantly share code, notes, and snippets.

@sasekazu
Last active August 29, 2015 14:13
Show Gist options
  • Save sasekazu/5c7bc0d4bb8d8e0f7c92 to your computer and use it in GitHub Desktop.
Save sasekazu/5c7bc0d4bb8d8e0f7c92 to your computer and use it in GitHub Desktop.
Gauss-Jordan method ガウス-ジョルダン法による逆行列の計算(ピボットなし’)
// サイズ NxN の行列 A の逆行列を計算する
// ピボット選択なし
// 実際にはnumeric javascript の numeric.inverse() や numeric.solve() を使うべき
function inverseGaussJordan(A, N) {
var U=numeric.clone(A);
var Ainv=identityMatrix(N);
var alpha;
var diagValue;
for(var i=0; i<N; ++i) {
diagValue=U[i][i];
for(var j=0; j<N; ++j) {
U[i][j]/=diagValue;
Ainv[i][j]/=diagValue;
}
for(var j=0; j<N; ++j) {
if(i==j) {
continue;
}
alpha=U[j][i]/U[i][i];
for(var k=0; k<N; ++k) {
U[j][k]-=alpha*U[i][k];
Ainv[j][k]-=alpha*Ainv[i][k];
}
}
}
return Ainv;
}
function identityMatrix(size) {
var tmp=new Array(size);
for(var i=0; i<size; ++i) {
tmp[i]=new Array(size);
for(var j=0; j<size; ++j) {
if(i==j) {
tmp[i][j]=1;
} else {
tmp[i][j]=0;
}
}
}
return tmp;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment