

// m: Koeffizientenmatrix, v: Lösungsvektor, nz: Anzahl der Zeilen
function GLSL(m, v, nz)
{
	var i, j, k, ns=nz+1;
	var q;
	for (j = 0;j<ns-1;j++)
	{
		// Diagonalenfeld normalisieren
		q = m[j * ns + j];
		if (q == 0)
		{
			//Gewährleisten, daß keine 0 in der Diagonale steht
			for (i = j+1 ;i< nz;i++)
			{
				// Suche Reihe mit Feld <> 0 und addiere dazu
				if (m[i * ns + j] != 0)
				{
					for(k=0;k<ns;k++)m[j*ns+k]+=m[i*ns+k];
					q = m[j * ns + j];
                    		break;
                		}
            	}
		}
		if (q != 0)
		{
            	// Diagonalen auf 1 bringen
			for(k=0;k<ns;k++)	m[j*ns+k]=m[j*ns+k]/q;
		}
		// Spalten außerhalb der Diagonalen auf 0 bringen
		for (i = 0 ; i< nz ; i++)
		{
			if (i != j )
			{
				q = m[i * ns + j];
				for(k=0;k<ns;k++)m[i*ns+k]-=q*m[j*ns+k];
			}
		}
	}
	// Lösungsvektor füllen
	for(i=0;i<nz;i++) v[i]=m[(i+1)*ns-1];
}

