epsilon - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim

Physics[FeynmanIntegral] - compute a Feynman integral, as the ones returned by the FeynmanDiagrams command, appearing in the expansion of the Scattering matrix in momentum representation

Physics[FeynmanIntegral][Evaluate] - evaluate, with options, the Feynman integrals, represented using the inert %FeynmanIntegral command, that appear in the expansion of the Scattering matrix in momentum representation

Physics[FeynmanIntegral][epsilon] - the same as 'FeynmanDiagrams:-epsilon', used to express the prescription to integrate in the complex p[0] plane circumventing the poles of the propagators

Physics[FeynmanIntegral][varepsilon] - represents the dimensional parameter used in the dimension regularization approach

Calling Sequence

FeynmanIntegral(integrand, [[X1], ... [Xn]])

FeynmanIntegral(integrand, [[p1], [p2], ... [pn]], options)

FeynmanIntegral(integrand, p1, options)

Evaluate(expression, options)




the integrand that appears in the expansion of the Scattering matrix S=1+S1+S2+... in coordinates representation, or its matrix elements f|S|i in momentum representation, in which case loop momentum integration variables are of the form p__n and external momenta are of the form P__n, where n is an integer.

[[X1], ... [Xn]]


a list of lists, here each Xj is a symbol starting with a Capital letter followed by an integer j, as a label representing a coordinates system; it can also be one set using Setup or Coordinates. In this case the integral is in coordinates representation and displayed with a preceding factor inn!, where n is the order of Sn in the expansion of S.

[[p1], ... [pn]]


a list of lists, where each pj is a symbol of the form p__n where n is an integer and it represents the name of a momentum tensor, automatically defined as such when the integral appears in the output of FeynmanDiagrams. In this case, the integral is in momentum representation and has no preceding factor. Instead of a list of lists, this second argument can also be a single p__n.



any algebraic expression, or a set or list of them, typically the output of FeynmanDiagrams, that includes Feynman integrals represented in inert form, with the %FeynmanIntegral command



dimension = ... : the dimension of spacetime around which dimensional regularization is performed. Default value is the dimension indicated by Physics:−Setupdimension


expanddimension = ... : the right-hand side can be true or false (default), to expand the result in series up to order Oϵ before returning it. The ϵ = FeynmanIntegral:-varepsilon is the dimensional parameter, and the integration is performed at dimension d=Physics:−Setupdimension2ϵ, and be default Physics:−Setupdimension=4.


feynmanparametersintegrated = ... : the right-hand side can be true or false (default), to return right after the Feynman parameters are integrated. This option does not work with alpha parameters.


kindofparameters = ... : the kind of auxiliary parameters - Feynman (default) or α - used to parametrize Feynman integrals.


loopmomentumintegrated = ... : the right-hand side can be true or false (default), to return right after the loop momentum integration is performed. This option does not work with alpha parameters.


mbrepresentation = ... : the right-hand side can be true or false (default), to return right after the Mellin Barnes representation of the Feynman integral is constructed. This option does not work with alpha parameters.


parametrizedform = ... : the right-hand side can be true or false (default), to return the parametrized form after swapping the order of integration: first the loop momentum, then the Feynman or alpha parameters.


quiet = ... : the right-hand side can be true or false (default), to display or not information related to matching keywords


shiftedform = ... : the right-hand side can be true or false (default), to return right after the shift of the loop momentum variable is performed and before performing the Wick rotation. This option does not work with alpha parameters.


wickrotated = ... : the right-hand side can be true or false (default), to return right after the performing the Wick rotation, before performing the momentum integration. This option does not work with alpha parameters.


NOTE: the optional keywords that can have the value true on the right-hand side can be passed just as themselves, not as an equation, representing the value true. For example quiet is the same as quiet = true. Also, you don't need to use the exact spelling of any of these keywords - any unambiguous portion of them suffices, e.g. shifted for shiftedform.



A scattering matrix S relates the initial and final states, i and f, of an interacting system. In an N-dimensional spacetime with coordinates X, S can be written as:



where i is the imaginary unit and L is the interaction Lagrangian, written in terms of quantum fields depending on the spacetime coordinates X. The T symbol means time-ordered. For the terminology used in this page, see for instance chapters IV and V, "The Scattering Matrix" and "The Feynman Rules and Diagrams", in ref.[1]. This exponential can be expanded as






and TLX1,...,LXn is the time-ordered product of n interaction Lagrangians evaluated at different points. Note the factor inn! in this definition of Sn used here.


The FeynmanIntegral(integrand, [[X1], [X2], ... [Xn]]) command is thus a computational representation for Sn in coordinates representation. Note the factor inn! included in the definition used here for Sn. That factor is automatically displayed when the second argument, [[X1], [X2], ... [Xn]], is a list of lists of coordinate systems. For details on the algebraic structure of integrand see FeynmanDiagrams.


