parent
5d8a084070
commit
b6fcd4b341
34 changed files with 972 additions and 139 deletions
111
src/svd_model.cpp
Normal file
111
src/svd_model.cpp
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
//==================================================================================================
|
||||
/*
|
||||
ROTGEN - Runtime Overlay for Eigen
|
||||
Copyright : CODE RECKONS
|
||||
SPDX-License-Identifier: BSL-1.0
|
||||
*/
|
||||
//==================================================================================================
|
||||
|
||||
//==================================================================================================
|
||||
/*
|
||||
This file is a X-File to generate various svd_impl_* definitions variant
|
||||
*/
|
||||
//==================================================================================================
|
||||
|
||||
//==================================================================================================
|
||||
// Internal payload
|
||||
//==================================================================================================
|
||||
struct CLASSNAME::payload
|
||||
{
|
||||
using matrix_type = Eigen::Matrix<TYPE,Eigen::Dynamic,Eigen::Dynamic,STORAGE_ORDER>;
|
||||
Eigen::JacobiSVD<matrix_type> data;
|
||||
|
||||
payload(SOURCENAME const& src, int options) : data(src.storage()->data,options) {}
|
||||
};
|
||||
|
||||
//==================================================================================================
|
||||
// Constructors & Special Members
|
||||
//==================================================================================================
|
||||
CLASSNAME::CLASSNAME(SOURCENAME const& m, int options)
|
||||
: storage_(std::make_unique<payload>(m,options))
|
||||
{}
|
||||
|
||||
|
||||
CLASSNAME::CLASSNAME(CLASSNAME const& o)
|
||||
: storage_(std::make_unique<payload>(*o.storage_))
|
||||
{
|
||||
}
|
||||
|
||||
CLASSNAME::CLASSNAME(CLASSNAME&&) noexcept = default;
|
||||
|
||||
CLASSNAME& CLASSNAME::operator=(CLASSNAME const& o)
|
||||
{
|
||||
if (this != &o) storage_->data = o.storage_->data;
|
||||
return *this;
|
||||
}
|
||||
|
||||
CLASSNAME& CLASSNAME::operator=(CLASSNAME&& o) noexcept
|
||||
{
|
||||
if (this != &o) storage_->data = std::move(o.storage_->data);
|
||||
return *this;
|
||||
}
|
||||
|
||||
CLASSNAME::~CLASSNAME() = default;
|
||||
|
||||
int CLASSNAME::rank() const { return storage_->data.rank(); }
|
||||
|
||||
SOURCENAME CLASSNAME::U() const
|
||||
{
|
||||
SOURCENAME result;
|
||||
result.storage()->assign(storage_->data.matrixU());
|
||||
return result;
|
||||
}
|
||||
|
||||
SOURCENAME CLASSNAME::U(int r) const
|
||||
{
|
||||
SOURCENAME result;
|
||||
result.storage()->assign( storage_->data.matrixU().leftCols(r) );
|
||||
return result;
|
||||
}
|
||||
|
||||
SOURCENAME CLASSNAME::singular_values() const
|
||||
{
|
||||
SOURCENAME result;
|
||||
result.storage()->assign(storage_->data.singularValues());
|
||||
return result;
|
||||
}
|
||||
|
||||
SOURCENAME CLASSNAME::singular_values(int r) const
|
||||
{
|
||||
SOURCENAME result;
|
||||
result.storage()->assign(storage_->data.singularValues().head(r));
|
||||
return result;
|
||||
}
|
||||
|
||||
SOURCENAME CLASSNAME::D() const
|
||||
{
|
||||
SOURCENAME result;
|
||||
result.storage()->assign(storage_->data.singularValues().asDiagonal());
|
||||
return result;
|
||||
}
|
||||
|
||||
SOURCENAME CLASSNAME::D(int r) const
|
||||
{
|
||||
SOURCENAME result;
|
||||
result.storage()->assign(storage_->data.singularValues().head(r).asDiagonal());
|
||||
return result;
|
||||
}
|
||||
|
||||
SOURCENAME CLASSNAME::V() const
|
||||
{
|
||||
SOURCENAME result;
|
||||
result.storage()->assign(storage_->data.matrixV());
|
||||
return result;
|
||||
}
|
||||
|
||||
SOURCENAME CLASSNAME::V(int r) const
|
||||
{
|
||||
SOURCENAME result;
|
||||
result.storage()->assign( storage_->data.matrixV().leftCols(r) );
|
||||
return result;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue