C++ 调用isApprox后,特征向量的范数发生变化
我试图求解一个线性方程组。我还显示了在求解上述方程时犯下的错误:C++ 调用isApprox后,特征向量的范数发生变化,c++,eigen,side-effects,C++,Eigen,Side Effects,我试图求解一个线性方程组。我还显示了在求解上述方程时犯下的错误: const Eigen::MatrixXcd b = FEMSolver::to_vector( l ); const Eigen::VectorXcd lambdaCoefs = m_adjSolvers[iomega].solve(b); std::cout << double(sourceId) / double(m_sources.size()) << " "
const Eigen::MatrixXcd b = FEMSolver::to_vector( l );
const Eigen::VectorXcd lambdaCoefs = m_adjSolvers[iomega].solve(b);
std::cout << double(sourceId) / double(m_sources.size()) << " "
<< (m_Aadj[iomega]*lambdaCoefs - b).norm() << " < "
<< (1.0e-1)*std::min( (m_Aadj[iomega]*lambdaCoefs).norm(), b.norm() )
<< std::endl;
if (not b.isApprox( m_Aadj[iomega]*lambdaCoefs, 1.0e-1 )) {
std::cout << "solving adjoint failed "
<< (m_Aadj[iomega]*lambdaCoefs - b).norm() << " / "
<< b.norm()
<< std::endl;
}
std::cout << double(sourceId) / double(m_sources.size()) << " "
<< (m_Aadj[iomega]*lambdaCoefs - b).norm()
<< " < (1.0e-1)*std::min( " << (m_Aadj[iomega]*lambdaCoefs).norm() << " , " << b.norm() << " ) "
<< std::endl;
if (not b.isApprox( m_Aadj[iomega]*lambdaCoefs, 1.0e-1 )) {
std::cout << "solving adjoint failed "
<< (m_Aadj[iomega]*lambdaCoefs - b).norm() << " / "
<< b.norm()
<< std::endl;
std::exit(0);
}
const-Eigen::MatrixXcd b=FEMSolver::to_向量(l);
const-Eigen::VectorXcd-lambdaCoefs=m_调整解算器[iomega]。求解(b);
std::你能提供一份详细的报告吗?你可能在别的地方有UB。
0.9923076923076923 1.713417202937616e-15 < 0.01309586242494802
0.9923076923076923 1.713417202937616e-15 < (1.0e-1)*std::min( 0.1309586242494803 , 0.1309586242494802 )
solving adjoint failed 2.371815161336617e-13/ 0.110570597670365