Last updated July 29, 2009 14:27, by raindrop
Feedicon  

IMDVector

public interface IMDVector{
    
    int getDim();
    float getElem(int n);

    IMDVector normal();

    IMDVector add(IMDVector v);
    IMDVector sub(IMDVector v);
    IMDVector mul(float a);

    float length();
    float square();
    float innerProduct(IMDVector v);

    IMDSquareTransform getMetric();

    IMDVector subVector(int dim);

    ICMDVector getCVector();

}

ICMDVector

public interface ICMDVector extends IMDVector{

    void setElem(int index, float value);

    void zero();
    
}

AMDVector

public mixin class AMDVector extends IMDVector{

    override function length():Number{ Math.sqrt(square()) }

    override function square():Number{ 
        getMetric().innerProduct(this,this);
    }

    override function normal():IMDVector{ mul(1.0 / length()) }
    
    override function innerProduct(v:IMDVector):Number{ getMetric().innerProduct(this, v) }


    override function add(v:IMDVector):IMDVector{
        MDVector{
            dim: getDim()
            elems: for(n in [0..getDim()-1]) getElem(n) + v.getElem(n)
        }
    }
    override function sub(v:IMDVector):IMDVector{ 
        MDVector{
            dim: getDim()
            elems: for(n in [0..getDim()-1]) getElem(n) - v.getElem(n)
        }
    }

    override function mul(a:Number):IMDVector{
        MDVector{
            dim: getDim()
            elems: for(n in [0..getDim()]) a * getElem(n)
        }
    }

    override function subVector(dim:Integer):IMDVector{
        MDVector{
            dim: dim
            elems: for(n in [0..dim - 1]) getElem(n)
        }
    }

    override function toString ():String { "[ {for(n in [0..getDim()-1]) "{getElem(n)} " } ]" }

}

MDVector

public class MDVector extends AMDVector, ICMDVector{

    public var dim: Integer ;
    public var elems: Number[];

    public var metric:IMDSquareTransform = MDIdentity{ dim: dim };

    override function getDim(){ dim };
    override function getElem(n: Integer):Number{ elems[n] }
    override function setElem(n: Integer, value:Number){ elems[n] = value }
    override function getMetric(){ metric }

    override function zero(){
        for( n in [0..dim-1]) elems[n] = 0;
    }

    override function getCVector():ICMDVector{
        MDVector{
            dim: dim
            elems: for (elem in elems) elem
        }
    }

}

  • Mysql
  • Glassfish
  • Jruby
  • Rails
  • Nblogo
Terms of Use; Privacy Policy;
© 2010, Oracle Corporation and/or its affiliates
(revision 20120518.3c65429)
 
 
Close
loading
Please Confirm
Close