41 using namespace Eigen;
53 REQUIRE(eigen_W.rows()==eigen_sW.rows(),
54 "The length of W (%d) and sW (%d) should be the same\n",
55 eigen_W.rows(), eigen_sW.rows());
56 REQUIRE(eigen_kernel.rows()==eigen_kernel.cols(),
57 "Kernel should a sqaure matrix, row (%d) col (%d)\n",
58 eigen_kernel.rows(), eigen_kernel.cols());
59 REQUIRE(eigen_kernel.rows()==eigen_W.rows(),
60 "The dimension between kernel (%d) and W (%d) should be matched\n",
61 eigen_kernel.rows(), eigen_W.rows());
67 if (eigen_W.minCoeff()<0)
70 VectorXd eigen_iW=(VectorXd::Ones(eigen_W.rows())).cwiseQuotient(eigen_W);
72 FullPivLU<MatrixXd> lu(
73 eigen_kernel*CMath::sq(scale)+
MatrixXd(eigen_iW.asDiagonal()));
76 eigen_L=-lu.inverse();
82 (eigen_sW*eigen_sW.transpose()).cwiseProduct(eigen_kernel*CMath::sq(scale))+
83 MatrixXd::Identity(eigen_kernel.rows(), eigen_kernel.cols()));
85 eigen_L=llt.matrixU();
101 eigen_V=eigen_L.triangularView<Upper>().adjoint().solve(
102 eigen_sW.asDiagonal()*eigen_kernel*CMath::sq(scale));
104 return get_inverse(L, kernel, sW, V, scale);
116 REQUIRE(eigen_kernel.rows()==eigen_kernel.cols(),
117 "Kernel should a sqaure matrix, row (%d) col (%d)\n",
118 eigen_kernel.rows(), eigen_kernel.cols());
119 REQUIRE(eigen_L.rows()==eigen_L.cols(),
120 "L should a sqaure matrix, row (%d) col (%d)\n",
121 eigen_L.rows(), eigen_L.cols());
122 REQUIRE(eigen_kernel.rows()==eigen_sW.rows(),
123 "The dimension between kernel (%d) and sW (%d) should be matched\n",
124 eigen_kernel.rows(), eigen_sW.rows());
125 REQUIRE(eigen_L.rows()==eigen_sW.rows(),
126 "The dimension between L (%d) and sW (%d) should be matched\n",
127 eigen_L.rows(), eigen_sW.rows());
131 Map<MatrixXd> eigen_tmp(tmp.matrix, tmp.num_rows, tmp.num_cols);
137 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)