Laguerre polynomials
Loading...
Searching...
No Matches
PolynomialGenerator.h
Go to the documentation of this file.
1#ifndef POLYNOMIALGENERATOR_H
2#define POLYNOMIALGENERATOR_H
3
4
5
6
7
8
9
10
11
12
13
14/*
15
16OBSOLETE, DONT USE!
17USE framework.h INSTEAD!
18OBSOLETE, DONT USE!
19USE framework.h INSTEAD!
20OBSOLETE, DONT USE!
21USE framework.h INSTEAD!
22OBSOLETE, DONT USE!
23USE framework.h INSTEAD!
24OBSOLETE, DONT USE!
25USE framework.h INSTEAD!
26OBSOLETE, DONT USE!
27USE framework.h INSTEAD!
28OBSOLETE, DONT USE!
29USE framework.h INSTEAD!
30OBSOLETE, DONT USE!
31USE framework.h INSTEAD!
32
33*/
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49#include <random>
50#include <chrono>
51
52#include <vector>
53#include <iostream>
54
55#include "Polynomial.h"
56#include "ExtendedFunctions.h"
57
58namespace Laguerre{
59
60template<typename T>
62protected:
63 // Pointer to a coeff generator function
64 typedef Polynomial<T> (*coeffGeneratorPtr)(std::vector<std::complex<T>>);
66
67 // Pointer to a roots generator function
68 typedef std::vector<std::complex<T>> (*rootsGeneratorPtr)(int, T, T, T);
70
71 static Polynomial<T> basicCoeffsGeneration(std::vector<std::complex<T>> roots){
72 int count = roots.size();
73 if(count == 1){
74 return Polynomial<T>(-roots[0].real(), static_cast<T>(1));
75 }
76 else{
77 int mid = count / 2;
78 auto mid_begin = roots.begin() + mid;
79 auto end = roots.end();
80 Polynomial left_poly = basicCoeffsGeneration(std::vector<std::complex<T>>(mid_begin -mid, mid_begin));
81 Polynomial right_poly = basicCoeffsGeneration(std::vector<std::complex<T>>(mid_begin, end));
82 return left_poly*right_poly;
83 }
84 }
85
86 static std::vector<std::complex<T>> basicRootGeneration(int count = 3, T from = 0, T to = 1, T delta=1){
87 std::uniform_real_distribution<double> distribution(from, to);
88 std::random_device rd;
89 std::default_random_engine generator(rd());
90 std::vector<std::complex<T>> roots;
91 for(int i = 0; i < count; ++i)
92 roots.push_back(distribution(generator)*delta);
93 return roots;
94 }
95
96 // Returns pointer to a function that generates coeffs
98 if (coeffGenerator == nullptr) {
100 }
101 return coeffGenerator;
102 }
103
104 // Returns pointer to a function that generates roots
106 if (rootsGenerator == nullptr) {
108 }
109 return rootsGenerator;
110 }
111
112public:
114 coeffGenerator = func;
115 }
116
118 rootsGenerator = func;
119 }
120
121 static std::vector<T> generateRoots(int count = 3, T from = 0, T to = 1, T delta=1){
122 return currentRootsGenerator()(count, from, to, delta);
123 }
124
125 static Polynomial<T> createFromRoots(std::vector<std::complex<T>> args){
126 if(!args.size())
127 throw std::invalid_argument("Cant create polynomial from zero given roots.");
128 auto res = currentCoeffGenerator()(args);
129 res.setRoots(args);
130 return res;
131 }
132
133 template<typename... Args>
134 static Polynomial<T> createFromRoots(Args...args){
135 return createFromRoots(std::vector<std::complex<T>>{args...});
136 }
137
138 static Polynomial<T> gen(int count = 3, T from = 1, T to = 3, T delta=1){
139 std::vector<std::complex<T>> roots = currentRootsGenerator()(count, from, to, delta);
140 Polynomial<T> res = createFromRoots(roots);
141 res.setRoots(roots);
142 return res;
143 }
144};
145
146template<typename T>
148
149template<typename T>
151
152}
153
154#endif
Definition PolynomialGenerator.h:61
static rootsGeneratorPtr currentRootsGenerator()
Definition PolynomialGenerator.h:105
std::vector< std::complex< T > >(* rootsGeneratorPtr)(int, T, T, T)
Definition PolynomialGenerator.h:68
static Polynomial< T > gen(int count=3, T from=1, T to=3, T delta=1)
Definition PolynomialGenerator.h:138
static void setCoeffGenerator(coeffGeneratorPtr func)
Definition PolynomialGenerator.h:113
static std::vector< T > generateRoots(int count=3, T from=0, T to=1, T delta=1)
Definition PolynomialGenerator.h:121
static coeffGeneratorPtr currentCoeffGenerator()
Definition PolynomialGenerator.h:97
static Polynomial< T > createFromRoots(Args...args)
Definition PolynomialGenerator.h:134
static void setRootsGenerator(rootsGeneratorPtr func)
Definition PolynomialGenerator.h:117
static rootsGeneratorPtr rootsGenerator
Definition PolynomialGenerator.h:69
Polynomial< T >(* coeffGeneratorPtr)(std::vector< std::complex< T > >)
Definition PolynomialGenerator.h:64
static Polynomial< T > basicCoeffsGeneration(std::vector< std::complex< T > > roots)
Definition PolynomialGenerator.h:71
static Polynomial< T > createFromRoots(std::vector< std::complex< T > > args)
Definition PolynomialGenerator.h:125
static std::vector< std::complex< T > > basicRootGeneration(int count=3, T from=0, T to=1, T delta=1)
Definition PolynomialGenerator.h:86
static coeffGeneratorPtr coeffGenerator
Definition PolynomialGenerator.h:65
Definition Polynomial.h:16
Definition ExtendedFunctions.h:14