Hm...: Funktion von Matrixoperationen

Beitrag lesen

Moin,

Gibt es irgendwo JS Funktionen zum Invertieren, Transponieren und Multiplizieren von Matrizen? Falls ja, wie kann ich die in mein Programm einbinden?

Guck mal hier: http://sylvester.jcoglan.com/

Grüße Marco

danke, ich schau mal

ich hab das hier zusammengeschrieben und für 3x3 matrizen getestet, leider funktioniert es bei meiner großen matrix nicht richtig. sieht jemand den fehler? ^^

this.invertiere=function(matrix){

//initialisiere inverse  
var inverse=new Array();  
for(var i=0; i<matrix.length;i++){  
inverse[i]=new Array();  
	for(var j=0;j<matrix[0].length;j++){  
		if(i==j) inverse[i][j]=1;  
		else inverse[i][j]=0;  
	}  
}  
//durchlaufe alle zeilen der matrix	  
for(var z=0;z<matrix.length;z++){  
//tausche zeile z mit der zeile maxInd, welche größten eintrag in spalte z hat  
	var maxInd=z;  
	for(var m=z;m<matrix.length;m++){  
		if(Math.abs(matrix[maxInd][z])<Math.abs(matrix[m][z])) maxInd=m;  
	}  
	var hilfsA=matrix[maxInd];  
	matrix[maxInd]=matrix[z];  
	matrix[z]=hilfsA;  
	  
	hilfsA=inverse[maxInd];  
	inverse[maxInd]=inverse[z];  
	inverse[z]=hilfsA;  
	  
	//jetzt setze matrix[z][z]=1  
	var koff=matrix[z][z];  
	//teile dafuer die zeile z von inverse und matrix durch koff  
	for(var s=0;s<matrix[z].length;s++){		  
		inverse[z][s]=inverse[z][s]/koff;  
		matrix[z][s]=matrix[z][s]/koff;  
	}  
	//jetzt sorge dafuer das in der spalte unter und ueber matrix[z][z] ueberall 0 steht, rechnung auf inverse uebertragen  
	for(var zl=0;zl<matrix.length;zl++){  
		if(zl!=z){koff=matrix[zl][z];  
			for(var sl=0;sl<matrix[0].length;sl++){  
				inverse[zl][sl]=inverse[zl][sl]-inverse[z][sl]\*koff;  
				matrix[zl][sl]=matrix[zl][sl]-matrix[z][sl]\*koff;  
				  
			}  
		}  
	}  
	  
}  
	return inverse;  
};  

zum testen habe ich das hier verwendet:

this.multMatrix=function(m1,m2){

	var m=new Array();  
	//initialisiere matrixprodukt  
	for(var i=0; i<m1.length;i++){  
	m[i]=new Array();  
	for(var j=0;j<m1.length;j++){  
		m[i][j]=parseFloat(0);  
	}  
	}	  
	  
	for(var i=0; i<m1.length;i++){  
	for(var j=0;j<m2[0].length;j++){  
	for(var k=0;k<m1[0].length;k++){  
		m[i][j]=m[i][j]+parseFloat(m1[i][k])\*parseFloat(m2[k][j]);  
	  
	}  
	m[i][j]=Math.round(100\*m[i][j])/100;  
	}  
	}  
	  
	return m;  
};