X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Finifcns_trans.cpp;h=239b1ea2ea1d8a3130130a9e32ee77d28458cf3b;hp=cbf370dbb16542f1be19e16566a547a998e90f01;hb=ffad02322624ab79fdad1a23a3aa83cd67376151;hpb=70a32266cc1ada19b307b859305f215b5297bc7c;ds=sidebyside diff --git a/ginac/inifcns_trans.cpp b/ginac/inifcns_trans.cpp index cbf370db..239b1ea2 100644 --- a/ginac/inifcns_trans.cpp +++ b/ginac/inifcns_trans.cpp @@ -4,7 +4,7 @@ * functions. */ /* - * GiNaC Copyright (C) 1999-2001 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2003 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 @@ -29,6 +29,7 @@ #include "constant.h" #include "numeric.h" #include "power.h" +#include "operators.h" #include "relational.h" #include "symbol.h" #include "pseries.h" @@ -146,12 +147,12 @@ static ex log_series(const ex &arg, int order, unsigned options) { - GINAC_ASSERT(is_exactly_a(rel.lhs())); + GINAC_ASSERT(is_a(rel.lhs())); ex arg_pt; bool must_expand_arg = false; // maybe substitution of rel into arg fails because of a pole try { - arg_pt = arg.subs(rel); + arg_pt = arg.subs(rel, subs_options::no_pattern); } catch (pole_error) { must_expand_arg = true; } @@ -205,7 +206,7 @@ static ex log_series(const ex &arg, const symbol &s = ex_to(rel.lhs()); const ex &point = rel.rhs(); const symbol foo; - const ex replarg = series(log(arg), s==foo, order).subs(foo==point); + const ex replarg = series(log(arg), s==foo, order).subs(foo==point, subs_options::no_pattern); epvector seq; seq.push_back(expair(-I*csgn(arg*I)*Pi, _ex0)); seq.push_back(expair(Order(_ex1), order)); @@ -460,11 +461,11 @@ static ex tan_series(const ex &x, int order, unsigned options) { - GINAC_ASSERT(is_exactly_a(rel.lhs())); + GINAC_ASSERT(is_a(rel.lhs())); // method: // Taylor series where there is no pole falls back to tan_deriv. // On a pole simply expand sin(x)/cos(x). - const ex x_pt = x.subs(rel); + const ex x_pt = x.subs(rel, subs_options::no_pattern); if (!(2*x_pt/Pi).info(info_flags::odd)) throw do_taylor(); // caught by function::series() // if we got here we have to care for a simple pole @@ -626,7 +627,7 @@ static ex atan_series(const ex &arg, int order, unsigned options) { - GINAC_ASSERT(is_exactly_a(rel.lhs())); + GINAC_ASSERT(is_a(rel.lhs())); // method: // Taylor series where there is no pole or cut falls back to atan_deriv. // There are two branch cuts, one runnig from I up the imaginary axis and @@ -635,7 +636,7 @@ static ex atan_series(const ex &arg, // On the branch cuts and the poles series expand // (log(1+I*x)-log(1-I*x))/(2*I) // instead. - const ex arg_pt = arg.subs(rel); + const ex arg_pt = arg.subs(rel, subs_options::no_pattern); if (!(I*arg_pt).info(info_flags::real)) throw do_taylor(); // Re(x) != 0 if ((I*arg_pt).info(info_flags::real) && abs(I*arg_pt)<_ex1) @@ -650,7 +651,7 @@ static ex atan_series(const ex &arg, const symbol &s = ex_to(rel.lhs()); const ex &point = rel.rhs(); const symbol foo; - const ex replarg = series(atan(arg), s==foo, order).subs(foo==point); + const ex replarg = series(atan(arg), s==foo, order).subs(foo==point, subs_options::no_pattern); ex Order0correction = replarg.op(0)+csgn(arg)*Pi*_ex_1_2; if ((I*arg_pt)<_ex0) Order0correction += log((I*arg_pt+_ex_1)/(I*arg_pt+_ex1))*I*_ex_1_2; @@ -870,11 +871,11 @@ static ex tanh_series(const ex &x, int order, unsigned options) { - GINAC_ASSERT(is_exactly_a(rel.lhs())); + GINAC_ASSERT(is_a(rel.lhs())); // method: // Taylor series where there is no pole falls back to tanh_deriv. // On a pole simply expand sinh(x)/cosh(x). - const ex x_pt = x.subs(rel); + const ex x_pt = x.subs(rel, subs_options::no_pattern); if (!(2*I*x_pt/Pi).info(info_flags::odd)) throw do_taylor(); // caught by function::series() // if we got here we have to care for a simple pole @@ -1011,7 +1012,7 @@ static ex atanh_series(const ex &arg, int order, unsigned options) { - GINAC_ASSERT(is_exactly_a(rel.lhs())); + GINAC_ASSERT(is_a(rel.lhs())); // method: // Taylor series where there is no pole or cut falls back to atanh_deriv. // There are two branch cuts, one runnig from 1 up the real axis and one @@ -1019,7 +1020,7 @@ static ex atanh_series(const ex &arg, // On the branch cuts and the poles series expand // (log(1+x)-log(1-x))/2 // instead. - const ex arg_pt = arg.subs(rel); + const ex arg_pt = arg.subs(rel, subs_options::no_pattern); if (!(arg_pt).info(info_flags::real)) throw do_taylor(); // Im(x) != 0 if ((arg_pt).info(info_flags::real) && abs(arg_pt)<_ex1) @@ -1035,7 +1036,7 @@ static ex atanh_series(const ex &arg, const symbol &s = ex_to(rel.lhs()); const ex &point = rel.rhs(); const symbol foo; - const ex replarg = series(atanh(arg), s==foo, order).subs(foo==point); + const ex replarg = series(atanh(arg), s==foo, order).subs(foo==point, subs_options::no_pattern); ex Order0correction = replarg.op(0)+csgn(I*arg)*Pi*I*_ex1_2; if (arg_pt<_ex0) Order0correction += log((arg_pt+_ex_1)/(arg_pt+_ex1))*_ex1_2;