11 : coordinates(coordinates)
13 std::cout <<
"Constructing rigidity matrix" << std::endl;
15 std::cout <<
"Number of particles = " << numberOfParticles << std::endl;
16 int halfNlSize= (numberOfParticles*(numberOfParticles-1))/2;
18 matrixR.resize(halfNlSize,
DIM*numberOfParticles);
22 for(
int i_particle1=0; i_particle1<numberOfParticles; ++i_particle1)
25 for(
int i_particle2= i_particle1+1; i_particle2<numberOfParticles; i_particle2++)
29 for(
size_t k=0; k<2*
DIM; k++) {
31 matrixR(index,
DIM * i_particle1 + k)= rab(k) / rab.norm();
50 Eigen::BDCSVD<Eigen::MatrixXd> cg;
51 cg.compute(
matrixRTR,Eigen::ComputeThinU | Eigen::ComputeThinV);
53 double residualError= (
matrixRTR*u.transpose()-b).
norm()/b.norm();
54 if (residualError>1e-5) {
55 std::cout <<
"residual = " << residualError <<
". Residual error too big." << std::endl;
59 std::vector<double> hij(h.size(),0.0);
61 for(
int i=0; i<h.size(); ++i)
Eigen::MatrixXd matrixRTR
Rigidity(const MatrixXd &coordinates)
std::vector< double > project(const Eigen::VectorXd &gi) const
const MatrixXd & coordinates
double norm(double const *a)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > MatrixXd
Eigen::Matrix< double, 1, Eigen::Dynamic, Eigen::RowMajor > VectorXd
Eigen::Matrix< double, 1, DIM, Eigen::RowMajor > Vector3d