📄 vnl_cpoly_roots.cxx
字号:
/*
fsm
*/
#include "vnl_cpoly_roots.h"
#include <vcl_cassert.h>
#include <vnl/algo/vnl_complex_eigensystem.h>
void vnl_cpoly_roots::compute(vnl_vector<vcl_complex<double> > const &a) {
// construct companion matrix
vnl_matrix<vcl_complex<double> > comp(N, N);
comp.fill(0);
for (unsigned i=0; i<N-1; ++i)
comp(i+1, i) = 1;
for (unsigned i=0; i<N; ++i)
comp(i, N-1) = -a[N-1-i];
// the eigenvalues of the companion matrix are the roots of the polynomial
solns = vnl_complex_eigensystem(comp,
false, // we only want
false).W; // the eigenvalues.
}
vnl_cpoly_roots::vnl_cpoly_roots(vnl_vector<vcl_complex<double> > const & a)
: solns(a.size())
, N(a.size()) // degree
{
compute(a);
}
vnl_cpoly_roots::vnl_cpoly_roots(vnl_vector<double> const & a_real,
vnl_vector<double> const & a_imag)
: solns(a_real.size())
, N(a_real.size()) // degree
{
assert(a_real.size() == a_imag.size());
vnl_vector<vcl_complex<double> > a(N);
for (unsigned i=0; i<N; ++i)
a[i] = vcl_complex<double>(a_real[i], a_imag[i]);
//vcl_cerr << "a = " << a << vcl_endl;
compute(a);
//vcl_cerr << "s = " << solns << vcl_endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -