protected override bool EigImpl(Matrix A, Matrix B, out Matrix eigvec, out Vector eigval) { NamedLock.FuncOO <Matrix, Vector, bool> func = delegate(out Matrix leigvec, out Vector leigval) { Matlab.Clear("HTLib2_Matlab_EigImpl"); Matlab.PutMatrix("HTLib2_Matlab_EigImpl.A", A.ToArray()); Matlab.PutMatrix("HTLib2_Matlab_EigImpl.B", B.ToArray()); Matlab.Execute("[HTLib2_Matlab_EigImpl.V, HTLib2_Matlab_EigImpl.D] = eig(HTLib2_Matlab_EigImpl.A, HTLib2_Matlab_EigImpl.B);"); Matlab.Execute("HTLib2_Matlab_EigImpl.D = diag(HTLib2_Matlab_EigImpl.D);"); leigvec = Matlab.GetMatrix("HTLib2_Matlab_EigImpl.V"); leigval = Matlab.GetVector("HTLib2_Matlab_EigImpl.D"); Matlab.Clear("HTLib2_Matlab_EigImpl"); return(true); }; //return NamedLock.LockedCall("bool HTLib2.Matlab.NumericSolver.EigImpl(Matrix, Matrix, out Matrix, out Vector)", func, out eigvec, out eigval); return(NamedLock.LockedCall(Matlab.NamedLock.GetName("HTLib2_Matlab_EigImpl"), func, out eigvec, out eigval)); }
protected override bool EigImpl(Matrix mat, out Matrix eigvec, out Vector eigval) { NamedLock.FuncOO <Matrix, Vector, bool> func = delegate(out Matrix leigvec, out Vector leigval) { bool bUseFile = (mat.ColSize * mat.ColSize > 1000 * 1000); Matlab.Clear("HTLib2_Matlab_EigImpl"); Matlab.PutMatrix("HTLib2_Matlab_EigImpl.A", mat.ToArray(), bUseFile); Matlab.Execute("[HTLib2_Matlab_EigImpl.V, HTLib2_Matlab_EigImpl.D] = eig(HTLib2_Matlab_EigImpl.A);"); Matlab.Execute("HTLib2_Matlab_EigImpl.D = diag(HTLib2_Matlab_EigImpl.D);"); leigvec = Matlab.GetMatrix("HTLib2_Matlab_EigImpl.V", bUseFile); leigval = Matlab.GetVector("HTLib2_Matlab_EigImpl.D"); Matlab.Clear("HTLib2_Matlab_EigImpl"); return(true); }; //return NamedLock.LockedCall("bool HTLib2.Matlab.NumericSolver.EigImpl(Matrix, out Matrix, out Vector)", func, out eigvec, out eigval); return(NamedLock.LockedCall(Matlab.NamedLock.GetName("HTLib2_Matlab_EigImpl"), func, out eigvec, out eigval)); }