Gaussの消去法
♥2 |
Line 76 |
Modified 2009-10-07 04:51:35 |
MIT License
archived:2017-03-30 04:48:31
ActionScript3 source code
/**
* Copyright uwi ( http://wonderfl.net/user/uwi )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/bY3c
*/
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.utils.getTimer;
public class Test extends Sprite {
private var _tf : TextField;
public function Test() {
_tf = new TextField();
_tf.width = 465;
_tf.height = 465;
addChild(_tf);
var s : int = getTimer();
tr(gaussEliminate([
3, -1, 1,
3, 6, 2,
3, 3, 7
], [
1, 0, 4
]).join('\n'));
var g : int = getTimer();
tr((g - s) + " ms");
}
private function gaussEliminate(a : Array, b : Array) : Array
{
var n : int = b.length;
if(n == 0 || a.length != n * n)return null;
var i : int, j : int, k : int;
for(i = 0;i < n;i++){
var pmin : Number = Number.MAX_VALUE;
var p : int = -1;
for(j = i;j < n;j++){
var aji : Number = a[j * n + i];
if(aji != 0.0 && Math.abs(aji) < pmin){
pmin = aji;
p = j;
}
}
if(p == -1)return null;
if(p != i){
var d : Number;
for(j = 0;j < n;j++){
d = a[i * n + j];
a[i * n + j] = a[p * n + j];
a[p * n + j] = d;
}
d = b[i];
b[i] = b[p];
b[p] = d;
}
for(j = i + 1;j < n;j++){
var m : Number = a[j * n + i] / a[i * n + i];
a[j * n + i] = 0;
for(k = i + 1;k < n;k++){
a[j * n + k] -= a[i * n + k] * m;
}
b[j] -= b[i] * m;
}
}
if(a[n * n - 1] == 0.0)return null;
var x : Array = new Array(n);
x[n - 1] = b[n - 1] / a[n * n - 1];
for(i = n - 2;i >= 0;i--){
x[i] = b[i];
for(j = i + 1;j < n;j++){
x[i] -= a[i * n + j] * x[j];
}
x[i] /= a[i * n + i];
}
return x;
}
private function tr(...o : Array) : void
{
_tf.appendText(o + "\n");
}
}
}