40#ifndef BERTINI_TRIGONOMETRIC_OPERATOR_HPP
41#define BERTINI_TRIGONOMETRIC_OPERATOR_HPP
55 class TrigOperator:
public virtual UnaryOperator
58 BERTINI_DEFAULT_VISITABLE()
60 TrigOperator(
const std::shared_ptr<Node> & N) : UnaryOperator(N)
63 virtual ~TrigOperator() =
default;
70 int Degree(std::shared_ptr<Variable>
const& v =
nullptr)
const override;
74 friend class boost::serialization::access;
76 template <
typename Archive>
77 void serialize(Archive& ar,
const unsigned version) {
78 ar & boost::serialization::base_object<UnaryOperator>(*
this);
94 class SinOperator :
public virtual TrigOperator,
public virtual EnableSharedFromThisVirtual<SinOperator>
97 BERTINI_DEFAULT_VISITABLE()
102 template<
typename... Ts>
104 std::shared_ptr<SinOperator> Make(Ts&& ...ts){
105 return std::shared_ptr<SinOperator>(
new SinOperator(ts...) );
109 SinOperator(
const std::shared_ptr<Node> & N) : TrigOperator(N),
UnaryOperator(N)
116 void print(std::ostream & target)
const override;
122 std::shared_ptr<Node>
Differentiate(std::shared_ptr<Variable>
const& v =
nullptr)
const override;
124 virtual ~SinOperator() =
default;
130 dbl
FreshEval_d(std::shared_ptr<Variable>
const& diff_variable)
const override;
132 mpfr_complex
FreshEval_mp(std::shared_ptr<Variable>
const& diff_variable)
const override;
135 void FreshEval_mp(mpfr_complex& evaluation_value, std::shared_ptr<Variable>
const& diff_variable)
const override;
137 void FreshEval_d(dbl& evaluation_value, std::shared_ptr<Variable>
const& diff_variable)
const override;
141 SinOperator() =
default;
142 friend class boost::serialization::access;
144 template <
typename Archive>
145 void serialize(Archive& ar,
const unsigned version) {
146 ar & boost::serialization::base_object<TrigOperator>(*
this);
157 class ArcSinOperator :
public virtual TrigOperator,
public virtual EnableSharedFromThisVirtual<ArcSinOperator>
160 BERTINI_DEFAULT_VISITABLE()
165 template<
typename... Ts>
167 std::shared_ptr<ArcSinOperator> Make(Ts&& ...ts){
168 return std::shared_ptr<ArcSinOperator>(
new ArcSinOperator(ts...) );
172 ArcSinOperator(
const std::shared_ptr<Node> & N) : TrigOperator(N),
UnaryOperator(N)
177 void print(std::ostream & target)
const override;
183 std::shared_ptr<Node>
Differentiate(std::shared_ptr<Variable>
const& v =
nullptr)
const override;
185 virtual ~ArcSinOperator() =
default;
191 dbl
FreshEval_d(std::shared_ptr<Variable>
const& diff_variable)
const override;
193 mpfr_complex
FreshEval_mp(std::shared_ptr<Variable>
const& diff_variable)
const override;
196 void FreshEval_mp(mpfr_complex& evaluation_value, std::shared_ptr<Variable>
const& diff_variable)
const override;
198 void FreshEval_d(dbl& evaluation_value, std::shared_ptr<Variable>
const& diff_variable)
const override;
201 ArcSinOperator() =
default;
202 friend class boost::serialization::access;
205 template <
typename Archive>
206 void serialize(Archive& ar,
const unsigned version) {
207 ar & boost::serialization::base_object<TrigOperator>(*
this);
224 class CosOperator :
public virtual TrigOperator,
public virtual EnableSharedFromThisVirtual<CosOperator>
227 BERTINI_DEFAULT_VISITABLE()
232 template<
typename... Ts>
234 std::shared_ptr<CosOperator> Make(Ts&& ...ts){
235 return std::shared_ptr<CosOperator>(
new CosOperator(ts...) );
239 CosOperator(
const std::shared_ptr<Node> & N) : TrigOperator(N),
UnaryOperator(N)
246 void print(std::ostream & target)
const override;
254 std::shared_ptr<Node>
Differentiate(std::shared_ptr<Variable>
const& v =
nullptr)
const override;
256 virtual ~CosOperator() =
default;
262 dbl
FreshEval_d(std::shared_ptr<Variable>
const& diff_variable)
const override;
264 mpfr_complex
FreshEval_mp(std::shared_ptr<Variable>
const& diff_variable)
const override;
267 void FreshEval_mp(mpfr_complex& evaluation_value, std::shared_ptr<Variable>
const& diff_variable)
const override;
269 void FreshEval_d(dbl& evaluation_value, std::shared_ptr<Variable>
const& diff_variable)
const override;
274 CosOperator() =
default;
275 friend class boost::serialization::access;
277 template <
typename Archive>
278 void serialize(Archive& ar,
const unsigned version) {
279 ar & boost::serialization::base_object<TrigOperator>(*
this);
290 class ArcCosOperator :
public virtual TrigOperator,
public virtual EnableSharedFromThisVirtual<ArcCosOperator>
293 BERTINI_DEFAULT_VISITABLE()
298 template<
typename... Ts>
300 std::shared_ptr<ArcCosOperator> Make(Ts&& ...ts){
301 return std::shared_ptr<ArcCosOperator>(
new ArcCosOperator(ts...) );
305 ArcCosOperator(
const std::shared_ptr<Node> & N) : TrigOperator(N),
UnaryOperator(N)
311 void print(std::ostream & target)
const override;
318 std::shared_ptr<Node>
Differentiate(std::shared_ptr<Variable>
const& v =
nullptr)
const override;
321 virtual ~ArcCosOperator() =
default;
327 dbl
FreshEval_d(std::shared_ptr<Variable>
const& diff_variable)
const override;
329 mpfr_complex
FreshEval_mp(std::shared_ptr<Variable>
const& diff_variable)
const override;
332 void FreshEval_mp(mpfr_complex& evaluation_value, std::shared_ptr<Variable>
const& diff_variable)
const override;
334 void FreshEval_d(dbl& evaluation_value, std::shared_ptr<Variable>
const& diff_variable)
const override;
338 ArcCosOperator() =
default;
339 friend class boost::serialization::access;
341 template <
typename Archive>
342 void serialize(Archive& ar,
const unsigned version) {
343 ar & boost::serialization::base_object<TrigOperator>(*
this);
362 class TanOperator :
public virtual TrigOperator,
public virtual EnableSharedFromThisVirtual<TanOperator>
365 BERTINI_DEFAULT_VISITABLE()
370 template<
typename... Ts>
372 std::shared_ptr<TanOperator> Make(Ts&& ...ts){
373 return std::shared_ptr<TanOperator>(
new TanOperator(ts...) );
377 TanOperator(
const std::shared_ptr<Node> & N) : TrigOperator(N),
UnaryOperator(N)
383 void print(std::ostream & target)
const override;
389 std::shared_ptr<Node>
Differentiate(std::shared_ptr<Variable>
const& v =
nullptr)
const override;
391 virtual ~TanOperator() =
default;
397 dbl
FreshEval_d(std::shared_ptr<Variable>
const& diff_variable)
const override;
399 mpfr_complex
FreshEval_mp(std::shared_ptr<Variable>
const& diff_variable)
const override;
402 void FreshEval_mp(mpfr_complex& evaluation_value, std::shared_ptr<Variable>
const& diff_variable)
const override;
404 void FreshEval_d(dbl& evaluation_value, std::shared_ptr<Variable>
const& diff_variable)
const override;
408 TanOperator() =
default;
409 friend class boost::serialization::access;
412 template <
typename Archive>
413 void serialize(Archive& ar,
const unsigned version) {
414 ar & boost::serialization::base_object<TrigOperator>(*
this);
425 class ArcTanOperator :
public virtual TrigOperator,
public virtual EnableSharedFromThisVirtual<ArcTanOperator>
428 BERTINI_DEFAULT_VISITABLE()
433 template<
typename... Ts>
435 std::shared_ptr<ArcTanOperator> Make(Ts&& ...ts){
436 return std::shared_ptr<ArcTanOperator>(
new ArcTanOperator(ts...) );
440 ArcTanOperator(
const std::shared_ptr<Node> & N) : TrigOperator(N),
UnaryOperator(N)
446 void print(std::ostream & target)
const override;
452 std::shared_ptr<Node>
Differentiate(std::shared_ptr<Variable>
const& v =
nullptr)
const override;
454 virtual ~ArcTanOperator() =
default;
460 dbl
FreshEval_d(std::shared_ptr<Variable>
const& diff_variable)
const override;
462 mpfr_complex
FreshEval_mp(std::shared_ptr<Variable>
const& diff_variable)
const override;
465 void FreshEval_mp(mpfr_complex& evaluation_value, std::shared_ptr<Variable>
const& diff_variable)
const override;
467 void FreshEval_d(dbl& evaluation_value, std::shared_ptr<Variable>
const& diff_variable)
const override;
470 ArcTanOperator() =
default;
471 friend class boost::serialization::access;
473 template <
typename Archive>
474 void serialize(Archive& ar,
const unsigned version) {
475 ar & boost::serialization::base_object<TrigOperator>(*
this);
482 inline std::shared_ptr<Node> sin(
const std::shared_ptr<Node> & N)
484 return SinOperator::Make(N);
487 inline std::shared_ptr<Node> asin(
const std::shared_ptr<Node> & N)
489 return ArcSinOperator::Make(N);
494 inline std::shared_ptr<Node> cos(
const std::shared_ptr<Node> & N)
496 return CosOperator::Make(N);
501 inline std::shared_ptr<Node> acos(
const std::shared_ptr<Node> & N)
503 return ArcCosOperator::Make(N);
508 inline std::shared_ptr<Node> tan(
const std::shared_ptr<Node> & N)
510 return TanOperator::Make(N);
515 inline std::shared_ptr<Node> atan(
const std::shared_ptr<Node> & N)
517 return ArcTanOperator::Make(N);
Provides the artithmetic Node types, such as Sum and Power.
unsigned EliminateOnes() override
A transform function, which eliminates nodes from the tree.
Definition trig.cpp:187
dbl FreshEval_d(std::shared_ptr< Variable > const &diff_variable) const override
Definition trig.cpp:206
void print(std::ostream &target) const override
Definition trig.cpp:192
std::shared_ptr< Node > Differentiate(std::shared_ptr< Variable > const &v=nullptr) const override
Definition trig.cpp:200
mpfr_complex FreshEval_mp(std::shared_ptr< Variable > const &diff_variable) const override
Definition trig.cpp:211
unsigned EliminateOnes() override
A transform function, which eliminates nodes from the tree.
Definition trig.cpp:96
void print(std::ostream &target) const override
Definition trig.cpp:101
std::shared_ptr< Node > Differentiate(std::shared_ptr< Variable > const &v=nullptr) const override
Definition trig.cpp:108
dbl FreshEval_d(std::shared_ptr< Variable > const &diff_variable) const override
Definition trig.cpp:115
mpfr_complex FreshEval_mp(std::shared_ptr< Variable > const &diff_variable) const override
Definition trig.cpp:120
unsigned EliminateOnes() override
A transform function, which eliminates nodes from the tree.
Definition trig.cpp:279
std::shared_ptr< Node > Differentiate(std::shared_ptr< Variable > const &v=nullptr) const override
Definition trig.cpp:292
void print(std::ostream &target) const override
Definition trig.cpp:284
mpfr_complex FreshEval_mp(std::shared_ptr< Variable > const &diff_variable) const override
Definition trig.cpp:302
dbl FreshEval_d(std::shared_ptr< Variable > const &diff_variable) const override
Definition trig.cpp:297
void print(std::ostream &target) const override
Definition trig.cpp:147
unsigned EliminateOnes() override
A transform function, which eliminates nodes from the tree.
Definition trig.cpp:142
dbl FreshEval_d(std::shared_ptr< Variable > const &diff_variable) const override
Definition trig.cpp:159
mpfr_complex FreshEval_mp(std::shared_ptr< Variable > const &diff_variable) const override
Definition trig.cpp:164
std::shared_ptr< Node > Differentiate(std::shared_ptr< Variable > const &v=nullptr) const override
Definition trig.cpp:154
virtual unsigned EliminateZeros()=0
A transform function, which eliminates nodes from the tree.
std::shared_ptr< Node > Differentiate(std::shared_ptr< Variable > const &v=nullptr) const override
Definition trig.cpp:63
dbl FreshEval_d(std::shared_ptr< Variable > const &diff_variable) const override
Definition trig.cpp:69
mpfr_complex FreshEval_mp(std::shared_ptr< Variable > const &diff_variable) const override
Definition trig.cpp:74
void print(std::ostream &target) const override
Definition trig.cpp:55
unsigned EliminateOnes() override
A transform function, which eliminates nodes from the tree.
Definition trig.cpp:50
dbl FreshEval_d(std::shared_ptr< Variable > const &diff_variable) const override
Definition trig.cpp:251
std::shared_ptr< Node > Differentiate(std::shared_ptr< Variable > const &v=nullptr) const override
Definition trig.cpp:246
void print(std::ostream &target) const override
Definition trig.cpp:239
unsigned EliminateOnes() override
A transform function, which eliminates nodes from the tree.
Definition trig.cpp:234
mpfr_complex FreshEval_mp(std::shared_ptr< Variable > const &diff_variable) const override
Definition trig.cpp:256
int Degree(std::shared_ptr< Variable > const &v=nullptr) const override
Definition trig.cpp:33
Interface for all unary Operator types.
Definition operator.hpp:84
Provides the abstract Operator Node type.