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 }