42 using namespace Eigen;
54 REQUIRE(eigen_W.rows()==eigen_sW.rows(),
55 "The length of W (%d) and sW (%d) should be the same\n",
56 eigen_W.rows(), eigen_sW.rows());
57 REQUIRE(eigen_kernel.rows()==eigen_kernel.cols(),
58 "Kernel should a sqaure matrix, row (%d) col (%d)\n",
59 eigen_kernel.rows(), eigen_kernel.cols());
60 REQUIRE(eigen_kernel.rows()==eigen_W.rows(),
61 "The dimension between kernel (%d) and W (%d) should be matched\n",
62 eigen_kernel.rows(), eigen_W.rows());
68 if (eigen_W.minCoeff()<0)
71 VectorXd eigen_iW=(VectorXd::Ones(eigen_W.rows())).cwiseQuotient(eigen_W);
73 FullPivLU<MatrixXd> lu(
74 eigen_kernel*CMath::sq(scale)+
MatrixXd(eigen_iW.asDiagonal()));
77 eigen_L=-lu.inverse();
83 (eigen_sW*eigen_sW.transpose()).cwiseProduct(eigen_kernel*CMath::sq(scale))+
84 MatrixXd::Identity(eigen_kernel.rows(), eigen_kernel.cols()));
86 eigen_L=llt.matrixU();
102 eigen_V=eigen_L.triangularView<Upper>().adjoint().solve(
103 eigen_sW.asDiagonal()*eigen_kernel*CMath::sq(scale));
105 return get_inverse(L, kernel, sW, V, scale);
117 REQUIRE(eigen_kernel.rows()==eigen_kernel.cols(),
118 "Kernel should a sqaure matrix, row (%d) col (%d)\n",
119 eigen_kernel.rows(), eigen_kernel.cols());
120 REQUIRE(eigen_L.rows()==eigen_L.cols(),
121 "L should a sqaure matrix, row (%d) col (%d)\n",
122 eigen_L.rows(), eigen_L.cols());
123 REQUIRE(eigen_kernel.rows()==eigen_sW.rows(),
124 "The dimension between kernel (%d) and sW (%d) should be matched\n",
125 eigen_kernel.rows(), eigen_sW.rows());
126 REQUIRE(eigen_L.rows()==eigen_sW.rows(),
127 "The dimension between L (%d) and sW (%d) should be matched\n",
128 eigen_L.rows(), eigen_sW.rows());
132 Map<MatrixXd> eigen_tmp(tmp.matrix, tmp.num_rows, tmp.num_cols);
138 eigen_tmp=eigen_kernel*CMath::sq(scale)-eigen_V.adjoint()*eigen_V;
Matrix< float64_t,-1,-1, 0,-1,-1 > MatrixXd
all of classes and functions are contained in the shogun namespace
void scale(Matrix A, Matrix B, typename Matrix::Scalar alpha)