[GiNaC-list] degree function
Santos Jha
sjha2 at gmu.edu
Thu Jul 4 21:46:16 CEST 2024
Thank you, Vladimir. It was a great suggestion. Your comments reflect the statement in section 4.5 of the tutorial.
"GiNaC will assign the symbol an internal, unique name of the form symbolNNN. This won’t affect the usability of the symbol but the output of your calculations will become more readable if you give your symbols sensible names....."
My context was a bit different. I was trying to use the Lagrange interpolation theorem generically. I created three methods for basis, interpolation, and utility.
It was my ignorance to assume symbols are more like literals.
After your guidance, I passed the symbol from one function to another so that it could be used.
Beauty, now I do not have to add/subtract the coefficient of equal degree terms for which I was planning to write a method.
Thanks again. BTW, I am reading your paper "CLASSICAL/QUANTUM=COMMUTATIVE/NONCOMMUTATIVE?"
Regards,
Santos
________________________________
From: Vladimir V. Kisil <V.Kisil at leeds.ac.uk>
Sent: Wednesday, July 3, 2024 4:38 AM
To: GiNaC discussion list <ginac-list at ginac.de>; Santos Jha <sjha2 at gmu.edu>
Cc: Vladimir V. Kisil <V.Kisil at leeds.ac.uk>
Subject: Re: [GiNaC-list] degree function
Hello,
I think the problem is with your declaration of symb in
subExpres.degree(symb). Did you get it from a string "x" through a
parser? In this case it may be different from x in the poly. Then,
it is absent from a monomial and its degree is indeed zero.
Here is an output from a complete example code (see below):
----------------------------------------
Polynomial is x^2, it is a sum of monomials: false
x is polynomial=true and degree=1
2 is polynomial=true and degree=0
----------------------------------------
Polynomial is 1+3*x^2+2*x, it is a sum of monomials: true
3*x^2 is polynomial=true and degree=2
2*x is polynomial=true and degree=1
1 is polynomial=true and degree=0
Note that your polynomial is actually a monomial (but not a sum of
monomials) and this situation needs to be treated differently.
The complete code is:
#include <iostream>
#include <ginac/ginac.h>
using namespace std;
using namespace GiNaC;
int main() {
realsymbol x("x");
lst expressions = lst{-4*(-3+x)*(-1+x)+numeric(9,2)*(-2+x)*(-1+x)+numeric(1,2)*(-2+x)*(-3+x),
3*pow(x,2)+2*x+1};
for ( auto poly : expressions) {
cout << endl << "----------------------------------------" << endl;
poly = poly.expand();
cout << "Polynomial is " << poly
<< ", it is a sum of monomials: " << boolalpha << is_a<add>(poly) <<endl;
for (size_t i = 0; i != poly.nops(); ++i) { // Here poly is polynomial as above
ex subExpres=poly.op(i); // I get individual terms
cout << subExpres<< " is polynomial="<< is_polynomial(subExpres,x) ;
// GiNaC::ex pow2=pow(symb,2);
cout << " and degree=" << subExpres.degree(x) << endl;
}
}
return 0;
}
Best wishes,
Vladimir
--
Vladimir V. Kisil http://secure-web.cisco.com/1uavsA2G3CFg_3gcda5sStFEOvAflaJ2bvsS5fAGJLsvRhxmygxZpeJRcqg2QK_FVg34KGTN8REdXOdOooOeM8sgTWpZ3F67a-r3dX77zlhoiVmjogKWey3de4bHkriJs6vltoSgdKxnmVPR0q_Ciy5Yc8s7eUDeqz5rV8zpLyqHw7C6CzET3jV09f7-CfKMdNBBV1wIYsGFJcq3snZEYyonaLjZBVETNlCBifvTpvYyzGF5VGVLnOjgUg43ePKrNwYRJzHDL2LqYi2vnCvReRQ2yYcisllgfB6p2XaVaOApxnalBcI9HNzPeGWC5VyoF6psC0QWNquyN2LPh9zmQfht9vrx39ZgGFY0q9eBsWafhZyA7GjcOB4RciK_NThkyKIrQqs2y0tMsCz0f4uROcsslpK23m905FNZWgls-Zxyj3wn33HBUahBunSwQPFPw/http%3A%2F%2Fv-v-kisil.scienceontheweb.net
Book: Geometry of Mobius Maps https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdoi.org%2F10.1142%2Fp835&data=05%7C02%7Csjha2%40gmu.edu%7Cab75458dc71e4de789db08dc9b3b92f9%7C9e857255df574c47a0c00546460380cb%7C0%7C0%7C638555927388803258%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata=OY%2FslNRAJWreEeqwmKmcccmjoZKJoA%2FpqrqTdFEwvq0%3D&reserved=0<https://doi.org/10.1142/p835>
Soft: Geometry of cycles https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmoebinv.sourceforge.net%2F&data=05%7C02%7Csjha2%40gmu.edu%7Cab75458dc71e4de789db08dc9b3b92f9%7C9e857255df574c47a0c00546460380cb%7C0%7C0%7C638555927388811673%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata=JRxAoUu7GIaMuB8QzE6%2BKzj2Ou72VMoV3TjAaifZWXk%3D&reserved=0<http://moebinv.sourceforge.net/>
Jupyter notebooks: https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fvvkisil%3Ftab%3Drepositories&data=05%7C02%7Csjha2%40gmu.edu%7Cab75458dc71e4de789db08dc9b3b92f9%7C9e857255df574c47a0c00546460380cb%7C0%7C0%7C638555927388816616%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata=LGDJLxcJXIotHH%2FwrMMwQ37lWlA2EQcg1gvn3w0pfGk%3D&reserved=0<https://github.com/vvkisil?tab=repositories>
>>>>> On Wed, 3 Jul 2024 03:19:30 +0000, Santos Jha <sjha2 at gmu.edu> said:
SI> Greetings,
SI> I am new to GiNac. I was trying to use the degree function, but
SI> I got a weird result.
SI> My initial expression is
SI> -4*(-3+x)*(-1+x)+9/2*(-2+x)*(-1+x)+1/2*(-2+x)*(-3+x)
SI> After the "expand" function call, it returns
SI> 9/2*x^2-5/2*x-4*x^2+16*x-27/2*x+1/2*x^2
SI> My goal is to add/subtract the coefficient of equal degree
SI> terms. I could not find any function for that. ( if it is
SI> already there, please point me) I wanted to write a function to
SI> achieve it. To do so. I am taking each term and try to see if
SI> for (size_t i = 0; i != poly.nops(); ++i) { // Here poly is
SI> polynomial as above
SI> ex subExpres=poly.op(i); // I get individual terms
SI> cout << "is polynomial="<< is_polynomial(subExpres,symb) <<endl;
SI> // GiNaC::ex pow2=pow(symb,2); cout << subExpres<< " degree=" <<
SI> subExpres.degree(symb) << endl;
SI> }
SI> It determines the subexpression as a polynomial but can not
SI> determine the degree. E.g
SI> is polynomial=1 9/2*x^2 degree=0 // Here degree returned is
SI> wrong.
SI> Your thoughts will be appreciated. Regards, Santos
SI> ----------------------------------------------------
SI> Alternatives:
SI> ----------------------------------------------------
SI> _______________________________________________ GiNaC-list
SI> mailing list GiNaC-list at ginac.de
SI> https://secure-web.cisco.com/1W7ynipL-PtPXpNNCM8HaXVaflBXe5T6IsuNZG01-EjQ46nlW1KQgYXiDlPCSJ_dtrpcpYE-G1-aWiPc-PXi_V6ItAhj4t0vXSxiACgIo1xSacx78zQipu7HCrP0wbGGjFvCOCJvrxT-lnRljTV3oMQ8MLid7ALAUOSVtG38772FPluPMoU_LIA1rHb_CIPB8Mb5YKtEMincICyQoiBMs7UzsQsxSav45O1WlSdBCnz-6CYTOcQpRmMJkbngZpblNk4gOMZKi2RfVJ1k1vDYoPytTWhd9QIEshR2J45HiC5wfA-9GaJz8NxSS2cmE_ReERWgeUgyZrRXw0J1HaFppXQt9CqUmu_cdMPePOxT7wH1jxek0cP_1mfY-woY9T69Fg6OWFRP99PGliTHz0tPEuTiOP67hwV9TWy_b5Ir3i7OyE0bNLGlIDFRDis_D6ezY/https%3A%2F%2Fwww.ginac.de%2Fmailman%2Flistinfo%2Fginac-list
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ginac.de/pipermail/ginac-list/attachments/20240704/f9ddff38/attachment-0001.htm>
More information about the GiNaC-list
mailing list