Gauss-Seidel
♥0 |
Line 58 |
Modified 2009-10-07 04:30:03 |
MIT License
archived:2017-03-30 04:48:36
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/8Dtb
*/
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(GS([
3, -1, 1,
3, 6, 2,
3, 3, 7
], [
1, 0, 4
], 100, 0.0001).join('\n'));
var g : int = getTimer();
tr((g - s) + " ms");
}
private function GS(a : Array, b : Array, N : int, TOL : Number) : Array
{
var n : int = b.length;
if(n == 0 || a.length != n * n)return null;
var x : Array = new Array(n);
var i : int, j : int;
for(i = 0;i < n;i++){
x[i] = 0.0;
}
for(var k : int = 1;k <= N;k++){
var xo : Array = x.concat();
for(i = 0;i < n;i++){
var sum : Number = 0.0;
for(j = 0;j < n;j++){
if(i != j){
sum += a[i * n + j] * xo[j];
}
}
x[i] = (-sum + b[i]) / a[i * n + i];
}
var norm : Number = 0.0;
for(i = 0;i < n;i++){
norm += (x[i] - xo[i]) * (x[i] - xo[i]);
}
if(norm < TOL){
return x;
}
}
return null;
}
private function tr(...o : Array) : void
{
_tf.appendText(o + "\n");
}
}
}