From 0f4889513f4f70809d64a608e6fa0ec5cdb83390 Mon Sep 17 00:00:00 2001 From: Christian Bauer Date: Fri, 20 Apr 2001 23:09:09 +0000 Subject: [PATCH] - degree(), ldegree(), coeff(), lcoeff(), tcoeff() and collect() work with non-symbols as the second argument - collect_distributed() produces result in distributed form (second argument should be a list of symbols) --- ginsh/ginsh.1.in | 19 +++++++++++-------- ginsh/ginsh_parser.yy | 26 +++++++++++++------------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/ginsh/ginsh.1.in b/ginsh/ginsh.1.in index d5a135ff..97c0bbbc 100644 --- a/ginsh/ginsh.1.in +++ b/ginsh/ginsh.1.in @@ -229,16 +229,19 @@ detail here. Please refer to the GiNaC documentation. .BI charpoly( matrix ", " symbol ) \- characteristic polynomial of a matrix .br -.BI coeff( expression ", " symbol ", " number ) -\- extracts coefficient of symbol^number from a polynomial +.BI coeff( expression ", " object ", " number ) +\- extracts coefficient of object^number from a polynomial .br -.BI collect( expression ", " symbol ) -\- collects coefficients of like powers +.BI collect( expression ", " object-or-list ) +\- collects coefficients of like powers (result in recursive form) +.br +.BI collect_distributed( expression ", " list ) +\- collects coefficients of like powers (result in distributed form) .br .BI content( expression ", " symbol ) \- content part of a polynomial .br -.BI degree( expression ", " symbol ) +.BI degree( expression ", " object ) \- degree of a polynomial .br .BI denom( expression ) @@ -280,10 +283,10 @@ detail here. Please refer to the GiNaC documentation. .BI lcm( expression ", " expression ) \- least common multiple .br -.BI lcoeff( expression ", " symbol ) +.BI lcoeff( expression ", " object ) \- leading coefficient of a polynomial .br -.BI ldegree( expression ", " symbol ) +.BI ldegree( expression ", " object ) \- low degree of a polynomial .br .BI lsolve( equation-list ", " symbol-list ) @@ -330,7 +333,7 @@ detail here. Please refer to the GiNaC documentation. .BI subs( expression ", " look-for-list ", " replace-by-list ) \- substitute subexpressions .br -.BI tcoeff( expression ", " symbol ) +.BI tcoeff( expression ", " object ) \- trailing coefficient of a polynomial .br .BI time( expression ) diff --git a/ginsh/ginsh_parser.yy b/ginsh/ginsh_parser.yy index 1a4e7e0a..b36e2ece 100644 --- a/ginsh/ginsh_parser.yy +++ b/ginsh/ginsh_parser.yy @@ -295,15 +295,18 @@ static ex f_charpoly(const exprseq &e) static ex f_coeff(const exprseq &e) { - CHECK_ARG(1, symbol, coeff); CHECK_ARG(2, numeric, coeff); - return e[0].coeff(ex_to_symbol(e[1]), ex_to_numeric(e[2]).to_int()); + return e[0].coeff(e[1], ex_to_numeric(e[2]).to_int()); } static ex f_collect(const exprseq &e) { - CHECK_ARG(1, symbol, collect); - return e[0].collect(ex_to_symbol(e[1])); + return e[0].collect(e[1]); +} + +static ex f_collect_distributed(const exprseq &e) +{ + return e[0].collect(e[1], true); } static ex f_content(const exprseq &e) @@ -314,8 +317,7 @@ static ex f_content(const exprseq &e) static ex f_degree(const exprseq &e) { - CHECK_ARG(1, symbol, degree); - return e[0].degree(ex_to_symbol(e[1])); + return e[0].degree(e[1]); } static ex f_determinant(const exprseq &e) @@ -352,7 +354,7 @@ static ex f_divide(const exprseq &e) if (divide(e[0], e[1], q)) return q; else - return *new fail(); + return fail(); } static ex f_eval2(const exprseq &e) @@ -386,14 +388,12 @@ static ex f_is(const exprseq &e) static ex f_lcoeff(const exprseq &e) { - CHECK_ARG(1, symbol, lcoeff); - return e[0].lcoeff(ex_to_symbol(e[1])); + return e[0].lcoeff(e[1]); } static ex f_ldegree(const exprseq &e) { - CHECK_ARG(1, symbol, ldegree); - return e[0].ldegree(ex_to_symbol(e[1])); + return e[0].ldegree(e[1]); } static ex f_normal2(const exprseq &e) @@ -461,8 +461,7 @@ static ex f_subs3(const exprseq &e) static ex f_tcoeff(const exprseq &e) { - CHECK_ARG(1, symbol, tcoeff); - return e[0].tcoeff(ex_to_symbol(e[1])); + return e[0].tcoeff(e[1]); } static ex f_trace(const exprseq &e) @@ -505,6 +504,7 @@ static const fcn_init builtin_fcns[] = { {"charpoly", fcn_desc(f_charpoly, 2)}, {"coeff", fcn_desc(f_coeff, 3)}, {"collect", fcn_desc(f_collect, 2)}, + {"collect_distributed", fcn_desc(f_collect_distributed, 2)}, {"content", fcn_desc(f_content, 2)}, {"degree", fcn_desc(f_degree, 2)}, {"denom", fcn_desc(f_denom, 1)}, -- 2.39.1