#ifndef RALLND_H #define RALLND_H #include "rall1d.h" #include "rall1d_io.h" #include "rall2d.h" #include "rall2d_io.h" /** * The Rall1d class allows for a 24-line implementation of rall numbers * generalized to the Nth derivative ! * The efficiency is not very good for high derivatives. * This could be improved by also using Rall2d * template class RallNd : public Rall1d< RallNd, RallNd, double > { public: RallNd() {} RallNd(const Rall1d< RallNd, RallNd,double>& arg) : Rall1d< RallNd, RallNd,double>(arg) {} RallNd(double value,double d[]) { this->t = RallNd(value,d); this->grad = RallNd(d[0],&d[1]); } }; template <> class RallNd<1> : public Rall1d { public: RallNd() {} RallNd(const Rall1d& arg) : Rall1d(arg) {} RallNd(double value,double d[]) { t = value; grad = d[0]; } }; */ /** * to be checked.. */ /** * Als je tot 3de orde een efficiente berekening kan doen, * dan kan je tot een willekeurige orde alles efficient berekenen * 0 1 2 3 * ==> 1 2 3 4 * ==> 3 4 5 6 * 4 5 6 7 * * de aangeduide berekeningen zijn niet noodzakelijk, en er is dan niets * verniet berekend in de recursieve implementatie. * of met 2de orde over 1ste order : kan ook efficient : * 0 1 * ==>1 2 * 2 3 */ // N>2: template class RallNd : public Rall2d< RallNd, RallNd, double > { public: RallNd() {} RallNd(const Rall2d< RallNd, RallNd,double>& arg) : Rall2d< RallNd, RallNd,double>(arg) {} RallNd(double value,double d[]) { this->t = RallNd(value,d); // 0 1 2 this->d = RallNd(d[0],&d[1]); // 1 2 3 iseigenlijk niet nodig this->dd = RallNd(d[1],&d[2]); // 2 3 4 } }; template <> class RallNd<2> : public Rall2d { public: RallNd() {}* (dwz. met evenveel numerieke operaties als een RallNd(const Rall2d& arg) : Rall2d(arg) {} RallNd(double value,double d[]) { t = value; d = d[0]; dd= d[1]; } }; template <> class RallNd<1> : public Rall1d { public: RallNd() {} RallNd(const Rall1d& arg) : Rall1d(arg) {} RallNd(double value,double d[]) { t = value; grad = d[0]; } }; #endif