[GiNaC-list] subs does not work

Richard B. Kreckel kreckel at ginac.de
Thu Feb 21 08:21:44 CET 2013


On 02/21/2013 04:42 AM, Zhao Li wrote:
> Here I am trying to make a substitution. For testing, the function "has" works as shown below. But the "subs" just does not implement the substitution.
>
>    cout << has(temp, JF1(wild(1), GA(wild(5)), wild(2))*JF1(wild(3), GA(wild(5)), wild(4)) , has_options::algebraic ) << endl;
>    cout << temp.subs( JF1(wild(1),GA(wild(5)),wild(2))*JF1(wild(3),GA(wild(5)),wild(4)) == 2, subs_options::algebraic ) << endl;
>
> The functions "JF1" and "GA" are both declared using DECLARE_FUNCTION and commutative.
>
> DECLARE_FUNCTION_1P( GA );
> REGISTER_FUNCTION( GA, dummy() );

$ cat zhaoli.cc
#include <iostream>
#include <ginac/ginac.h>
using namespace std;
using namespace GiNaC;

DECLARE_FUNCTION_1P( GA );
REGISTER_FUNCTION( GA, dummy() );

DECLARE_FUNCTION_3P( JF1 );
REGISTER_FUNCTION( JF1, dummy() );

int main()
{
     symbol a("a");
     symbol b("b");
     symbol t("t");
     symbol x("x");
     symbol y("y");
     ex temp = JF1(a, GA(t), b)*JF1(x, GA(t), y);
     cout << temp << endl;
     cout << temp.has( JF1(wild(1), GA(wild(5)), wild(2)) *
                       JF1(wild(3), GA(wild(5)), wild(4)),
                       has_options::algebraic ) << endl;
     cout << temp.subs(JF1(wild(1), GA(wild(5)), wild(2)) *
                       JF1(wild(3), GA(wild(5)), wild(4)) == 2,
                       subs_options::algebraic ) << endl;
}
$ g++ zhaoli.cc -lginac
$./a.out
JF1(a,GA(t),b)*JF1(x,GA(t),y)
1
2

Cheers
   -richy.
-- 
Richard B. Kreckel



More information about the GiNaC-list mailing list