Skip to content

Instantly share code, notes, and snippets.

@camisetags
Last active August 29, 2015 14:07
Show Gist options
  • Save camisetags/c53e8857e6115cd7ec03 to your computer and use it in GitHub Desktop.
Save camisetags/c53e8857e6115cd7ec03 to your computer and use it in GitHub Desktop.
/**
* Metodo de resolução de sistemas de gauss
* */
var inputMatrix = [
[ 0.5, -1, 1, 6],
[ 3, 2, 1, 8],
[ 5, -1, -3, -1]
];
var Gaussian = function (matrixInput) {
return {
matrixInput : matrixInput,
matrixAsString : function (matrix)
{
var matrixAsString = '';
matrix.forEach(function (x){
var lineAsString = '';
x.forEach(function (y){
lineAsString += y.toFixed(2) + ' ';
});
matrixAsString += '| ' + lineAsString + '|\n';
});
return matrixAsString;
},
getSystemResult : function (A)
{
var n = A.length;
var x = new Array(n);
for (var i=n-1; i>-1; i--) {
x[i] = A[i][n]/A[i][i];
for (var k=i-1; k>-1; k--) {
A[k][n] -= A[k][i] * x[i];
}
}
return x;
},
getMaxColumn : function (matrix, afterIndex)
{
var mLength = matrix.length + afterIndex;
for (var i = 0; i < mLength; i++) {
var maxElement = Math.abs(matrix[i][i]);
var maxRow = i;
for (var j=i+1; j< j<mLength; j++) {
if ( Math.abs(matrix[j][i]) > maxElement ) {
maxElement = Math.abs(matrix[j][i]);
maxRow = j;
}
}
}
},
getMatrixResult : function (A)
{
var n = A.length;
for (var i=0; i<n; i++) {
var maxEl = Math.abs(A[i][i]);
var maxRow = i;
for(var k=i+1; k<n; k++) {
if (Math.abs(A[k][i]) > maxEl) {
maxEl = Math.abs(A[k][i]);
maxRow = k;
}
}
for (var k=i; k<n+1; k++) {
var tmp = A[maxRow][k];
A[maxRow][k] = A[i][k];
A[i][k] = tmp;
}
for (k=i+1; k<n; k++) {
var c = -A[k][i]/A[i][i];
for(var j=i; j<n+1; j++) {
if (i==j) {
A[k][j] = 0;
} else {
A[k][j] += c * A[i][j];
}
}
}
}
return A;
},
getGaussianResult : function ()
{
var matrix = this.getMatrixResult(this.matrixInput);
return this.getSystemResult(matrix);
}
};
};
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Metodo de Gauss</title>
<script type="text/javascript" src="underscore.js"></script>
<script src="gauss.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function()
{
var gauss = new Gaussian(inputMatrix);
document.getElementById('enterMatrix').innerHTML = gauss
.matrixAsString(gauss.matrixInput)
.replace(/\n/g, '<br>');
document.getElementById('outputMatrix').innerHTML =
gauss.matrixAsString(gauss.getMatrixResult(gauss.matrixInput))
.replace(/\n/g, '<br>');
document.getElementById('systemOutput').innerHTML = gauss.getGaussianResult();
});
</script>
</head>
<body>
<div>Matriz de entrada: </div>
<div id="enterMatrix"></div>
<br><br>
<div>Matriz de saída: </div>
<div id="outputMatrix"></div>
<br><br>
<div>Saída do sistema: </div>
<div id="systemOutput"></div>
</body>
</html>
var matrixTest = [
[1, -1, -1, 0],
[4, 1, 0, 8],
[0, -1, 4, 16]
];
var result = [2.333, -1.333, 3.667];
var matrixTest = [
[1, -1, -1, 0],
[4, 1, 0, 8],
[0, -1, 4, 16]
];
var result = [2.333, -1.333, 3.667];
function testGauss(){
var gaussian = new Gaussian(matrixTest);
var resultTest = gaussian.getGaussianResult();
var resultsCount = 0;
for (var i=0; i < result.length; i++) {
if (result[i] == resultTest[i].toFixed(3)) {
console.log('Passou no '+ i +' resultado. result:'+ resultTest[i]);
resultsCount++;
} else {
console.log('Nâo passou no '+ i +' resultado. result:'+ resultTest[i]);
}
}
if(resulstCount == 3) {
console.log("Passou nos 3 testes!");
} else {
console.log("Não passou em algum teste...");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment