Wolfram Function Repository
Instant-use add-on functions for the Wolfram Language
Function Repository Resource:
Solve integral equations of the thermodynamic Bethe ansatz type
ResourceFunction["ThermodynamicBetheAnsatzSolve"][eqn] solves a TBA equation. | |
ResourceFunction["ThermodynamicBetheAnsatzSolve"][eqn,y] solves a TBA and returns the value of the solution. | |
ResourceFunction["ThermodynamicBetheAnsatzSolve"][{eqn1,eqn2, …}] solves a system of TBA equations. | |
ResourceFunction["ThermodynamicBetheAnsatzSolve"][{eqn1,eqn2, …},{y1,y2,…}] solves a system of TBA equations and returns the specified solutions values. |
"BoundaryCondition" | {0,0} | add boundary terms outside and inside the convolutions |
"GridCutoff" | Automatic | specify the cutoff range of the numeric grid |
"GridResolution" | 2^10 | specify the resolution of the numeric grid |
"StoppingAccuracy" | 10^(-10) | stop iterations when the numeric iteration error is lower than this value |
MaxIterations | 4000 | always stop iterations beyond this value |
"MonitorIterations" | False | monitor the number of iterations |
"SaveMemory" | False | minimize caching to save memory |
Solve a single non-linear integral equation, known as the "Sinh-Gordon" Thermodynamic Bethe Ansatz (TBA):
In[1]:= | ![]() |
In[2]:= | ![]() |
Out[2]= | ![]() |
Plot the solution:
In[3]:= | ![]() |
Out[3]= | ![]() |
Solve coupled non-linear integral equations, for example the TBA for the "pure SU(2) Seiberg-Witten" gauge theory:
In[4]:= | ![]() |
Out[4]= | ![]() |
In[5]:= | ![]() |
Out[5]= | ![]() |
Plot the solutions:
In[6]:= | ![]() |
Out[6]= | ![]() |
Solve the TBA for the "Perturbed Hairpin Integrable Model":
In[7]:= | ![]() |
Out[8]= | ![]() |
Specify the parameter q, the integral cut-off K, and obtain the solution values:
In[9]:= | ![]() |
Out[9]= | ![]() |
Plot the real and imaginary parts of the solutions:
In[10]:= | ![]() |
Out[10]= | ![]() |
Some TBAs have to be solved with additional boundary conditions, required either for specifying additional physical parameters or for improving the convergence properties. For example, the TBA for the "Liouville Integrable Model" does not explicitly contain any parameter:
In[11]:= | ![]() |
The solution can be computed anyway:
In[12]:= | ![]() |
Out[12]= | ![]() |
In[13]:= | ![]() |
Out[13]= | ![]() |
However, it is possible to specify a further physical parameter through the boundary condition for . To use in the TBA, it is first necessary to add to the forcing term an auxiliary function, with the same x→-∞ asymptotic behaviour as the boundary condition, and with zero limit for x → +∞, namely:
In[14]:= | ![]() |
In[15]:= | ![]() |
Out[15]= | ![]() |
In[16]:= | ![]() |
Out[16]= | ![]() |
Then, one must subtract the inverse convolution of this from the convolution integrand. That is:
In[17]:= | ![]() |
In[18]:= | ![]() |
Out[18]= | ![]() |
In[19]:= | ![]() |
Out[19]= | ![]() |
The TBA can now be solved for a series of parameters. P, specifying these external and internal boundary terms as option values:
In[20]:= | ![]() |
Out[20]= | ![]() |
We can visualize these solutions and observe they have, as P→0, the solution with no boundary condition:
In[21]:= | ![]() |
Out[21]= | ![]() |
By default, if the integration limits of the convolution are left specified symbolically as infinity, with numeric cut-offs set to :
In[22]:= | ![]() |
Out[22]= | ![]() |
The user can also specify different cut-offs by setting them directly in the equation:
In[23]:= | ![]() |
Out[23]= | ![]() |
Alternatively the numeric cut-off can be specified through the option "GridCutoff":
In[24]:= | ![]() |
Out[24]= | ![]() |
This option overrides the integration limits set inside the equation:
In[25]:= | ![]() |
Out[25]= | ![]() |
Set up a TBA:
In[26]:= | ![]() |
By default, the integration interval is discretized into points. A finer grid, which can help with reaching higher numeric accuracy, can be achieved via the option "GridResolution":
In[27]:= | ![]() |
Out[27]= | ![]() |
Monitor the iterations in real time and Echo the total iterations used to obtain the numeric solution:
In[28]:= | ![]() |
In[29]:= | ![]() |
Out[29]= | ![]() |
Stop iterations when the (maximum norm) difference with the numeric solution at the previous iteration is below a certain threshold:
In[30]:= | ![]() |
In[31]:= | ![]() |
Out[31]= | ![]() |
As with a finer and larger grid, also a higher number of iteration usually leads a higher numeric accuracy.
Set a maximum number of iterations, which overrides the accuracy stopping rule:
In[32]:= | ![]() |
In[33]:= | ![]() |
Out[33]= | ![]() |
Setting a higher value for this option may be required to reach a lower stopping accuracy threshold:
In[34]:= | ![]() |
Out[34]= | ![]() |
Especially with very large TBAs (see the section "Neat Examples" below), or for finer grids or higher iterations, it can be convenient to use the "SaveMemory" option which maintains a cache of only the last iteration, instead of all of them:
In[35]:= | ![]() |
In[36]:= | ![]() |
Out[36]= | ![]() |
The x → +∞ asymptotic expansion modes of the TBA solution are often related to physically interesting quantities. For example, consider the TBA for the "Liouville Integrable Model":
In[37]:= | ![]() |
Out[38]= | ![]() |
Compute the first five asymptotic expansion modes of its convolution integral:
In[39]:= | ![]() |
In[40]:= | ![]() |
Out[40]= | ![]() |
Now solve the TBA equation:
In[41]:= | ![]() |
Out[41]= | ![]() |
By integrating the TBA modes against this solution, one finds excellent agreement with the Liouville model integrals of motion (times a constant):
In[42]:= | ![]() |
In[43]:= | ![]() |
Out[43]= | ![]() |
For more details, see reference[3].
The TBA can be used to compute directly the connection coefficients of ordinary differential equations, in alternative to solving and integrating these.
Consider for example the Mathieu Ordinary Differential Equation:
In[44]:= | ![]() |
Out[44]= | ![]() |
Map it into the corresponding Riccati equation:
In[45]:= | ![]() |
Out[45]= | ![]() |
Compute its solution numerically and plot it:
In[46]:= | ![]() |
In[47]:= | ![]() |
Out[47]= | ![]() |
The logarithm of the central connection coefficient, called the Q function, is given as the regularized integral in the independent variable on the real line:
In[48]:= | ![]() |
We can compute it on a discretized grid of ℏ for various values of u:
In[49]:= | ![]() |
Plot the resulting solution, for every :
In[50]:= | ![]() |
Out[50]= | ![]() |
Now compare this connection coefficient with the solution of the "pure SU(2) Seiberg-Witten gauge theory" TBA, through the following map:
In[51]:= | ![]() |
In[52]:= | ![]() |
Out[52]= | ![]() |
Plot the solution of TBA:
In[53]:= | ![]() |
Out[53]= | ![]() |
The plot perfectly matches that of the connection coefficient of the Mathieu equation:
In[54]:= | ![]() |
Out[54]= | ![]() |
For more details, see reference[3] and arXiv:2208.14031-revised.pdf.
Different TBA equations may actually describe the same solution, in different variables.
For example consider the TBAs for the "Perturbed Hairpin Integrable Model" and the "1-flavour SU(2) Seiberg-Witten gauge theory", defined as follows:
In[55]:= | ![]() |
In[56]:= | ![]() |
These TBA equations appear as very different in structure:
In[57]:= | ![]() |
Out[57]= | ![]() |
In[58]:= | ![]() |
Out[58]= | ![]() |
However, as explained in reference[4] - see also its revised version at arXiv:2208.14031-revised.pdf - the two TBAs actually have the same solution, under the following change of parameters:
The rules for changing parameters from one model to the other and vice-versa, are simply obtained by solving these equations for p and q in terms of u and m, at any x:
In[59]:= | ![]() |
For example, fix the parameters u=0.1, m=0.05 ⅈ, find their corresponding p,q parameters for x∈{-1,0,1,2,3}, and solve the Perturbed Hairpin equations:
In[60]:= | ![]() |
Out[60]= | ![]() |
It turns out that, at each x, these "Perturbed Hairpin" TBA solutions match precisely the solution of the other "1-flavor gauge theory" TBA, for chosen parameters u=0.1, m=0.05 ⅈ:
In[61]:= | ![]() |
Out[61]= | ![]() |
A combined plot shows such equivalence:
In[62]:= | ![]() |
Out[62]= | ![]() |
Of course, the argument could be inverted, namely one could fix the p,q parameters, solve the Perturbed Hairpin TBA, and find a match with the solutions of the 1-flavour gauge theory TBA, with the corresponding u,m parameters, at any fixed x. For more details, see arXiv:2208.14031-revised.pdf.
Only numerical solutions of the TBA, for special values of the parameters, can be provided:
In[63]:= | ![]() |
In[64]:= | ![]() |
Out[64]= | ![]() |
The behaviour under change of parameters should then be investigated through multiple TBA solutions:
In[65]:= | ![]() |
Out[65]= | ![]() |
In[66]:= | ![]() |
Out[66]= | ![]() |
TBA equations are typically defined only in certain regions of the parameter space, outside which they are non-convergent:
In[67]:= | ![]() |
In[68]:= | ![]() |
Out[68]= | ![]() |
In this case, we can easily understand why: the forcing terms become non-positive outside the segment u ∈ [-Λ^2,+Λ^2]:
In[69]:= | ![]() |
Out[69]= | ![]() |
Visualize the convergence region also for complex u:
In[70]:= | ![]() |
Out[70]= | ![]() |
Then, iterating this forcing term in the equation (by the method of successive approximations), clearly leads to divergent convolution integrals (due to the divergent double exponentials in the integrands). Some techniques exist to analytically continue the TBA equations and make them always convergent (in principle following the so-called Y systems), but they are outside the scope of this resource.
The previous examples showed relatively simple systems of TBA equations. Instead, the following is a much more complex TBA, with an arbitrary number of equations:
In[71]:= | ![]() |
For example, with parameter p=10, the TBA is modeled by the following 29 coupled equations:
In[72]:= | ![]() |
Out[72]= | ![]() |
The following integral of the TBA solution, called central charge, is a physically interesting quantity:
In[73]:= | ![]() |
Let us compute it for increasingly larger p and compare it with its known analytic limit for :
In[74]:= | ![]() |
We reproduce the results of reference[2]:
In[75]:= | ![]() |
Out[75]= | ![]() |
Wolfram Language 12.1 (March 2020) or above
This work is licensed under a Creative Commons Attribution 4.0 International License