Hello,
I need to write up an optimized code for a nasty analytical expression, the baby version is
\begin{aligned}
f_L = & \sum_{J} \frac{-\Gamma_J}{\pi^2} \frac{\text{Im}(z_J) \text{Im}(z_L)}{|x - z_J|^2|x - z_L|^2} + \sum_{K \neq L} \frac{\Gamma_K}{2 \pi^2} \text{Re}\left(\frac{1}{x - z_L} \frac{z_K - \overline{z_K}}{(\overline{z_L} - z_K)(\overline{z_L} - \overline{z_K})} \right) + \\
& \sum_{J}\sum_{K \neq J} \frac{\Gamma_J \delta_{K,L}}{2 \pi^2} \text{Re} \left(\frac{1}{x - z_J} \frac{z_K - \overline{z_K}}{(\overline{z_J} - z_K)(\overline{z_J} - \overline{z_K})} \right),
\end{aligned}
where \delta_{K,L} denotes the Kronecker delta of K and L, \text{Re}(z), \text{Im}(z) denotes the real, imaginary part of z, respectively. x is a real number, \{\Gamma_1, \ldots, \Gamma_N\} are real numbers, and \{z_1, \ldots, z_N\} are complex numbers. The number of particles N is about 50.
Can Symbolics.jl be useful to develop an optimized serial code for this kind of function?
Yeah, that looks like a case for “expand and simplify”, given that there are things to simplify.
My machine has been trying to simplify just the first two terms for over an hour, so while I agree that Symbolics.jl can in principle “expand and simplify”, it’s not currently useful for this kind of function.
Thanks a lot for looking at this problem. Let me know how long that took to simplify the expression.
Did you use the e-graph form?
I haven’t found anything about e-graphs in the Symbolics.jl docs, nor have I been able to find any external tutorials. Could you point me in the right direction?
Share your MWE. Maybe @0x0f0f0f can help. We do need better docs here, but are in the middle of a transition to make this a bit easier and so we might as well make this a docs example. E-Graphs will have much better asymptotic scaling properties so it would be a nice test example.
It’s on the way. Just pushed the last commit that should make it work. It’s not yet ready for Symbolics.jl but it should be very soon. This looks like a nice real world application for Metatheory.jl !
@mleprovost merged into SymbolicUtils.jl, will merge into Symbolics.jl soon