Skip to content

Instantly share code, notes, and snippets.

@raydsameshima
Last active November 30, 2023 17:05
Show Gist options
  • Save raydsameshima/75580ba9ff51a154153cd24af5c882d7 to your computer and use it in GitHub Desktop.
Save raydsameshima/75580ba9ff51a154153cd24af5c882d7 to your computer and use it in GitHub Desktop.
(%i1) load("Schwinger.mac");
The list of functions:
schwinger_matrix(list_of_loop_momenta, list_of_denominators)
symanzik_u(ls,ds)
symanzik_f(ls,ds)
lee_pomeransky_g(ls,ds)
homogeneous_lee_pomeransky_g(ls,ds)
As helper functions, the following functions are used:
det_but_outer_egdes(matrix)
lee_pomeransky_g_from_matrix(schwinger_matrix)
schwinger_parameters(ds)
schwinger_exponents(ds)
at_zero(ls)
c_of_schwinger_matrix(ls,ds)
b_of_schwinger_matrix(ls,ds)
a_of_schwinger_matrix_(ls,ds)
a_of_schwinger_matrix(ls,ds)
(%o0) Schwinger.mac
(%i1) ls: [l1,l2]; ds:[l1^2+m^2, l2^2+m^2, (l1+l2+p)^2+m^2, (l1+p)^2+m^2, (l1+l2)^2+m^2];
(%o1) [l1, l2]
2 2 2 2 2 2 2 2
(%o2) [m + l1 , m + l2 , (p + l2 + l1) + m , (p + l1) + m ,
2 2
m + (l2 + l1) ]
(%i3) lee_pomeransky_g(ls,ds), expand;
2 2 2 2 2 2 2 2 2
(%o3) m x4 x5 + m x2 x5 + m x1 x5 + m x4 x5 + p x3 x4 x5
2 2 2 2 2
+ 2 m x3 x4 x5 + p x2 x4 x5 + 3 m x2 x4 x5 + p x1 x4 x5 + 2 m x1 x4 x5
2 2 2 2
+ x4 x5 + p x2 x3 x5 + 2 m x2 x3 x5 + p x1 x3 x5 + 2 m x1 x3 x5
2 2 2 2 2 2 2
+ m x2 x5 + 3 m x1 x2 x5 + x2 x5 + m x1 x5 + x1 x5 + m x3 x4
2 2 2 2 2 2 2
+ m x2 x4 + m x3 x4 + 3 m x2 x3 x4 + p x1 x3 x4 + 2 m x1 x3 x4 + x3 x4
2 2 2 2 2 2 2 2
+ m x2 x4 + p x1 x2 x4 + 2 m x1 x2 x4 + x2 x4 + m x2 x3 + m x1 x3
2 2 2 2 2 2
+ m x2 x3 + p x1 x2 x3 + 3 m x1 x2 x3 + x2 x3 + m x1 x3 + x1 x3
2 2 2 2
+ m x1 x2 + m x1 x2 + x1 x2
(%i4) define(g(x1,x2,x3,x4,x5), %);
2 2 2 2 2 2 2 2
(%o4) g(x1, x2, x3, x4, x5) := m x4 x5 + m x2 x5 + m x1 x5 + m x4 x5
2 2 2 2 2
+ p x3 x4 x5 + 2 m x3 x4 x5 + p x2 x4 x5 + 3 m x2 x4 x5 + p x1 x4 x5
2 2 2 2
+ 2 m x1 x4 x5 + x4 x5 + p x2 x3 x5 + 2 m x2 x3 x5 + p x1 x3 x5
2 2 2 2 2 2
+ 2 m x1 x3 x5 + m x2 x5 + 3 m x1 x2 x5 + x2 x5 + m x1 x5 + x1 x5
2 2 2 2 2 2 2 2
+ m x3 x4 + m x2 x4 + m x3 x4 + 3 m x2 x3 x4 + p x1 x3 x4
2 2 2 2 2
+ 2 m x1 x3 x4 + x3 x4 + m x2 x4 + p x1 x2 x4 + 2 m x1 x2 x4 + x2 x4
2 2 2 2 2 2 2 2
+ m x2 x3 + m x1 x3 + m x2 x3 + p x1 x2 x3 + 3 m x1 x2 x3 + x2 x3
2 2 2 2 2 2
+ m x1 x3 + x1 x3 + m x1 x2 + m x1 x2 + x1 x2
(%i5) g2(x1,x2,x3,x4,x5): expand(lee_pomeransky_g(ls, [(-p-l1)^2+m^2, (l1+l2)^2+m^2, l2^2+m^2, l1^2+m^2, (p+l2)^2+m^2]));
assignment: cannot assign to g2(x1, x2, x3, x4, x5)
-- an error. To debug this try: debugmode(true);
(%i6) g2(x1,x2,x3,x4,x5):= expand(lee_pomeransky_g(ls, [(-p-l1)^2+m^2, (l1+l2)^2+m^2, l2^2+m^2, l1^2+m^2, (p+l2)^2+m^2]));
(%o6) g2(x1, x2, x3, x4, x5) := expand(lee_pomeransky_g(ls,
2 2 2 2 2 2 2 2 2 2
[((- p) - l1) + m , (l1 + l2) + m , l2 + m , l1 + m , (p + l2) + m ]))
(%i7) g2(x1,x2,x3,x4,x5);
2 2 2 2 2 2 2 2 2
(%o7) m x4 x5 + m x2 x5 + m x1 x5 + m x4 x5 + p x3 x4 x5
2 2 2 2 2
+ 2 m x3 x4 x5 + p x2 x4 x5 + 3 m x2 x4 x5 + p x1 x4 x5 + 2 m x1 x4 x5
2 2 2 2
+ x4 x5 + p x2 x3 x5 + 2 m x2 x3 x5 + p x1 x3 x5 + 2 m x1 x3 x5
2 2 2 2 2 2
+ m x2 x5 + 4 p x1 x2 x5 + 3 m x1 x2 x5 + x2 x5 + m x1 x5 + x1 x5
2 2 2 2 2 2 2 2
+ m x3 x4 + m x2 x4 + m x3 x4 + 3 m x2 x3 x4 + p x1 x3 x4
2 2 2 2 2
+ 2 m x1 x3 x4 + x3 x4 + m x2 x4 + p x1 x2 x4 + 2 m x1 x2 x4 + x2 x4
2 2 2 2 2 2 2 2
+ m x2 x3 + m x1 x3 + m x2 x3 + p x1 x2 x3 + 3 m x1 x2 x3 + x2 x3
2 2 2 2 2 2
+ m x1 x3 + x1 x3 + m x1 x2 + m x1 x2 + x1 x2
(%i8) (g(x1,x2,x3,x4,x5);
incorrect syntax: Missing )
(g(x1,x2,x3,x4,x5);
^
(%i8) g(x1,x2,x3,x4,x5);
2 2 2 2 2 2 2 2 2
(%o8) m x4 x5 + m x2 x5 + m x1 x5 + m x4 x5 + p x3 x4 x5
2 2 2 2 2
+ 2 m x3 x4 x5 + p x2 x4 x5 + 3 m x2 x4 x5 + p x1 x4 x5 + 2 m x1 x4 x5
2 2 2 2
+ x4 x5 + p x2 x3 x5 + 2 m x2 x3 x5 + p x1 x3 x5 + 2 m x1 x3 x5
2 2 2 2 2 2 2
+ m x2 x5 + 3 m x1 x2 x5 + x2 x5 + m x1 x5 + x1 x5 + m x3 x4
2 2 2 2 2 2 2
+ m x2 x4 + m x3 x4 + 3 m x2 x3 x4 + p x1 x3 x4 + 2 m x1 x3 x4 + x3 x4
2 2 2 2 2 2 2 2
+ m x2 x4 + p x1 x2 x4 + 2 m x1 x2 x4 + x2 x4 + m x2 x3 + m x1 x3
2 2 2 2 2 2
+ m x2 x3 + p x1 x2 x3 + 3 m x1 x2 x3 + x2 x3 + m x1 x3 + x1 x3
2 2 2 2
+ m x1 x2 + m x1 x2 + x1 x2
(%i9) g2(x1,x2,x3,x4,x5);
2 2 2 2 2 2 2 2 2
(%o9) m x4 x5 + m x2 x5 + m x1 x5 + m x4 x5 + p x3 x4 x5
2 2 2 2 2
+ 2 m x3 x4 x5 + p x2 x4 x5 + 3 m x2 x4 x5 + p x1 x4 x5 + 2 m x1 x4 x5
2 2 2 2
+ x4 x5 + p x2 x3 x5 + 2 m x2 x3 x5 + p x1 x3 x5 + 2 m x1 x3 x5
2 2 2 2 2 2
+ m x2 x5 + 4 p x1 x2 x5 + 3 m x1 x2 x5 + x2 x5 + m x1 x5 + x1 x5
2 2 2 2 2 2 2 2
+ m x3 x4 + m x2 x4 + m x3 x4 + 3 m x2 x3 x4 + p x1 x3 x4
2 2 2 2 2
+ 2 m x1 x3 x4 + x3 x4 + m x2 x4 + p x1 x2 x4 + 2 m x1 x2 x4 + x2 x4
2 2 2 2 2 2 2 2
+ m x2 x3 + m x1 x3 + m x2 x3 + p x1 x2 x3 + 3 m x1 x2 x3 + x2 x3
2 2 2 2 2 2
+ m x1 x3 + x1 x3 + m x1 x2 + m x1 x2 + x1 x2
(%i10) g2(x1,x2,x3,x4,x5) - g(x1,x2,x3,x4,x5);
2
(%o10) 4 p x1 x2 x5
(%i11) ls: [l1,l2]; ds1:[l1^2+m^2, l2^2+m^2, (l1+l2+p)^2+m^2, (l1+p)^2+m^2, (l1+l2)^2+m^2];
(%o11) [l1, l2]
2 2 2 2 2 2 2 2
(%o12) [m + l1 , m + l2 , (p + l2 + l1) + m , (p + l1) + m ,
2 2
m + (l2 + l1) ]
(%i13) g1: expand(lee_pomeransky_g(ls,ds1));
2 2 2 2 2 2 2 2 2
(%o13) m x4 x5 + m x2 x5 + m x1 x5 + m x4 x5 + p x3 x4 x5
2 2 2 2 2
+ 2 m x3 x4 x5 + p x2 x4 x5 + 3 m x2 x4 x5 + p x1 x4 x5 + 2 m x1 x4 x5
2 2 2 2
+ x4 x5 + p x2 x3 x5 + 2 m x2 x3 x5 + p x1 x3 x5 + 2 m x1 x3 x5
2 2 2 2 2 2 2
+ m x2 x5 + 3 m x1 x2 x5 + x2 x5 + m x1 x5 + x1 x5 + m x3 x4
2 2 2 2 2 2 2
+ m x2 x4 + m x3 x4 + 3 m x2 x3 x4 + p x1 x3 x4 + 2 m x1 x3 x4 + x3 x4
2 2 2 2 2 2 2 2
+ m x2 x4 + p x1 x2 x4 + 2 m x1 x2 x4 + x2 x4 + m x2 x3 + m x1 x3
2 2 2 2 2 2
+ m x2 x3 + p x1 x2 x3 + 3 m x1 x2 x3 + x2 x3 + m x1 x3 + x1 x3
2 2 2 2
+ m x1 x2 + m x1 x2 + x1 x2
(%i14) ds2: [(l1+p)^2+m^2, (l1+l2)^2+m^2, l2^2+m^2, l1^2+m^2, (p+l2)^2+m^2];
2 2 2 2 2 2 2 2 2 2
(%o14) [(p + l1) + m , m + (l2 + l1) , m + l2 , m + l1 , (p + l2) + m ]
(%i15) g2: expand(lee_pomeransky_g(ls,ds2));
2 2 2 2 2 2 2 2 2
(%o15) m x4 x5 + m x2 x5 + m x1 x5 + m x4 x5 + p x3 x4 x5
2 2 2 2 2
+ 2 m x3 x4 x5 + p x2 x4 x5 + 3 m x2 x4 x5 + p x1 x4 x5 + 2 m x1 x4 x5
2 2 2 2
+ x4 x5 + p x2 x3 x5 + 2 m x2 x3 x5 + p x1 x3 x5 + 2 m x1 x3 x5
2 2 2 2 2 2
+ m x2 x5 + 4 p x1 x2 x5 + 3 m x1 x2 x5 + x2 x5 + m x1 x5 + x1 x5
2 2 2 2 2 2 2 2
+ m x3 x4 + m x2 x4 + m x3 x4 + 3 m x2 x3 x4 + p x1 x3 x4
2 2 2 2 2
+ 2 m x1 x3 x4 + x3 x4 + m x2 x4 + p x1 x2 x4 + 2 m x1 x2 x4 + x2 x4
2 2 2 2 2 2 2 2
+ m x2 x3 + m x1 x3 + m x2 x3 + p x1 x2 x3 + 3 m x1 x2 x3 + x2 x3
2 2 2 2 2 2
+ m x1 x3 + x1 x3 + m x1 x2 + m x1 x2 + x1 x2
(%i16) g1-g2;
2
(%o16) - 4 p x1 x2 x5
(%i17) ds2: [(l1-p)^2+m^2, (l1+l2)^2+m^2, l2^2+m^2, l1^2+m^2, (p+l2)^2+m^2];
2 2 2 2 2 2 2 2 2 2
(%o17) [(l1 - p) + m , m + (l2 + l1) , m + l2 , m + l1 , (p + l2) + m ]
(%i18) g2: expand(lee_pomeransky_g(ls,ds2));
2 2 2 2 2 2 2 2 2
(%o18) m x4 x5 + m x2 x5 + m x1 x5 + m x4 x5 + p x3 x4 x5
2 2 2 2 2
+ 2 m x3 x4 x5 + p x2 x4 x5 + 3 m x2 x4 x5 + p x1 x4 x5 + 2 m x1 x4 x5
2 2 2 2
+ x4 x5 + p x2 x3 x5 + 2 m x2 x3 x5 + p x1 x3 x5 + 2 m x1 x3 x5
2 2 2 2 2 2 2
+ m x2 x5 + 3 m x1 x2 x5 + x2 x5 + m x1 x5 + x1 x5 + m x3 x4
2 2 2 2 2 2 2
+ m x2 x4 + m x3 x4 + 3 m x2 x3 x4 + p x1 x3 x4 + 2 m x1 x3 x4 + x3 x4
2 2 2 2 2 2 2 2
+ m x2 x4 + p x1 x2 x4 + 2 m x1 x2 x4 + x2 x4 + m x2 x3 + m x1 x3
2 2 2 2 2 2
+ m x2 x3 + p x1 x2 x3 + 3 m x1 x2 x3 + x2 x3 + m x1 x3 + x1 x3
2 2 2 2
+ m x1 x2 + m x1 x2 + x1 x2
(%i19) g1-g2;
(%o19) 0
(%i20) ? subst
-- Function: subst (<a>, <b>, <c>)
Substitutes <a> for <b> in <c>. <b> must be an atom or a complete
subexpression of <c>. For example, 'x+y+z' is a complete
subexpression of '2*(x+y+z)/w' while 'x+y' is not. When <b> does
not have these characteristics, one may sometimes use 'substpart'
or 'ratsubst' (see below). Alternatively, if <b> is of the form
'e/f' then one could use 'subst (a*f, e, c)' while if <b> is of the
form 'e^(1/f)' then one could use 'subst (a^f, e, c)'. The 'subst'
command also discerns the 'x^y' in 'x^-y' so that 'subst (a,
sqrt(x), 1/sqrt(x))' yields '1/a'. <a> and <b> may also be
operators of an expression enclosed in double-quotes '"' or they
may be function names. If one wishes to substitute for the
independent variable in derivative forms then the 'at' function
(see below) should be used.
'subst' is an alias for 'substitute'.
The commands 'subst (<eq_1>, <expr>)' or 'subst ([<eq_1>, ...,
<eq_k>], <expr>)' are other permissible forms. The <eq_i> are
equations indicating substitutions to be made. For each equation,
the right side will be substituted for the left in the expression
<expr>. The equations are substituted in serial from left to right
in <expr>. See the functions 'sublis' and 'psubst' for making
parallel substitutions.
'exptsubst' if 'true' permits substitutions like 'y' for '%e^x' in
'%e^(a*x)' to take place.
When 'opsubst' is 'false', 'subst' will not attempt to substitute
into the operator of an expression. E.g. '(opsubst: false, subst
(x^2, r, r+r[0]))' will work.
See also 'at', 'ev' and 'psubst', as well as 'let' and 'letsimp'.
Examples:
(%i1) subst (a, x+y, x + (x+y)^2 + y);
2
(%o1) y + x + a
(%i2) subst (-%i, %i, a + b*%i);
(%o2) a - %i b
The substitution is done in serial for a list of equations.
Compare this with a parallel substitution:
(%i1) subst([a=b, b=c], a+b);
(%o1) 2 c
(%i2) sublis([a=b, b=c], a+b);
(%o2) c + b
Single-character Operators like '+' and '-' have to be quoted in
order to be replaced by subst. It is to note, though, that 'a+b-c'
might be expressed as 'a+b+(-1*c)' internally.
(%i3) subst(["+"="-"],a+b-c);
(%o3) c-b+a
The difference between 'subst' and 'at' can be seen in the
following example:
(%i1) g1:y(t)=a*x(t)+b*diff(x(t),t);
d
(%o1) y(t) = b (-- (x(t))) + a x(t)
dt
(%i2) subst('diff(x(t),t)=1,g1);
(%o2) y(t) = a x(t) + b
(%i3) at(g1,'diff(x(t),t)=1);
!
d !
(%o3) y(t) = b (-- (x(t))! ) + a x(t)
dt !d
!-- (x(t)) = 1
dt
For further examples, do 'example (subst)'.
There are also some inexact matches for `subst'.
Try `?? subst' to see them.
(%o20) true
(%i21) ? psubst
-- Function: psubst
psubst (<list>, <expr>)
psubst (<a>, <b>, <expr>)
'psubst(<a>, <b>, <expr>)' is simliar to 'subst'. See 'subst'.
In distinction from 'subst' the function 'psubst' makes parallel
substitutions, if the first argument <list> is a list of equations.
See also 'sublis' for making parallel substitutions and 'let' and
'letsimp' for others ways to do substitutions.
Example:
The first example shows parallel substitution with 'psubst'. The
second example shows the result for the function 'subst', which
does a serial substitution.
(%i1) psubst ([a^2=b, b=a], sin(a^2) + sin(b));
(%o1) sin(b) + sin(a)
(%i2) subst ([a^2=b, b=a], sin(a^2) + sin(b));
(%o2) 2 sin(a)
There are also some inexact matches for `psubst'.
Try `?? psubst' to see them.
(%o21) true
(%i22) g1- psubst([x1=x4, x4=x1, x3=x5,x5=x3], g1);
(%o22) 0
(%i23) g1- psubst([x1=x4, x4=x1], g1);
2 2 2 2
(%o23) p x2 x4 x5 - p x1 x2 x5 - p x2 x3 x4 + p x1 x2 x3
(%i24) g1- psubst([x1=x5, x5=x1, x3=x4,x4=x3], g1);
(%o24) 0
(%i1) ls: [l1,l2]; ds1:[l1^2+m^2, l2^2+m^2, (l1+l2+p)^2+m^2, (l1+p)^2+m^2, (l1+l2)^2+m^2];
(%o1) [l1, l2]
2 2 2 2 2 2 2 2
(%o2) [m + l1 , m + l2 , (p + l2 + l1) + m , (p + l1) + m ,
2 2
m + (l2 + l1) ]
(%i3) ds2: [(l1-p)^2+m^2, (l1+l2)^2+m^2, l2^2+m^2, l1^2+m^2, (p+l2)^2+m^2];
2 2 2 2 2 2 2 2 2 2
(%o3) [(l1 - p) + m , m + (l2 + l1) , m + l2 , m + l1 , (p + l2) + m ]
(%i4) schwinger_matrix (ls,ds1);
[ x5 + x4 + x3 + x1 ] [ x5 + x3 ]
[ ] [ ]
(%o4) Col 1 = [ x5 + x3 ] Col 2 = [ x5 + x3 + x2 ]
[ ] [ ]
[ p x4 + p x3 ] [ p x3 ]
[ p x4 + p x3 ]
[ ]
Col 3 = [ p x3 ]
[ ]
[ 2 2 2 2 2 2 2 ]
[ m x5 + p x4 + m x4 + p x3 + m x3 + m x2 + m x1 ]
(%i5) schwinger_matrix (ls,ds2);
[ x4 + x2 + x1 ] [ x2 ]
[ ] [ ]
(%o5) Col 1 = [ x2 ] Col 2 = [ x5 + x3 + x2 ]
[ ] [ ]
[ - p x1 ] [ p x5 ]
[ - p x1 ]
[ ]
Col 3 = [ p x5 ]
[ ]
[ 2 2 2 2 2 2 2 ]
[ p x5 + m x5 + m x4 + m x3 + m x2 + p x1 + m x1 ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment