5 int k, k0, steps, n, kn1, be, se;
6 float cla, kden,asa,qsa,i,
j, s,t, pn,u1,u2,res3,d1,terr1;
8 while(tca[
k] != 0 &&
k <
tdeg){++
k;}
11 kden = -tca[0]/(k0*tca[k0]);
13 int *kia =
new int[steps+1];
14 int *tqa =
new int[steps+1];
15 int *asa =
new int[
tdeg+1];
16 int *qsa =
new int[
tdeg+1];
18 for(
int n=0; n < steps; ++n){
26 k=n; be=std::max(0,n-
tdeg);
28 while(pn != 0 &&
k !=
tdeg){
31 for(
int t=
k-n+1; t <= se; ++t){
32 asa[t] = tqa[
k-t] != 0 ? tca[t] : 0;
33 for(
int s=
k-t-be; n-1-be; ++s){
34 qsa[0] = (s+be == 0)*(
k*kden) + (s+be != 0)*qsa[0];
35 qsa[s] = (s+be == 0)*(tqa[s+be] != 0 ? tqa[s+be] : 1);
39 pn = se<=
k-n ? 0 : asa[se]*qsa[
k-se-be];
41 for(
int j = se;
j >=
k-n+2; --
j){
42 pn = (pn+asa[
j-1])*qsa[
k-
j-be+1];
48 if(pn == 0)
return [];
51 terr1 =
err(tp, tqa[steps],
true)[0];
52 if(terr1 is not finite)
throw error;
53 if(terr <
eps)
return [tqa[steps],terr1];
55 lam = (!flag_min)*lam + flag_min*terr1;
56 ats = (!flag_min)*ats + flag_min*tshift;
57 ass = (!flag_min)*ass + flag_min*sshift;
58 tph = (!flag_min)*tph + flag_min*tp;
59 stem = (!flag_min)*stem + flag_min*steps;
60 sqa = (!flag_min)*sqa + flag_min*eval(tqa);
61 kma = (!flag_min)*kma + flag_min*eval(kia)
65 std::complex<double> a,
b, c, d, bz;
71 b = -tp[1] / (
static_cast<double>(2) * a);
73 d = std::sqrt(std::pow(
b, 2) - c);
77 if (std::abs(a) > std::abs(
b)) {
81 if (std::abs(a) == std::abs(
b)) {
85 if (std::abs(a) < std::abs(
b)) {
91 finroot(-tp[0] / tp[1] + bz);
96std::vector<double>
err(
double q,
double x) {
101 ala = degree(q) * std::fabs(la);
102 if (ala < INFINITY) {
105 std::cout <<
"No error result" << std::endl;
106 return {INFINITY,
false};
111 double rmin = np.inf;
112 for(
int jl=0;
j < len(rl); jl++){
113 rmin = rl[jl] < rmin ? std::fabs(rl[jl]) : rmin;
117void findroot(std::vector<double>& p, std::vecvor<double>& rootlist,
double& ro,
bool& flag_suc,
bool& flag_fin){
118 auto nera =
err(p, ro);
119 auto bof = (nera[0] < inf)*bof + 0;
121 rootlist.push_back(ro);
123 if(bof != 0) flag_fin =
false;
128void degtwo(
double bz, std::vector<double> tp,
int&
tdeg, std::vector<double>& rootlist,
bool flag_fin){
129 bool flag_suc =
true;
130 auto a = -0.5*tp[1] + np.sqrt(
b**2 - c);
131 auto b = -0.5*tp[1] - np.sqrt(
b**2 - c);
134 finroot(tp, rootlist, bz + (abs(a) >= abs(
b)*(a) + (abs(a) < abs(
b))*(
b)) );
135 finroot(tp, rootlist, bz + (abs(a) == abs(
b)*(
b) + (abs(a) != abs(
b))*(tp[2]/( (abs(a)>abs(
b))*(a) + (abs(a)<abs(
b))*(
b) ))));
139void trial(
int cl,
int tdeg, std::vector<double>& tp,std::vector<double>& tp1,
double bz,
double bz1,
double stepfactor,
140 double stepmin,
bool& flag_suc,
bool& flag_inc,
bool flag_min){
141 if(tp[-1]*tp[-1] < eps4 && tp[-2]*tp[-2] > eps4){
142 auto qco = -tp[-1]/tp[-2];
143 auto ladi =
err(tp, qco)[0];
145 if(flag_inc = (
err(tp1, qco + bz - bz1 && cl == 2)[0] >=
eps && cl==2) ?
true :
false)
return;
147 deflate(qco + bz - bz1);
151 auto diam = 1.0 + std::max(tp[:-1]);
152 auto steps = (cl == 1 || (cl==2 && flag_min))*np.ceil(stepfactor *(np.ln(diam*
tdeg) + ln10n*(prec+1))) +
153 (cl >= 2 || (cl!=2 && flag_min))*(16*
tdeg)
154 std::vector<double> tca(
tdeg, 0);
155 auto _tp = list(reversed(tp));
156 std::vector<double> tca = _tp;
162 deflate(res2[0]+bz-bz1);
164 else if(len(res2) == 0){
174void run(
double& bz,
double& bzre,
double& tp,
int&
tdeg,
double& rootlist,
double& stepfactor,
bool flag_fin){
187 bz, bz1, flag_suc, flag_inc =
trial(1, tp, tp1,
tdeg, bz, bz1, stepfactor, flag_suc, flag_inc, flag_min);
const double eps
Definition L18_or.h:10
void laguerre(std::vector< double > &poly, int deg, std::vector< std::complex< double > > &roots, std::vector< int > &conv, int itmax)
Find the roots of a polynomial using Laguerre's method.
Definition L18_or.h:274
void degtwo(double bz, std::vector< double > tp, int &tdeg, std::vector< double > &rootlist, bool flag_fin)
Definition Laguerre15m.h:128
void run(double &bz, double &bzre, double &tp, int &tdeg, double &rootlist, double &stepfactor, bool flag_fin)
Definition Laguerre15m.h:174
void minrad()
Definition Laguerre15m.h:109
std::vector< double > err(double q, double x)
Definition Laguerre15m.h:96
int tdeg
Definition Laguerre15m.h:3
void trial(int cl, int tdeg, std::vector< double > &tp, std::vector< double > &tp1, double bz, double bz1, double stepfactor, double stepmin, bool &flag_suc, bool &flag_inc, bool flag_min)
Definition Laguerre15m.h:139
void bernoullid()
Definition Laguerre15m.h:4
void degtwoone(std::vector< std::complex< double > > &tp, int &tdeg)
Definition Laguerre15m.h:64
void findroot(std::vector< double > &p, std::vecvor< double > &rootlist, double &ro, bool &flag_suc, bool &flag_fin)
Definition Laguerre15m.h:117
p2 de j *z j
Definition Laguerre15m_or.h:23
cohn_schur ra local b
Definition Laguerre15m_or.h:3
cohn_schur ra local k
Definition Laguerre15m_or.h:3