19 class AnalyticTraj :
public TrajBase<typename T::Scalar>,
public AnalyticFunction<T>
25 AnalyticTraj(
const AnalyticFunction<T>& f,
const Interval& tdomain)
26 : TrajBase<typename T::Scalar>(), AnalyticFunction<T>(f), _tdomain(tdomain)
28 assert_release(f.args().total_size() == 1 &&
"domain of f must be 1d");
31 virtual Index size()
const
33 return AnalyticFunction<T>::output_size();
36 virtual std::pair<Index,Index> shape()
const
38 return AnalyticFunction<T>::output_shape();
41 virtual bool is_empty()
const
43 return _tdomain.is_empty();
46 virtual Interval tdomain()
const
51 virtual void truncate_tdomain(
const Interval& new_tdomain)
53 assert_release(this->tdomain().is_superset(new_tdomain));
54 _tdomain &= new_tdomain;
57 virtual typename T::Domain codomain()
const
59 return AnalyticFunction<T>::eval(this->_tdomain);
62 virtual typename T::Scalar operator()(
double t)
const
64 if(!this->tdomain().contains(t))
65 return this->nan_value();
66 return AnalyticFunction<T>::real_eval(t);
69 virtual typename T::Domain operator()(
const Interval& t)
const
71 if(!this->tdomain().is_superset(t))
72 return typename T::Domain((*
this)(tdomain().lb()))
73 .init(Interval(-oo,oo));
74 return AnalyticFunction<T>::eval(t);
77 AnalyticFunction<T> as_function()
const
81 AnalyticExprWrapper<T>(
82 std::make_shared<AnalyticOperationExpr<
83 TrajectoryOp<AnalyticTraj<T>>,T,ScalarType>>(*
this,t))