* Implementation of GiNaC's symbolic integral. */
/*
- * GiNaC Copyright (C) 1999-2008 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2015 Johannes Gutenberg University Mainz, Germany
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
//////////
integral::integral()
- : inherited(&integral::tinfo_static),
+ :
x((new symbol())->setflag(status_flags::dynallocated))
{}
// public
integral::integral(const ex & x_, const ex & a_, const ex & b_, const ex & f_)
- : inherited(&integral::tinfo_static), x(x_), a(a_), b(b_), f(f_)
+ : x(x_), a(a_), b(b_), f(f_)
{
if (!is_a<symbol>(x)) {
throw(std::invalid_argument("first argument of integral must be of type symbol"));
// archiving
//////////
-integral::integral(const archive_node & n, lst & sym_lst) : inherited(n, sym_lst)
+void integral::read_archive(const archive_node& n, lst& sym_lst)
{
+ inherited::read_archive(n, sym_lst);
n.find_ex("x", x, sym_lst);
n.find_ex("a", a, sym_lst);
n.find_ex("b", b, sym_lst);
n.add_ex("f", f);
}
-DEFAULT_UNARCHIVE(integral)
-
//////////
// functions overriding virtual functions from base classes
//////////
}
// 12.34 is just an arbitrary number used to check whether a number
- // results after subsituting a number for the integration variable.
+ // results after substituting a number for the integration variable.
if (is_exactly_a<numeric>(ea) && is_exactly_a<numeric>(eb)
&& is_exactly_a<numeric>(ef.subs(x==12.34).evalf())) {
- try {
return adaptivesimpson(x, ea, eb, ef);
- } catch (runtime_error &rte) {}
}
if (are_ex_trivially_equal(a, ea) && are_ex_trivially_equal(b, eb)
return f.return_type();
}
-tinfo_t integral::return_type_tinfo() const
+return_type_t integral::return_type_tinfo() const
{
return f.return_type_tinfo();
}
return *this;
}
+GINAC_BIND_UNARCHIVER(integral);
} // namespace GiNaC