X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?a=blobdiff_plain;f=check%2Fexam_pseries.cpp;h=04b669e0724eb552b70499b3a1f4bc475564bd96;hb=d39db5674734029a7aa11ea4446fd8923d51ce0e;hp=e24ef414790e31a36e704e38bbb989ad35084123;hpb=c3c748381bda4f81b68e50db2eed440c19f24b85;p=ginac.git diff --git a/check/exam_pseries.cpp b/check/exam_pseries.cpp index e24ef414..04b669e0 100644 --- a/check/exam_pseries.cpp +++ b/check/exam_pseries.cpp @@ -3,7 +3,7 @@ * Series expansion test (Laurent and Taylor series). */ /* - * GiNaC Copyright (C) 1999-2007 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2022 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 @@ -20,11 +20,12 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include #include "ginac.h" -using namespace std; using namespace GiNaC; +#include +using namespace std; + static symbol x("x"); static unsigned check_series(const ex &e, const ex &point, const ex &d, int order = 8) @@ -140,6 +141,10 @@ static unsigned exam_series1() d = pow(a, b) + (pow(a, b)*b/a)*x + (pow(a, b)*b*b/a/a/2 - pow(a, b)*b/a/a/2)*pow(x, 2) + Order(pow(x, 3)); result += check_series(e, 0, d, 3); + e = a * (1 / (x * sin(x)) - sin(x) / x); + d = a * pow(x, -2) + Order(pow(x, -1)); + result += check_series(e, 0, d, -1); + return result; } @@ -172,6 +177,7 @@ static unsigned exam_series3() // Series exponentiation static unsigned exam_series4() { + using GiNaC::tgamma; unsigned result = 0; ex e, d; @@ -210,6 +216,7 @@ static unsigned exam_series5() // Series expansion of tgamma(-1) static unsigned exam_series6() { + using GiNaC::tgamma; ex e = tgamma(2*x); ex d = pow(x+1,-1)*numeric(1,4) + pow(x+1,0)*(numeric(3,4) - @@ -327,6 +334,7 @@ static unsigned exam_series11() static unsigned exam_series12() { using GiNaC::log; + using GiNaC::atanh; unsigned result = 0; ex e, d; @@ -365,6 +373,23 @@ static unsigned exam_series13() return result; } +// Test if (1+x)^(1/x) can be expanded. +static unsigned exam_series14() +{ + unsigned result = 0; + + ex e = pow(1+x, sin(x)/x); + ex d = 1 + x - pow(x,3)/6 + Order(pow(x,4)); + try { + result += check_series(e,0,d,4); + } catch (const pole_error& err) { + clog << "series expansion of " << e << " at 0 raised an exception." << endl; + ++result; + } + + return result; +} + unsigned exam_pseries() { unsigned result = 0; @@ -384,6 +409,7 @@ unsigned exam_pseries() result += exam_series11(); cout << '.' << flush; result += exam_series12(); cout << '.' << flush; result += exam_series13(); cout << '.' << flush; + result += exam_series14(); cout << '.' << flush; return result; }