18 virtual std::string toString()
const = 0;
19 virtual std::shared_ptr<Expression> derivative(
20 const std::string& var)
const = 0;
21 virtual std::shared_ptr<Expression> simplify()
const = 0;
22 virtual double evaluate(
23 const std::map<std::string, double>& vars = {})
const = 0;
24 virtual Type getType()
const = 0;
25 virtual std::shared_ptr<Expression> clone()
const = 0;
37 std::string toString()
const override;
38 std::shared_ptr<Expression> derivative(
const std::string& var)
const override;
39 std::shared_ptr<Expression> simplify()
const override;
41 const std::map<std::string, double>& vars = {})
const override;
42 Type getType()
const override;
43 std::shared_ptr<Expression> clone()
const override;
45 double getValue()
const {
return value; }
55 std::string toString()
const override;
56 std::shared_ptr<Expression> derivative(
const std::string& var)
const override;
57 std::shared_ptr<Expression> simplify()
const override;
59 const std::map<std::string, double>& vars = {})
const override;
60 Type getType()
const override;
61 std::shared_ptr<Expression> clone()
const override;
63 std::string getName()
const {
return name; }
79 std::shared_ptr<Expression> left;
80 std::shared_ptr<Expression> right;
82 TypeBinaryOp binaryOp;
87 BinaryOp(std::shared_ptr<Expression> l,
89 std::shared_ptr<Expression>r);
90 std::string toString()
const override;
91 std::shared_ptr<Expression> derivative(
const std::string& var)
const override;
94 std::shared_ptr<Expression> simplify()
const override;
96 const std::map<std::string, double>& vars = {})
const override;
97 Type getType()
const override;
98 std::shared_ptr<Expression> clone()
const override;
99 std::shared_ptr<Expression> getLeft()
const {
return left; }
100 std::shared_ptr<Expression> getRight()
const {
return right; }
102 char getOperator()
const {
return op; }
111 std::shared_ptr<Expression> argument;
114 Function(
const std::string& fname, std::shared_ptr<Expression> arg);
115 std::string toString()
const override;
116 std::shared_ptr<Expression> derivative(
const std::string& var)
const override;
117 std::shared_ptr<Expression> simplify()
const override;
119 const std::map<std::string, double>& vars = {})
const override;
120 Type getType()
const override;
121 std::shared_ptr<Expression> clone()
const override;
123 std::string getFunctionName()
const {
return name; }
125 std::shared_ptr<Expression> getArgument()
const {
return argument; }
135 std::shared_ptr<Expression> operand_;
145 virtual double evaluate(
146 const std::map<std::string, double>& variables)
const override;
147 virtual std::string toString()
const override;
148 virtual Expression::Type getType()
const override;
149 virtual std::shared_ptr<Expression> clone()
const override;
150 virtual std::shared_ptr<Expression> derivative(
const std::string& var)
const override;
151 virtual std::shared_ptr<Expression> simplify()
const override;
153 char getOperator()
const;
154 std::shared_ptr<Expression> getOperand()
const;