# How do I plot a 3D graphic where I have scalar function on the coordinate axes?

I'm trying to plot a 3D function on axes F(p,q), q^2, and p^2, with p and q being Four-vectors:

p^μ Subscript[p, μ] = p^0 Subscript[p, 0] - p^i Subscript[p, i]
q^μ Subscript[q, μ] = q^0 Subscript[q, 0] - q^i Subscript[q, i]
p^μ Subscript[q, μ] = (Subscript[p, 0] - Subscript[p, i])(Subscript[q, 0]- ubscript[q, i])


I need Wolfram to undestand this and produce the scalars, p^2, q^2, from p and q. This function has already been computed using the moment spaces and it is given by:

F[p_, q_] := PolyLog[2, (Subscript[λ, 1]
- Subscript[λ, 1] Sqrt[(1 - β)/(1 - α)])/(1 - Subscript[λ, 1] Sqrt[(1 - β)/(1 - α)])]


Where:

Subscript[λ, 1] = Sqrt[((ScalarProduct[p, q])^2
-p^2 q^2)]/Subscript[λ, 2]-1/Subscript[λ, 2]Sqrt[(ScalarProduct[p, q])^2
-p^2 q^2 - ((2 ScalarProduct[p, q] β - p^2)/(α - β)) ((p^2
- 2 α (ScalarProduct[p, q]))/(α - β))]

Subscript[λ, 2] = (2 ScalarProduct[p, q] β - p^2)/(α - β)

α = p^2/(2 ((ScalarProduct[p, q])^2 - p^2 q^2)) {-(q^2 - ScalarProduct[p, q])
+ Sqrt[q^2 (p - q)^2 + 4 ((ScalarProduct[p, q])^2 - p^2 q^2) 1^2/p^2]}

β = p^2/(2 ((ScalarProduct[p, q])^2 - p^2 q^2)) {-(q^2 - ScalarProduct[p, q])
- Sqrt[ q^2 (p - q)^2 + 4 ((ScalarProduct[p, q])^2 - p^2 q^2) 1^2/p^2]}


The graph must be a function that can be analyzed, including the imaginary part. When I tried to plot, there appeared a function rife with peaks, what I believe to be because Wolfram do not understand the dot product of p with q. That is, it is probably varying numbers for p and q and getting a result without taking into account that these quantities are Four-vectors. Thank you in advance.

• It looks as though F(p,q) is going to depend on the dot product between p and q as well as the amplitude of p and q separately? In that case, your graph of F(p,q) vs p^2 vs q^2 is going to be different depending on the dot between p and q, i.e. for particular choices of p and q. Is that what you want? – AnotherShruggingPhysicist Oct 3 '17 at 12:00

I think your main issue here is a bit of Mathematica syntax (some apparently spurious { brackets floating around), and possibly a bit of variable scoping. Anyway, does this solution work for you?

l1[p_, q_] := Sqrt[(p.q)^2 - (p.p)*(q.q)]/l2[p, q] - Sqrt[(p.q)^2 - (p.p)*(q.q) - ((2*(p.q)*b[p, q] - p.p)/(a[p, q] - b[p, q]))*((p.p - 2*p.q*a[p, q])/(a[p, q] - b[p, q]))];
l2[p_,q_] := (2*p.q*b[p, q] - p.p)/(a[p, q] - b[p, q]);
a[p_,q_] := (p.p/(2*(p.q)^2 - (p.p)*(q.q)))*(-(q.q - p.q) - Sqrt[q.q*(p - q).(p - q) + 4*(((p.q)^2 - (p.p)*(q.q))/p.p)]);
b[p_,q_] := (p.p/(2*(p.q)^2 - (p.p)*(q.q)))*(-(q.q - p.q) + Sqrt[q.q*(p - q).(p - q) + 4*(((p.q)^2 - (p.p)*(q.q))/p.p)]);
F[p_, q_] := PolyLog[2, (l1[p, q] - l1[p, q]*Sqrt[(1 - b[p, q])/(1 - a[p,q])])/(1 - l1[p, q]*Sqrt[(1 - b[p, q])/(1 - a[p, q])])];


and then populate a table using

pdir = {1, 0, 0, 1}/Sqrt[2]; qdir = {1, 0, 1, 1}/Sqrt[3];
table = Flatten[Table[{p^2, q^2, F[p*pdir, q*qdir]}, {p, 0.1, 1, 0.02}, {q, 0.1, 1, 0.02}], 1];


which is plotted as

ListPlot3D[{#[[1]], #[[2]], Re@#[[3]]} & /@ table, PlotRange -> All, AxesLabel -> {p^2, q^2, "Re[F]"}]
ListPlot3D[{#[[1]], #[[2]], Im@#[[3]]} & /@ table, PlotRange -> All, AxesLabel -> {p^2, q^2, "Im[F]"}]