示例#1
0
        public SVDInfo SVDInfo(ref Matrix3D matrix)
        {
            double[,] X = new double[3, 3];

            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    X[i, j] = matrix[i, j];
                }
            }

            OutPut(X, "A");
            matlab.Execute(@"[U,S,V] = svd(A)");
            matlab.Execute(@"R = V*U';  if( det(R) < 0 ) U(:,end) = -U(:,end); R = V*U'; end");
            // matlab.Execute(@"R = V*U'");

            matlab.Execute(@"DetU=det(U)");
            matlab.Execute(@"DetS=det(S)");
            matlab.Execute(@"DetV=det(V)");
            matlab.Execute(@"DetR=det(R)");
            matlab.Execute(@"DetA=det(A)");

            double[,] A = GetMatrix("A");
            double[,] R = GetMatrix("R");
            double[,] U = GetMatrix("U");
            double[,] S = GetMatrix("S");
            double[,] V = GetMatrix("V");

            SVDInfo svdInfo = new SVDInfo();

            svdInfo.DetU = matlab.GetVariable("DetU", "base");
            svdInfo.DetS = matlab.GetVariable("DetS", "base");
            svdInfo.DetV = matlab.GetVariable("DetV", "base");
            svdInfo.DetR = matlab.GetVariable("DetR", "base");
            svdInfo.DetA = matlab.GetVariable("DetA", "base");


            svdInfo.A = new Matrix3D();
            svdInfo.R = new Matrix3D();
            svdInfo.U = new Matrix3D();
            svdInfo.S = new Matrix3D();
            svdInfo.V = new Matrix3D();
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    svdInfo.A[i, j] = A[i, j];
                    svdInfo.R[i, j] = R[i, j];
                    svdInfo.U[i, j] = U[i, j];
                    svdInfo.S[i, j] = S[i, j];
                    svdInfo.V[i, j] = V[i, j];
                }
            }



            return(svdInfo);
        }
示例#2
0
        public SVDInfo SVDInfo(ref Matrix3D matrix)
        {

            double[,] X = new double[3, 3];

            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    X[i, j] = matrix[i, j];
                }
            }

            OutPut(X, "A");
            matlab.Execute(@"[U,S,V] = svd(A)");
             matlab.Execute(@"R = V*U';  if( det(R) < 0 ) U(:,end) = -U(:,end); R = V*U'; end"); 
            // matlab.Execute(@"R = V*U'");

            matlab.Execute(@"DetU=det(U)");
            matlab.Execute(@"DetS=det(S)");
            matlab.Execute(@"DetV=det(V)");
            matlab.Execute(@"DetR=det(R)");
            matlab.Execute(@"DetA=det(A)");

            double[,] A=  GetMatrix("A");
            double[,] R = GetMatrix("R");
            double[,] U = GetMatrix("U");
            double[,] S=  GetMatrix("S");
            double[,] V = GetMatrix("V");

            SVDInfo svdInfo = new SVDInfo();

            svdInfo.DetU = matlab.GetVariable("DetU", "base");
            svdInfo.DetS = matlab.GetVariable("DetS", "base");
            svdInfo.DetV = matlab.GetVariable("DetV", "base");
            svdInfo.DetR = matlab.GetVariable("DetR", "base");
            svdInfo.DetA = matlab.GetVariable("DetA", "base");


            svdInfo.A = new Matrix3D();
            svdInfo.R = new Matrix3D();
            svdInfo.U = new Matrix3D();
            svdInfo.S = new Matrix3D();
            svdInfo.V = new Matrix3D();
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    svdInfo.A[i, j] = A[i, j];
                    svdInfo.R[i, j] = R[i, j];
                    svdInfo.U[i, j] = U[i, j];
                    svdInfo.S[i, j] = S[i, j];
                    svdInfo.V[i, j] = V[i, j];
                }
            }


            


            return svdInfo;
        }