mirror of
				https://github.com/PaddlePaddle/FastDeploy.git
				synced 2025-10-31 03:46:40 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			30 lines
		
	
	
		
			914 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			914 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| MatrixXf A = MatrixXf::Random(4, 4);
 | |
| MatrixXf B = MatrixXf::Random(4, 4);
 | |
| RealQZ<MatrixXf> qz(4);  // preallocate space for 4x4 matrices
 | |
| qz.compute(A, B);        // A = Q S Z,  B = Q T Z
 | |
| 
 | |
| // print original matrices and result of decomposition
 | |
| cout << "A:\n"
 | |
|      << A << "\n"
 | |
|      << "B:\n"
 | |
|      << B << "\n";
 | |
| cout << "S:\n"
 | |
|      << qz.matrixS() << "\n"
 | |
|      << "T:\n"
 | |
|      << qz.matrixT() << "\n";
 | |
| cout << "Q:\n"
 | |
|      << qz.matrixQ() << "\n"
 | |
|      << "Z:\n"
 | |
|      << qz.matrixZ() << "\n";
 | |
| 
 | |
| // verify precision
 | |
| cout
 | |
|     << "\nErrors:"
 | |
|     << "\n|A-QSZ|: " << (A - qz.matrixQ() * qz.matrixS() * qz.matrixZ()).norm()
 | |
|     << ", |B-QTZ|: " << (B - qz.matrixQ() * qz.matrixT() * qz.matrixZ()).norm()
 | |
|     << "\n|QQ* - I|: "
 | |
|     << (qz.matrixQ() * qz.matrixQ().adjoint() - MatrixXf::Identity(4, 4)).norm()
 | |
|     << ", |ZZ* - I|: "
 | |
|     << (qz.matrixZ() * qz.matrixZ().adjoint() - MatrixXf::Identity(4, 4)).norm()
 | |
|     << "\n";
 | 
