1234567891011121314151617181920212223242526272829303132333435363738 |
- #include "polyroots.h"
- #include <Eigen/Eigenvalues>
- template <typename S, typename T>
- IGL_INLINE void igl::polyRoots(Eigen::Matrix<S, Eigen::Dynamic,1> &polyCoeff,
- Eigen::Matrix<std::complex<T>, Eigen::Dynamic,1> &roots
- )
- {
-
- int n = polyCoeff.rows() - 1;
- Eigen::Matrix<S, Eigen::Dynamic, 1> d (n,1);
- d = polyCoeff.tail(n)/polyCoeff(0);
- Eigen::Matrix<S, Eigen::Dynamic, Eigen::Dynamic> I; I.setIdentity(n-1,n-1);
- Eigen::Matrix<S, Eigen::Dynamic, 1> z; z.setZero(n-1,1);
- Eigen::Matrix<S, Eigen::Dynamic, Eigen::Dynamic> a(n,n);
- a<<-d.transpose(),I,z;
- roots = a.eigenvalues();
- }
- #ifdef IGL_STATIC_LIBRARY
- template void igl::polyRoots<std::complex<double>, double>(Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1>&, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1>&);
- template void igl::polyRoots<double, double>(Eigen::Matrix<double, -1, 1, 0, -1, 1>&, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1>&);
- #endif
|