/**
* Copyright teleranek ( http://wonderfl.net/user/teleranek )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/agVJ
*/
// forked from teleranek's flash on 2009-11-11
package {
import flash.display.Sprite;
public class NeuroPDW extends Sprite {
public function NeuroPDW () {
var X:Array = new Array();
var Y:Array = new Array();
var traj:Number = 200;
var tau:Number = 0.02;
var time:Number = 30;
var val:Number = -1.0;
while( val <= 0.0 ){
X.push( val );
val += 0.02;
}
val = -0.2;
while( val <= 1.0 ){
Y.push( val );
val += 0.02;
}
var x1:Number = -1;
var xu:Number = 0;
var y1:Number = -0.2;
var yu:Number = 1;
var i:int,j:int;
var ret:Object = sample_field3( X, Y );
var U:Array = ret.U;
var V:Array = ret.V;
const MARGIN:Number = 10;
const VLEN:Number = 8;
var currx:Number;
var curry:Number;
// draw vector field
graphics.lineStyle( 1, 0xcc6600 );
for( i = 0; i < X.length; i++ ){
for( j = 0; j < X.length; j++ ){
currx = MARGIN*i + MARGIN;
curry = MARGIN*j + MARGIN;
graphics.moveTo( currx , curry );
graphics.lineTo( currx + U[ i ]*VLEN, curry + V[ j ]*VLEN);
}
}
var t:Number;
var x0:Number, y0:Number;
for( i = 1; i < 200 ; i++ ){
x0 = (xu-x1)*Math.random() + x1;
y0 = (xu-x1)*Math.random() + x1;
for( t = 0; t < time; t += tau ){
}
}
}
/*
for i=1:traj
x0=((xu-xl)*rand(1,1))+xl;
y0=((yu-yl)*rand(1,1))+yl;
tr=[];
tr(1,:)=[x0,y0];
for t=0:tau:time
[dx,dy]=feval(F,tr(end,1),tr(end,2));
tr(end+1,:)=tr(end,:)+tau*[dx,dy];
if (tr(end,1)>xu)||(tr(end,1)<xl)||(tr(end,2)>yu)||(tr(end,2)<yl)
tr=tr(1:end-1,:);
break;
end;
end;
plot(tr(:,1),tr(:,2),'k');
end;
axis([xl xu yl yu]);
*/
public function sample_field3( X:Array , Y:Array ):Object{
var C_d:Number = 1;
var E_L:Number = -80;
var I:Number = 0;
var g_L:Number = 8;
var g_Na:Number = 20;
var g_K:Number = 10;
var E_Na:Number = 60;
var E_K:Number = -90;
var i:int;
var U:Array = new Array( X.length );
var V:Array = new Array( X.length );
for( i = 0; i < X.length; i++ ){
X[ i ] *= 100.0;
}
/*
U = ((I - g_L*(X-E_L)-g_Na.*m_inf(X).*(X-E_Na)-g_K.*Y.*(X-E_K))./C_d)/100;
*/
for( i = 0; i < X.length; i++ ){
U[ i ] = (( I - g_L*(X[i]-E_L)-g_Na*m_inf(X[i])*(X[i]-E_Na)-g_K*Y[i]*(X[i]-E_K))/C_d)/100.0;
}
for( i = 0; i < X.length; i++ ){
V[ i ] = n_inf(X[i])-Y[i];
}
return { U:U , V:V };
}
public function m_inf( x:Number):Number{
return 1.0/(1.0+Math.exp( ( -20.0 - x )/15.0 ));
}
public function n_inf( x:Number):Number{
return 1.0/(1.0+Math.exp( ( -25.0 - x )/5.0 ));
}
}
}