Dieser kleine JavaScript-Schnipsel berechnet die Lösung eines beliebigen 3x3-Gleichungssystems. Wer Interesse hat, kann den nachfolgenden Quelltext gerne unter Berücksichtigung der GNU AGPL weiterverwenden und/oder erweitern.
Dazugehörender Artikel: JavaScript-Schnipsel aus der Mottenkiste
/**
* Mithilfe dieser Klasse kann die Lösung eines beliebigen
* 3x3-Gleichungssystem berechnet werden.
*
* Autor: Pascal Hollenstein <webmaster@zockerade.com>
* Webseite: http://blog.hollenstein.info
* Lizenz: GNU AGPL
*/
function SoE() {
/**
* Diese Funktion versucht die Koeffizienten des
* 3x3-Gleichungssystems zu erfassen.
*
* @access private
* @param array $a
* @return array
*/
var getCoefficients = function(a) {
var coefficients = [];
for (var i = 0; i < a.length; i++) {
if (isNaN(a[i].value) === false) {
coefficients.push(a[i].value);
}
}
return coefficients.length === 9 ? coefficients : [];
}
/**
* Diese Funktion versucht die Absolutglieder des
* 3x3-Gleichungssystems zu erfassen.
*
* @access private
* @param array $b
* @return array
*/
var getConstantTerms = function(b) {
var constantTerms = [];
for (var i = 0; i < b.length; i++) {
if (isNaN(b[i].value) === false) {
constantTerms.push(b[i].value);
}
}
return constantTerms.length === 3 ? constantTerms : [];
}
/**
* Diese Funktion versucht die Determinante zu berechnen.
*
* @access private
* @param array $a
* @return mixed
*/
var getDeterminant = function(a) {
if (a.length !== 0) {
return a[0] * (a[4] * a[8] - a[7] * a[5]) - a[3] * (a[1] * a[8] - a[7] * a[2]) + a[6] * (a[1] * a[5] - a[4] * a[2]);
}
return false;
}
/**
* Diese Prozedur versucht die Lösung des 3x3-Gleichungssystems
* zu berechnen und auszugeben.
*
* @access public
* @param array $a
* @param array $b
* @return void
*
* @see getCoefficients()
* @see getConstantTerms()
* @see getDeterminant()
*/
this.showResult = function(a, b) {
var a = getCoefficients(a), b = getConstantTerms(b), det = getDeterminant(a), c = [], d = [];
if (a.length !== 0 && b.length !== 0 && det !== false) {
c.push(
a[0],
a[1],
a[2],
0,
a[0] * a[4] - a[1] * a[3],
a[0] * a[5] - a[2] * a[3],
0,
0,
a[0] * a[0] * (a[4] * a[8] - a[5] * a[7]) + a[0] * (a[1] * (a[5] * a[6] - a[3] * a[8]) + (a[3] * a[7] - a[4] * a[6]) * a[2])
);
d.push(
b[0],
a[0] * b[1] - a[3] * b[0],
a[0] * a[0] * (a[4] * b[2] - a[7] * b[1]) + a[0] * (a[1] * (a[6] * b[1] - a[3] * b[2]) + a[3] * a[7] * b[0] - a[4] * a[6] * b[0])
);
if (det === 0) {
if (c[8] == 0 && d[2] == 0) {
alert("Es gibt unendlich viele Lösungen.");
} else {
alert("Es gibt keine Lösung.");
}
} else {
alert("[" + (d[0] - c[2] * d[2] / c[8] - c[1] * (d[1] - c[5] * d[2] / c[8]) / c[4]) / c[0] + "," + (d[1] - c[5] * d[2] / c[8]) / c[4] + "," + d[2] / c[8] + "]");
}
} else {
alert("Bitte geben Sie nur Zahlen und keine Buchstaben an.");
}
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Lösen eines 3x3-Gleichungssystems mittels Javascript</title>
<script src="/path/to/the/system/of/equations/javascript/file.js" type="text/javascript"></script>
<script type="text/javascript">
window.onload = function() {
document.calculation.submit.onclick = function() {
new SoE().showResult(document.calculation.a, document.calculation.b)
}
}
</script>
</head>
<body id="system-of-equations">
<h1>Lösen eines 3x3-Gleichungssystems mittels Javascript</h1>
<form action="#system-of-equations" method="get" name="calculation">
<noscript>
<p><strong>Hinweis:</strong> Ohne aktiviertes Javascript kann das 3x3-Gleichungssystem nicht gelöst werden.</p>
</noscript>
<fieldset>
<legend>Zu welchem 3x3-Gleichungssystem soll die Lösung berechnet werden?</legend>
<ul>
<li><input type="text" name="a" value="2"> · x + <input type="text" name="a" value="1"> · y + <input type="text" name="a" value="0"> · z = <input type="text" name="b" value="0"></li>
<li><input type="text" name="a" value="0"> · x + <input type="text" name="a" value="1"> · y + <input type="text" name="a" value="-1"> · z = <input type="text" name="b" value="1"></li>
<li><input type="text" name="a" value="0"> · x + <input type="text" name="a" value="0"> · y + <input type="text" name="a" value="1"> · z = <input type="text" name="b" value="3"></li>
</ul>
</fieldset>
<p><input type="button" name="submit" value="Lösen"></p>
</form>
</body>
</html>