Macaulay2 Engine
Loading...
Searching...
No Matches
NAG.hpp File Reference

Numerical Algebraic Geometry: homotopy continuation PathTracker and supporting numeric types. More...

#include "engine-includes.hpp"
#include <algorithm>
#include <assert.h>
#include <map>
#include <math.h>
#include <memory>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <utility>
#include <vector>
#include "interface/NAG.h"
#include "matrix.hpp"
#include "SLP.hpp"
#include "aring-CC.hpp"
#include "aring-glue.hpp"
#include "aring.hpp"
#include "buffer.hpp"
#include "error.h"
#include "hash.hpp"
#include "newdelete.hpp"
#include "ring.hpp"
#include "ringelem.hpp"

Go to the source code of this file.

Classes

class  M2PointArray
 MutableEngineObject wrapper that owns a PointArray via unique_ptr. More...
class  PointArray
 Container of numerical points equipped with an $\varepsilon$-tolerance and a random weight vector used to bucket approximately equal points. More...
class  complex
class  ComplexField
 Field-traits tag used as the template parameter of SLP<Field> to pick the complex element type. More...
class  SLP< Field >
class  StraightLineProgram
struct  Solution
 One numerical solution produced by a PathTracker run, with the full per-path diagnostic record. More...
class  PathTracker
 Numerical homotopy-continuation path tracker for systems of polynomial equations. More...

Macros

#define CCC   M2::ConcreteRing<M2::ARingCC>
#define libPREFIX   "/tmp/slpFN."
#define slpCOMPILED   100
#define slpPREDICTOR   101
#define slpCORRECTOR   102
#define slpEND   0
#define slpCOPY   1
#define slpMULTIsum   2
#define slpPRODUCT   3
#define ZERO_CONST   -1
#define ONE_CONST   -2
#define RUNGE_KUTTA   1
#define TANGENT   2
#define EULER   3
#define PROJECTIVE_NEWTON   4
#define MAX_NUM_SLPs   100
#define CONST_OFFSET   0x1000
#define SLP_HEADER_LEN   4
#define MAX_NUM_PATH_TRACKERS   10

Functions

const CCCcast_to_CCC (const Ring *R)
ring_elem from_doubles (const CCC *C, double re, double im)
gmp_CC toBigComplex (const CCC *C, ring_elem a)
template<class Field>
void zero_complex_array (int n, typename Field::element_type *a)
template<class Field>
void copy_complex_array (int n, const typename Field::element_type *a, typename Field::element_type *b)
template<class Field>
Field::element_type * make_copy_complex_array (int n, const typename Field::element_type *a)
template<class Field>
void multiply_complex_array_scalar (int n, typename Field::element_type *a, const typename Field::element_type b)
template<class Field>
void add_to_complex_array (int n, typename Field::element_type *a, const typename Field::element_type *b)
template<class Field>
void negate_complex_array (int n, typename Field::element_type *a)
template<class Field>
double norm2_complex_array (int n, typename Field::element_type *a)
template<typename R>
void evaluateSLP (const SLProgram &slp, std::vector< typename R::ElementType > &values)
int degree_ring_elem (const PolyRing *R, ring_elem re)
void print_complex_matrix (int size, const double *A)

Detailed Description

Numerical Algebraic Geometry: homotopy continuation PathTracker and supporting numeric types.

Note
AI-generated documentation. Verify against the source before relying on it.

Complements the engine's symbolic Groebner-basis / resolution machinery by tracking solutions of a polynomial system F : C^n -> C^m over hardware-precision complex numbers. Declares PathTracker, the predictor-corrector homotopy continuation driver — it owns the homotopy H, start system S, target system T, their derivative SLPs (slpHxt, slpHxtH, slpSxS, slpTxT, ...), and the Bombieri-Weyl pairing <S, T> that gates the projective-Newton geodesic — along with Solution (a tracked path's terminal coordinates, status, condition number, step count) and the auxiliary complex / PointArray / M2PointArray value types. Witness sets and monodromy live in top-level M2 packages that call these path-tracking primitives, not in this header.

Polynomial evaluation at every continuation step goes through a straight-line program compiled once from the input system; the SLP machinery lives in SLP.hpp, SLP-defs.hpp, and SLP-imp.hpp. The complex class is a plain (double, double) pair with MPFR-to-double down-conversion in its gmp_CC constructor; the file is unusually liberal with STL containers compared to the rest of the engine because its values are not garbage-collected. Originally contributed by Anton Leykin; large portions are in the public domain.

See also
SLP.hpp
SLP-defs.hpp
SLP-imp.hpp
interface/NAG.h
aring-CC.hpp

Definition in file NAG.hpp.