Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

[MATLAB] Spherical Harmonics

  1. Jul 31, 2014 #1
    Hey guys, This is my first post here, so I will apologize in advance in case I'm posting this in the wrong section.

    I wrote a very simple function to calculate spherical harmonics in matla, and I used this function during 3 years. Yesterday I found that the fucntion was actually wrong, and looking up on matlab function database I realised that EVERY implementation were wrong.

    This is the code i use, and is very similar to the rest of the codes I found online:

    function Y = spherical_harmonic(l,m,THETA,PHI)

    mm = m;
    m = abs(m);

    if l~=0

    C=(-1)^m / sqrt(2*pi);
    Y = C * Lmn .* exp(i*m*PHI);

    if mm<0
    Y = (-1)^m * conj(Y);

    Let me exemplify one test: if you try to find the spherical harmonics for m=1, l=1, theta = pi/2 and phi = 0 it will give the correct answer (-0.3455). Now try to find the spherical harmonics for m=1, l=1, theta = - pi/2 and phi = 0, it will give you the same answer (-0.3455). But the correct answer is (0.3455). You can verify this by getting the closed formula solution for the spherical harmonics of l=1 and m=1 (sine dependent).

    The thing is, using the implementation given by matlab of the legendre function the cosine of theta will always be squared. The correct way to implement this was to replace 1-cos(theta)^2 for sine(theta)^2, and do the rest of the operations. But for this I would have to implement the spherical harmonics using a symbolic language. Mathematica does this way, and always gives you the correct values (I don't know if they have a table with the closed formula solution for every combination of l and m, or if they do some magical trick inside, but the thing is, they version of the code works).

    I don't know how to make it right, does anyone have any tips for me?

    P.S: I know of a LOT of people who uses matlab to compute spherical harmonics and published a lot of papers with their code. I wonder if this "error" had some implications with the results.
  2. jcsd
  3. Aug 7, 2014 #2


    User Avatar
    Gold Member

    Hi - I noticed you reposted this entire thread:

    In general if you make a post and notice few replies, you should post a reply with any updates/additional information you have to encourage people to reply. It's also not uncommon to just post a reply like "bump - anyone have any ideas?", which will move your post back up to the top of the page.

  4. Mar 8, 2015 #3
    Shouldn't the correct input values for theta range between 0 and pi? Hence -pi/2 isn't a valid input for theta.
  5. Mar 9, 2015 #4


    User Avatar
    Gold Member

Share this great discussion with others via Reddit, Google+, Twitter, or Facebook