mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-06-04 18:54:00 +08:00
Add missing file.
This commit is contained in:
parent
1301d744f8
commit
b9f7a17e47
52
doc/examples/make_circulant2.cpp
Normal file
52
doc/examples/make_circulant2.cpp
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#include <Eigen/Core>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
using namespace Eigen;
|
||||||
|
|
||||||
|
// [circulant_func]
|
||||||
|
template<class ArgType>
|
||||||
|
class circulant_functor {
|
||||||
|
const ArgType &m_vec;
|
||||||
|
public:
|
||||||
|
circulant_functor(const ArgType& arg) : m_vec(arg) {}
|
||||||
|
|
||||||
|
const typename ArgType::Scalar& operator() (Index row, Index col) const {
|
||||||
|
Index index = row - col;
|
||||||
|
if (index < 0) index += m_vec.size();
|
||||||
|
return m_vec(index);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// [circulant_func]
|
||||||
|
|
||||||
|
// [square]
|
||||||
|
template<class ArgType>
|
||||||
|
struct circulant_helper {
|
||||||
|
typedef Matrix<typename ArgType::Scalar,
|
||||||
|
ArgType::SizeAtCompileTime,
|
||||||
|
ArgType::SizeAtCompileTime,
|
||||||
|
ColMajor,
|
||||||
|
ArgType::MaxSizeAtCompileTime,
|
||||||
|
ArgType::MaxSizeAtCompileTime> MatrixType;
|
||||||
|
};
|
||||||
|
// [square]
|
||||||
|
|
||||||
|
// [makeCirculant]
|
||||||
|
template <class ArgType>
|
||||||
|
CwiseNullaryOp<circulant_functor<ArgType>, typename circulant_helper<ArgType>::MatrixType>
|
||||||
|
makeCirculant(const Eigen::MatrixBase<ArgType>& arg)
|
||||||
|
{
|
||||||
|
typedef typename circulant_helper<ArgType>::MatrixType MatrixType;
|
||||||
|
return MatrixType::NullaryExpr(arg.size(), arg.size(), circulant_functor<ArgType>(arg.derived()));
|
||||||
|
}
|
||||||
|
// [makeCirculant]
|
||||||
|
|
||||||
|
// [main]
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
Eigen::VectorXd vec(4);
|
||||||
|
vec << 1, 2, 4, 8;
|
||||||
|
Eigen::MatrixXd mat;
|
||||||
|
mat = makeCirculant(vec);
|
||||||
|
std::cout << mat << std::endl;
|
||||||
|
}
|
||||||
|
// [main]
|
Loading…
x
Reference in New Issue
Block a user