|
DP3
|
#include <DiagonalLowRankSolver.h>
Public Member Functions | |
| DiagonalLowRankSolver (size_t n_low_rank_approximation_iterations, size_t n_power_iterations) | |
| size_t | NSolutionPolarizations () const override |
| void | SetNLowRankApproximationIterations (size_t n_iterations) |
| void | SetNPowerIterations (size_t n_power_iterations) |
| SolveResult | Solve (const FullSolveData &data, std::vector< std::vector< DComplex >> &solutions, double time) override |
Public Member Functions inherited from dp3::ddecal::SolverBase | |
| SolverBase () | |
| virtual | ~SolverBase ()=default |
| void | AddConstraint (std::unique_ptr< Constraint > constraint) |
| virtual std::vector< SolverBase * > | ConstraintSolvers () |
| const std::vector< std::unique_ptr< Constraint > > & | GetConstraints () |
| LLSSolverType | GetLLSSolverType () const |
| bool | GetPhaseOnly () const |
| void | GetTimings (std::ostream &os, double duration) const |
| virtual void | Initialize (size_t n_antennas, const std::vector< size_t > &n_solutions_per_direction, size_t n_channel_blocks) |
| void | SetDdConstraintWeights (const std::vector< std::vector< double >> &weights) |
| void | SetLLSSolverType (LLSSolverType solver_type) |
| void | SetPhaseOnly (bool phase_only) |
| virtual SolveResult | Solve (const UniSolveData &data, std::vector< std::vector< DComplex >> &solutions, double time) |
| virtual bool | SupportsDdSolutionIntervals () const |
| size_t | GetMaxIterations () const |
| void | SetMaxIterations (size_t max_iterations) |
| size_t | GetMinIterations () const |
| void | SetMinIterations (size_t min_iterations) |
| void | SetAccuracy (double accuracy) |
| double | GetAccuracy () const |
| void | SetConstraintAccuracy (double constraint_accuracy) |
| double | GetConstraintAccuracy () const |
| void | SetStepSize (double step_size) |
| double | GetStepSize () const |
| void | SetDetectStalling (bool detect_stalling, double step_diff_sigma) |
| bool | GetDetectStalling () const |
Additional Inherited Members | |
Public Types inherited from dp3::ddecal::SolverBase | |
| typedef std::complex< float > | Complex |
| typedef std::complex< double > | DComplex |
Protected Member Functions inherited from dp3::ddecal::SolverBase | |
| bool | ApplyConstraints (size_t iteration, double time, bool has_previously_converged, SolutionSpan &next_solutions) const |
| bool | ApplyConstraints (size_t iteration, double time, bool has_previously_converged, SolutionTensor &next_solutions) const |
| bool | AssignSolutions (std::vector< std::vector< DComplex >> &solutions, SolutionSpan &new_solutions, bool use_constraint_accuracy, double &avg_abs_diff, std::vector< double > &step_magnitudes) const |
| bool | AssignSolutions (std::vector< std::vector< DComplex >> &solutions, SolutionTensor &new_solutions, bool use_constraint_accuracy, double &avg_abs_diff, std::vector< double > &step_magnitudes) const |
| std::unique_ptr< LLSSolver > | CreateLLSSolver (size_t m, size_t n, size_t nrhs) const |
| bool | DetectStall (size_t iteration, const std::vector< double > &step_magnitudes) |
| std::unique_ptr< aocommon::RecursiveFor > | MakeOptionalRecursiveFor () const |
| SolveResult | MakeResult (size_t iteration, bool has_converged, bool constraints_satisfied) const |
| size_t | NAntennas () const |
| size_t | NChannelBlocks () const |
| size_t | NDirections () const |
| size_t | NSubSolutions () const |
| size_t | NSubThreads () const |
| size_t | NVisibilities () const |
| void | PrepareConstraints () |
| bool | ReachedStoppingCriterion (size_t iteration, bool has_converged, bool constraints_satisfied, const std::vector< double > &step_magnitudes) |
| void | Step (const std::vector< std::vector< DComplex >> &solutions, SolutionTensor &next_solutions) const |
Static Protected Member Functions inherited from dp3::ddecal::SolverBase | |
| static void | MakeSolutionsFinite1Pol (std::vector< std::vector< DComplex >> &solutions) |
| static void | MakeSolutionsFinite2Pol (std::vector< std::vector< DComplex >> &solutions) |
| static void | MakeSolutionsFinite4Pol (std::vector< std::vector< DComplex >> &solutions) |
Experimental solver that make use of the property that the antenna x antenna visibility matrix is a low-rank (rank 1 to be precise) matrix. A normal low-rank approximation can be solved exactly and without iterations, but because there are weights and missing values in the matrix, an iterative procedure is required, and the result is not exact.
When the step size is set to 1, this solver makes an immediate step. Because a solving iteration uses all data for one direction at once, this may be a good approach (in contrast to the iterative diagonal solver). To help convergence in this case, the directions are solved in order of largest power first.
|
inline |
|
inlineoverridevirtual |
Implements dp3::ddecal::SolverBase.
|
inline |
Number of full low-rank approximation iterations.
|
inline |
Number of power iterations performed to calculate the eigen value. See also DominantEigenPair().
|
overridevirtual |
Solves multi-directional Jones matrices. Takes the (single) measured data and the (multi-directional) model data, and solves the optimization problem that minimizes the norm of the differences.
| data | Buffer with weighted data and model data. |
| solutions | The per-channel and per-antenna solutions. solutions[ch] is a pointer for channelblock ch to antenna x directions x pol solutions. |
Reimplemented from dp3::ddecal::SolverBase.