14#include <Eigen/Sparse>
15#include <unsupported/Eigen/KroneckerProduct>
19typedef Eigen::SparseMatrix<double> SpMat;
20typedef Eigen::VectorXd Vect;
24SpMat gen_test_mat_base1(){
33 offD << -0.2, -0.05, -0.1;
34 denseD << -0.4, -0.3, -0.2, -0.1;
36 std::cout <<
"d = " << d.transpose() << std::endl;
37 std::cout <<
"offD = " << offD.transpose() << std::endl;
38 std::cout <<
"denseD = " << denseD.transpose() << std::endl;
42 for(
int i=0; i<n; i++){
43 Q.insert(i, i) = d[i];
46 Q.insert(n-1, i)= denseD[i];
47 Q.insert(i, n-1)= denseD[i];
51 Q.insert(i,i+1) = offD[i];
52 Q.insert(i+1,i) = offD[i];
62SpMat gen_test_mat_base2(){
71 offD << -0.8, -0.3, -0.2, -0.05, -0.1;
72 denseD << -0.2, -0.5, -0.4, -0.3, -0.2, -0.1;
74 std::cout <<
"d = " << d.transpose() << std::endl;
75 std::cout <<
"offD = " << offD.transpose() << std::endl;
76 std::cout <<
"denseD = " << denseD.transpose() << std::endl;
80 for(
int i=0; i<n; i++){
81 Q.insert(i, i) = d[i];
84 Q.insert(n-1, i)= denseD[i];
85 Q.insert(i, n-1)= denseD[i];
89 Q.insert(i,i+1) = offD[i];
90 Q.insert(i+1,i) = offD[i];
99SpMat gen_test_mat_base3(
int ns,
int nt,
int nb){
121 A2 << -0.5, -0.5, -0.5,
125 printf(
"Invalid choice ns. Valid choices are 2 & 3.\n");
130 SpMat Q_upper(ns*nt, ns*nt);
132 for(
int i=0; i<nt; i++){
135 Q_d.block(ii,ii,ns,ns) = A1;
137 Q_d.block(ii,ii+ns, ns, ns) = A2;
138 Q_d.block(ii+ns,ii, ns, ns) = A2.transpose();
142 MatrixXd A3 = 0.5*(MatrixXd::Random(nb, ns*nt) - MatrixXd::Ones(nb, ns*nt));
143 Q_d.block(ns*nt,0,nb,ns*nt) = A3;
144 Q_d.block(0,ns*nt,ns*nt,nb) = A3.transpose();
158 printf(
"invalid size nb, admissible choices: 1,2 & 3.!\n");
161 Q_d.block(ns*nt, ns*nt, nb, nb) = A4;
164 std::cout <<
"Q :\n" << Q_d << std::endl;
167 SpMat Q = Q_d.sparseView();