Macaulay2 Engine
Loading...
Searching...
No Matches

◆ evaluate_slpHxt()

void PathTracker::evaluate_slpHxt ( int n,
const complex * x0t0,
complex * Hxt )
inlineprivate

Definition at line 671 of file NAG.hpp.

672 {
673 if (is_projective)
674 {
675 complex* SxS = newarray_atomic(complex, (n + 1) * (n - 1));
676 complex* TxT = newarray_atomic(complex, (n + 1) * (n - 1));
677 const complex *x0 = x0t0, *t0 = x0t0 + n;
678 const double t = (*(double*)t0) * bigT; // t0 should be real
679 slpSxS->evaluate(n, x0, SxS);
680 slpTxT->evaluate(n, x0, TxT);
681 double c = cos(t), s = sin(t),
682 sqrt_one_minus_productST_2 = sqrt(1 - productST * productST);
683 double mS = c - productST * s / sqrt_one_minus_productST_2;
684 double mT = s / sqrt_one_minus_productST_2;
685 int j, i;
686 for (j = 0; j < n - 1; j++)
687 for (i = 0; i < n; i++)
688 *(Hxt + i * n + j) =
689 *(SxS + i * (n - 1) + j) * mS + *(TxT + i * (n - 1) + j) * mT;
690 j = n - 1; // last column
691 for (i = 0; i < n; i++) *(Hxt + i * n + j) = (x0 + i)->getconjugate();
692 i = n; // last row = H_t
693 mS = -s - productST * c / sqrt_one_minus_productST_2;
694 mT = c / sqrt_one_minus_productST_2;
695 for (j = 0; j < n - 1; j++)
696 {
697 complex tt =
698 *(SxS + i * (n - 1) + j) * mS + *(TxT + i * (n - 1) + j) * mT;
699 *(Hxt + i * n + j) = tt;
700 }
701 *(Hxt + n * n + n - 1) = complex(0.); // last row and column
702 freemem(SxS);
703 freemem(TxT);
704 }
705 else
706 slpHxt->evaluate(n + 1, x0t0, Hxt);
707 }
M2_bool is_projective
Definition NAG.hpp:751
StraightLineProgram * slpHxt
Definition NAG.hpp:662
double productST
Definition NAG.hpp:666
StraightLineProgram * slpSxS
Definition NAG.hpp:664
double bigT
Definition NAG.hpp:667
StraightLineProgram * slpTxT
Definition NAG.hpp:665
void freemem(void *s)
Definition m2-mem.cpp:103
void size_t s
Definition m2-mem.cpp:271
const mpreal sqrt(const unsigned int v, mp_rnd_t rnd_mode=mpreal::get_default_rnd())
Definition mpreal.h:2244
const mpreal cos(const mpreal &x, mp_rnd_t r=mpreal::get_default_rnd())
Definition mpreal.h:2301
const mpreal sin(const mpreal &x, mp_rnd_t r=mpreal::get_default_rnd())
Definition mpreal.h:2302
#define newarray_atomic(T, len)
Definition newdelete.hpp:91

References bigT, freemem(), is_projective, newarray_atomic, productST, s, slpHxt, slpSxS, and slpTxT.

Referenced by track().