The FeynmanIntegral(integrand, [[p1], [p2], ... [pn]]) command, where [[p1], [p2], ... [pn]] is a list of lists of spacetime tensors pj, of the form p__n, is a computational representation for the integrals in momentum representation that enter the S-matrix elements f|S|i with initial and final states i and f, respectively with s initial particles with defined momentum pi and r final particles with defined momentum pf.


The conventions for representing external and internal (loop integration) momenta are, respectively, that they are symbols of the form P__n and p__n, where n is an integer.


In addition to representing the integral, when working in momentum representation, the command FeynmanIntegral(integrand, [[p1], [p2], ... [pn]]) actually computes the integral, by first introducing Feynman parameters then performing the loop integral using dimensional regularization, using FeynmanIntegral:-Evaluate (see the Examples section).


The Evaluate command also provides a way to investigate the different steps of the computation of a Feynman integral, something of interest in general and also for the case where some of the steps cannot be performed automatically.


Both Evaluate and FeynmanIntegral can compute tensor Feynman integrals by first reducing them to scalar integrals using TensorReduce, as shown in the last example.


In both coordinates and momentum representation, to each element in the list of lists of the second argument in FeynmanIntegral(integrand, [[..], [..], ... [..]]) corresponds a 4-dimensional integral, and the number of elements in that list of lists indicates the number of vertices of the Feynman diagrams corresponding to the Feynman integral.


To obtain the S-matrix elements f|S|i in momentum representation for each Sn entering the expansion of S in coordinates representation see sec. 20.1 of ref.[1].


The inert form of this command, %FeynmanIntegral, is used by the FeynmanDiagrams command to represent each Sj entering S=1+S1+...+Sn in coordinates representation, as well as the integrals in momentum representation entering f|S|i. For details on the algebraic structure of integrand in both representations see FeynmanDiagrams.


Load the package, set three coordinate systems and set φ to represent a quantum operator


Setup(mathematicalnotation = true, coordinates = [X, Y, Z], quantumoperators = phi);

Systems of spacetime coordinates are:X=x1,x2,x3,x4,Y=y1,y2,y3,y4,Z=z1,z2,z3,z4




Let L be the interaction Lagrangian

L := lambda*phi(X)^4;



The 2nd term of the expansion S=1+S1+S2+... in coordinates representation is represented using the inert form of the FeynmanIntegral command. All the corresponding Feynman diagrams contain two vertices

S[2] = FeynmanDiagrams(L, numberofvertices = 2, diagrams);

S2=I22!72λ2φX2φY2φX,φY2+16λ2φX3φY3φX,φY+96λ2φXφYφX,φY3ⅆX 4ⅆY 4


From the diagrams above, the possible configurations involve 2, 4 or 6 external legs, with respectively 2, 1 and 0 loops. To get the Feynman integral with the configuration that has only n external legs use the numberofexternallegs option of FeynmanDiagrams

%eval(S[2], legs = 2) = FeynmanDiagrams(L, numberofvertices = 2, numberofexternallegs = 2);

S2legs=2|S2legs=2=I22!96λ2φXφYφX,φY3ⅆX 4ⅆY 4


Corresponding to this result, one possible specific process involving 2 external legs is that where there is an initial state i with 1 incoming particle, and a final state f with 1 outgoing particle. The S-matrix element f|S|i for that process is expressed in terms of a FeynmanIntegral in momentum representation via

%eval(%Bracket(f, S[2], i), loops = 2)  = FeynmanDiagrams(L, incomingparticles = [phi], outgoingparticles = [phi], numberofloops = 2);

f|S2|iloops=2|f|S2|iloops=2=3I8λ2δP__2+P__1π7E__1E__2P__1+p__2+p__32m__φ2+Iεp__22m__φ2+Iεp__32m__φ2+Iεⅆp__2 4ⅆp__3 4


The Feynman integrals, whose corresponding diagrams have 3 loops, for the same process φφ

%eval(%Bracket(f, S[2], i), loops = 3) = FeynmanDiagrams(L, incomingparticles = [phi], outgoingparticles = [phi], numberofloops = 3);

f|S2|iloops=3|f|S2|iloops=3=9λ3δP__2+P__132π11E__1E__2p__3+p__4+p__52m__φ2+IεP__1+P__2p__3p__4p__52m__φ2+Iεp__32m__φ2+Iεp__42m__φ2+Iεp__52m__φ2+Iεⅆp__3 4ⅆp__4 4ⅆp__5 4+29λ3δP__2+P__132π11E__1E__2P__2+p__4+p__52m__φ2+IεP__1+P__2p__3p__4p__52m__φ2+Iεp__32m__φ2+Iεp__42m__φ2+Iεp__52m__φ2+Iεⅆp__3 4ⅆp__4 4ⅆp__5 4+9λ3δP__2+P__132π11E__1E__2P__1p__2+P__2p__4p__52m__φ2+Iεp__22m__φ2+IεP__2+p__4+p__52m__φ2+Iεp__42m__φ2+Iεp__52m__φ2+Iεⅆp__2 4ⅆp__4 4ⅆp__5 4


To evaluate these integrals, you can use the FeynmanIntegral:-Evaluate command, or just activate the inert integrals using value. For these purposes, load the FeynmanIntegral package




