|
Bertini 2 d882924 (2026-10-06 19:56 UTC)
Numerical algebraic geometry library (C++ core)
|
A System evaluation block that linearly combines whole Systems with t-coefficients. More...
#include <vector>#include <memory>#include <cassert>#include <boost/serialization/vector.hpp>#include <boost/serialization/shared_ptr.hpp>#include <boost/serialization/split_member.hpp>#include "bertini2/num_traits.hpp"#include "bertini2/eigen_extensions.hpp"#include "bertini2/function_tree.hpp"#include "bertini2/function_tree/reintern.hpp"#include "bertini2/system/blocks/describe.hpp"Go to the source code of this file.
Classes | |
| class | bertini::blocks::BlendBlock< SystemT > |
| A block forming the blend (coupling homotopy) H = sum_i c_i(t) * operand_i of several systems. More... | |
Namespaces | |
| namespace | bertini |
| namespace | bertini::blocks |
A System evaluation block that linearly combines whole Systems with t-coefficients.
This is how a coupled / start-target homotopy is represented inside the block-composed System: a blend
H(x,t) = sum_i c_i(t) * f_i(x)
of operand Systems f_i (e.g. an SLP polynomial target and a products-of-linears MHom start) weighted by coefficient functions c_i(t) that are ordinary function-tree nodes in the path variable t – so (1-t), gamma*t, and later t^lifting all work, and the time-derivative is exact via Node::Differentiate(t):
dH/dt = sum_i c_i'(t) * f_i(x)
(the operand Systems are autonomous in t, so df_i/dt = 0). The Jacobian is sum_i c_i(t) * (df_i/dx).
Only the operands' NATURAL functions are blended; the homotopy System that owns this block carries the (shared) patch, appended once after the block – so patches are not double-counted or scaled.
Templated on the system type so that System can remain a forward declaration in the Block variant (a System contains a Block which contains a BlendBlock<System> which holds shared_ptr<const System> – the template parameter makes System a dependent name, so its member functions are only required complete at instantiation, breaking the cycle). Operands are held by shared_ptr, never by value, for the same reason.