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); }
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; }