As a simple example, consider this integral, shown as formula 4 in ref [1], Appendix A

%FeynmanIntegral(1/(-m^2+p__1^2+I*epsilon)/(p__1^2+I*epsilon), p__1);

1m2+p__12+Iεp__12+Iεⅆp__1 4





Comparing with the result shown in [1]

Pi^(2 - varepsilon)*I*GAMMA(varepsilon)*GAMMA(1 - varepsilon)*1/GAMMA(2 - varepsilon)*1/(m^2)^varepsilon;



This book's result is the same as the one obtained using Evaluate:

simplify((10) - (9));



In (9) above, we see the dimensional parameter ϵ. To expand the dimension around ϵ keeping terms of order less than 1, pass to Evaluate the optional argument expanddimension, or use




Alternatively, you can use the expanddimension option of Evaluate, in which case all the Feynman integrals found in the first argument (in this example only one) will be automatically expanded with regards to the spacetime dimension

Evaluate((8), expanddimension);



This is the essence of the dimensional regularization approach, where the integral is computed in dimension d=42ϵ, then the result splits into a finite and infinite part when ϵ0.

An example departing from an interaction Lagrangian

L := lambda*phi(X)^3;



A process with one incoming and one outgoing particle a 1-loop

FeynmanDiagrams(L, incomingparticles = [phi], outgoingparticles = [phi], numberofloops = 1, diagrams);

9λ2δP__2+P__18π3E__1E__2P__1+p__22m__φ2+Iεp__22m__φ2+Iεⅆp__2 4


To Parametrize this Feynman integral using Feynman parameters, use



To evaluate the integral you can use Evaluate. For illustration purposes, we tackle this example all the way step by step using the optional arguments of Evaluate, and at the end we perform all the steps in one go via Evaluate((14)).

The first step is parametrizing the integral, resulting in the same returned by Parametrize above but switching the integration order between the loop momentum and the Feynman parameters

Evaluate((15), parametrizedform);


Expanding the denominator, it has a term linear in the loop integration variable p2. The next step then is to complete the square and perform a change of variables shifting p2. This step makes possible a Wick rotation in the next step. The shifted form is

Evaluate((15), shiftedform);


The Wick rotation allows for splitting the integral over the loop momentum into a radial and an angular part in d-dimensions; the Wick rotated form is

Evaluate((15), wickrotated);


The inner integral in d-dimensions is now split into the integral of the solid angle, which is straightforward, and the radial part that can be computed systematically, resulting in

Evaluate((15), loopmomentumintegrated);


At this point a Mellin Barnes representation is constructed

Evaluate((15), mbrepresentation);



In this Mellin Barnes representation, the integration of the Feynman parameters is now straightforward

Evaluate((15), feynmanparametersintegrated);



The last step in the integration process involves performing the integral over the Mellin Barnes parameters which can be computed using residues, basically transforming the integral into a sum. So all the steps in one go results in




To expand the dimension around ϵ keeping terms of order less than 1, use




Both Evaluate and FeynmanIntegral can compute tensor Feynman integrals (with occurrences of the loop momentum with free spacetime indices in the numerator) by first reducing them to scalar integrals using TensorReduce. Consider for instance

%FeynmanIntegral(p__1[~mu]/((p__1^2 - m__phi^2 + i * epsilon)*((p__1 - P__1)^2 - m__1^2 + i * epsilon)), p__1);

p__1μμiεm__φ2+p__12p__1P__12m__12+iεⅆp__1 4


The reduction of this tensor integral to a linear combination of scalar Feynman integrals is given by:


m__12m__φ2P__1·P__11p__12m__φ2+Iεp__1P__12m__12+Iεⅆp__1 4+1p__12m__φ2+Iεⅆp__1 41p__1P__12m__12+Iεⅆp__1 4P__1μμ2P__1·P__1


Note that, by design, the reduction process using TensorReduce does not evaluate the integrals so that one can follow the steps clearly using the command's optional arguments. TensorReduce is automatically called by Evaluate and FeynmanIntegral when the integral is tensorial, so the whole process can be performed in one go:




See Also

Dgamma, DiracConjugate, ExpandDimension, FeynmanDiagrams, FeynmanIntegral[Overview], Parametrize, Physics, Physics conventions, Physics examples, Physics Updates, Tensors - a complete guide, Mini-Course Computer Algebra for Physicists, Setup, StandardModel, TensorReduce



[1] Smirnov, V.A., Feynman Integral Calculus. Springer, 2006.


[2] Weinberg, S., The Quantum Theory Of Fields. Cambridge University Press, 2005.


[3] Bogoliubov, N.N., and Shirkov, D.V. Quantum Fields. Benjamin Cummings, 1982.



The Physics[FeynmanIntegral], Physics[FeynmanIntegral][Evaluate], Physics[FeynmanIntegral][epsilon] and Physics[FeynmanIntegral][varepsilon] commands were introduced in Maple 2021.


For more information on Maple 2021 changes, see Updates in Maple 2021.