├── .gitignore ├── .travis.yml ├── README.md ├── docs └── images │ └── poly.png ├── index.js ├── package.json └── test └── test.js /.gitignore: -------------------------------------------------------------------------------- 1 | lib-cov 2 | *.seed 3 | *.log 4 | *.csv 5 | *.dat 6 | *.out 7 | *.pid 8 | *.gz 9 | 10 | pids 11 | logs 12 | results 13 | 14 | npm-debug.log 15 | node_modules/* 16 | 17 | obsolete 18 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.12" 4 | - "0.11" 5 | - "0.10" 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # poly-roots 2 | 3 | This module has been deprecated in favor of [durand-kerner](https://github.com/scijs/durand-kerner), which is a faster and more robust implementation all around. 4 | 5 | See [history](https://github.com/scijs/poly-roots/blob/930c0b5eff0d4ca37d8f94f075fa75e27197d621/README.md) for a more complete readme. 6 | -------------------------------------------------------------------------------- /docs/images/poly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scijs/poly-roots/28c3ae1bbb6962c7ffc554b0b7d26bc430e40f96/docs/images/poly.png -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /*function show(a,b) { 4 | var i,nums; 5 | nums = []; 6 | for(i=0; i 0 ) { 173 | x = xm; 174 | } else { 175 | break; 176 | } 177 | } 178 | dx = x; 179 | 180 | // Do newton iteration until x converges to two decimal places 181 | while( Math.abs(dx/x) > 0.005 ) { 182 | q[0] = pt[0]; 183 | for(i=1; i0; i--) { 250 | //console.log("shifting",i); 251 | hr[i] = hr[i-1]; 252 | hi[i] = hi[i-1]; 253 | } 254 | hr[0] = 0; 255 | hi[0] = 0; 256 | //console.log('shifted H =',showPolyPython(nm1,hr,hi)); 257 | } 258 | } 259 | } 260 | 261 | function vrshft (l3, nn, zri, sri, hr, hi, pr, pi, qpr, qpi, qhr, qhi, shr, shi, pvri, tri) { 262 | 263 | var mp, ms, omp, relstp, r1, r2, tp, bool, i, j; 264 | 265 | //console.log('begin stage 3'); 266 | 267 | var conv = false; 268 | var b = false; 269 | 270 | sri[0] = zri[0]; 271 | sri[1] = zri[1]; 272 | var eta = 1.1e-16; 273 | 274 | 275 | // Main loop for stage three 276 | for(i=0; i= 0.5 ) ) { 297 | // Iteration has stalled. Probably a cluster of zeros. Do 5 fixed 298 | // shift steps into the cluster to force one zero to dominate. 299 | tp = relstp; 300 | b = true; 301 | if( relstp < eta ) { 302 | tp = eta; 303 | } 304 | r1 = Math.sqrt(tp); 305 | r2 = sri[0] * (1+r1) - sri[1] * r1; 306 | sri[1] = sri[0] * r1 + sri[1] * (1+r1); 307 | sri[0] = r2; 308 | polyev( nn, sri[0], sri[1], pr, pi, qpr, qpi, pvri ); 309 | for(j=1; j<5; j++) { 310 | calct( nn, sri[0], sri[1], hr, hi, qhr, qhi, pvri, tri ); 311 | nexth( nn, bool, qhr, qhi, qpr, qpi, hr, hi, tri ); 312 | } 313 | omp = Infinity; 314 | } 315 | if( mp * 0.1 > omp ) { 316 | return conv; 317 | } 318 | } 319 | omp = mp; 320 | 321 | bool = calct( nn, sri[0], sri[1], hr, hi, qhr, qhi, pvri, tri ); 322 | bool = nexth( nn, bool, qhr, qhi, qpr, qpi, hr, hi, tri ); 323 | bool = calct( nn, sri[0], sri[1], hr, hi, qhr, qhi, pvri, tri ); 324 | if( ! bool ) { 325 | relstp = Math.sqrt(tri[0]*tri[0]+tri[1]*tri[1]) / Math.sqrt(sri[0]*sri[0]+sri[1]*sri[1]); 326 | sri[0] += tri[0]; 327 | sri[1] += tri[1]; 328 | } 329 | } 330 | return conv; 331 | } 332 | 333 | function fxshft (l2, nn, zri, sri, hr, hi, pr, pi, qpr, qpi, qhr, qhi, shr, shi, pvri, tri) { 334 | var i, j, n, conv; 335 | var otr, oti, bool, svsr, svsi; 336 | 337 | n = nn - 1; 338 | 339 | //console.log('begin stage 2'); 340 | 341 | //console.log('np.polyval(',showPolyPython(nn,pr,pi)+', '+sr+'+'+si+'j)'); 342 | //console.log('np.polyval(',showPolyPython(n,hr,hi)+', '+sr+'+'+si+'j)'); 343 | 344 | // Evaluate P at s: 345 | polyev( nn, sri[0], sri[1], pr, pi, qpr, qpi, pvri ); 346 | var test = true; 347 | var pasd = false; 348 | 349 | // Calculate first t = -P(s)/H(s): 350 | bool = calct( nn, sri[0], sri[1], hr, hi, qhr, qhi, pvri, tri ); 351 | zri[0] = sri[0] + tri[0]; 352 | zri[1] = sri[1] + tri[1]; 353 | 354 | // Main loop for one second stage step 355 | for(j=0; j