Example #1
0
    public static Vector operator *(Vector v, Matrix m)
    {
      Contract.Requires(v != null);
      Contract.Requires(m != null);

      LowerTriangEtaMatrix ltr = m as LowerTriangEtaMatrix;
      if (ltr != null)
        return v * ltr;

      TranspositionMatrix tr = m as TranspositionMatrix;
      if (tr != null)
        return v * tr;

      Contract.Assume(v.Length == m.NumberOfRows);

      Vector r = new Vector(m.NumberOfColumns);
      for (int i = 0; i < m.NumberOfColumns; i++)
      {
        double s = 0;
        for (int j = 0; j < v.Length; j++)
          s += v[j] * m[j, i];
        r[i] = s;
      }

      return r;
    }
    /*
    private void InitMarkowitzNumbers() {
        markovitzNumbers = new int[dim]; 
        for (int i = 0; i < dim; i++)
            for (int j = 0; j < A.NumberOfColumns; j++)
                if (A[i, j]!=0) 
                    markovitzNumbers[i]++;                    
    }
    */
    internal override void Solve_yBEquals_cB(double[] y)
    {
      /*
       * We have LB=UE or B =L(-1)UE. We have yB=c or y=cB(-1)=cE(-1)(U-1)L. 
       * First we find cE(-1)=y, then yU(-1)=y, and then y=yL 
       */
      //solving yE=cB or yE1...Ek=cB
      for (int i = this.etaList.Count - 1; i >= 0; i--)
        etaList[i].SolveLeftSystem(y);

      //solving xU=y, and putting the answer into y
      this.U.SolveLeftSystem(y);
      Vector v = new Vector(y);
      for (int i = LP.Count - 1; i > -1; i--)
        v *= LP[i];//will update coefficient of v, that is y

    }