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

Mathematica error

  1. Dec 17, 2011 #1
    Hey all,

    I'm very new to Mathematica, so I'm looking for some help here. I'm writing an elementary program using a "For" loop, and getting this error message: "Sum::write: Tag Plus in i-1 is Protected. >>" Any ideas what might be wrong?

    Thanks!
     
  2. jcsd
  3. Dec 17, 2011 #2

    Dale

    Staff: Mentor

    Usually it means you have an expression like this:
    i-1=5

    Perhaps you meant something like:
    i-1==5
     
  4. Dec 17, 2011 #3
    Hmm, I tried fixing that, but I had no luck. Any chance you could take a look at my code?
     
  5. Dec 19, 2011 #4
    Simplify your notebook as much as you can to demonstrate just what you are having a problem with, not include irrelevant detail, but include everything so that someone else can reproduce exactly the problem you have.

    If what is left is small enough you can select a cell and then click Edit, Copy As, Plain Text. Then paste into a message here. What you are trying to accomplish is to post something that someone can glance at, scrape off the screen, paste into their Mathematica and reproduce your problem exactly. You are trying to avoid introduce problems by you typing it back in or forcing someone who is trying to help you to have to type it back in. And you want to avoid an assortment of problems with "special characters" when copying between Mathematica and the forum. If, after you post, you can scrape off the forum, paste into a fresh Mathematica session and see the exact same problem then you are probably getting close.

    If you just can't get your complete problem small enough then you can attach a notebook to a posting.

    But you still want simplicity without leaving out essential information and you want something that someone who has no idea what you are doing or thinking is going to be able to understand, diagnose and quickly provide you a solution.
     
  6. Dec 19, 2011 #5
    (*n+1 is the number of eigenvalues to be generated, k is the exponent in the potential term*)
    n=3;
    k=4;
    m=1;
    g=.2;
    \[Omega]=1;

    Sp = Range[n];
    e = Range[n];
    e[[1]] = \[Omega];

    f[x_] = Sqrt[m^2 \[Omega]^2 x^2 + 2 m g x^(2 k)];
    Sp[[1]] = f[x];
    Sp[[3]];
    For[i = 2, i <= n, i++,
    Sp[] =
    1/Sp[[1]] (-i m e + i/2 D[Sp[[i - 1]], 1] -
    1/2 Sum[i!/(k! (i - k)!) Sp[[k]] Sp[[i - k]], k, 2, i - 1]);
    e[] =
    Limit[(1/(
    i m)) ((i/2) D[Sp[[i - 1]], 1] -
    1/2 Sum[i!/(k! (i - k)!) Sp[[k]] Sp[[i - k]], k, 2, i - 1]), x,
    0]]
     
  7. Dec 19, 2011 #6
    Ok, I copied that, and it looks pretty good. The last few lines are formated differently when I copy it back in, although they are still entirely correct. If anyone could help me out with this, I'd be very appreciative.
     
  8. Dec 19, 2011 #7
    1. Your
    Sp[[3]];
    on a line all by itself isn't going to do anything. It isn't clear why that line is in there.

    2. Your
    D[Sp[[i-1]],1]
    is going to differentiate Sp[[i-1]] with respect to the variable 1, but 1 isn't a variable and Mathematica complains about that.
    Check
    http://reference.wolfram.com/mathematica/ref/D.html

    3. Your Sum[...,k,2,i-1]
    isn't correct Mathematica syntax. Perhaps that should be
    Sum[...,{k,2,i-1}]
    Check
    http://reference.wolfram.com/mathematica/ref/Sum.html

    4. Your
    Limit[....,x,0]
    isn't correct Mathematica syntax. Perhaps that should be
    Limit[...,x->0]
    Check
    http://reference.wolfram.com/mathematica/ref/Limit.html

    Fix each of those problems, see if you are done, and if not repeat the process.

    You do get points for making a well formed posting that could be scraped right back into Mathematica to be able to diagnose your problem and give you help.
     
    Last edited: Dec 19, 2011
  9. Dec 20, 2011 #8
    I really appreciate the help. The program is running. *fingers crossed*
     
  10. Dec 20, 2011 #9
    I'm trying to compute a very low value for n: n=3, but the program just keeps saying it's running. I suspect it shouldn't be taking this long. Could I have hit an infinite loop or something of that sort? Any ideas?
     
  11. Dec 20, 2011 #10
    As I wrote:

     
  12. Dec 20, 2011 #11
    (*n+1 is the number of eigenvalues to be generated, k is the exponent \
    in the potential term*)
    n = 2;
    k = 4;
    m = 1;
    g = .2;
    \[Omega] = 1;

    Sp = Range[n];
    e = Range[n];
    e[[1]] = \[Omega]

    f[x] = Sqrt[m^2 \[Omega]^2 x^2 + 2 m g x^(2 k)];
    Sp[[1]] = f[x]

    For[i = 2, i <= n, i++,
    Sp[] =
    1/Sp[[1]] (-i m e + i/2 D[Sp[[i - 1]], x] -
    1/2 Sum[i!/(k! (i - k)!) Sp[[k]] Sp[[i - k]], {k, 2, i - 1}]);
    e[] =
    Limit[(1/(
    i m)) ((i/2) D[Sp[[i - 1]], x] -
    1/2 Sum[i!/(k! (i - k)!) Sp[[k]] Sp[[i - k]], {k, 2, i - 1}]),
    x -> 0]]
     
  13. Dec 20, 2011 #12
    1. You probably want a semicolon after
    e[[1]] = \[Omega]
    You lost that somehow in making changes

    2. You probably want
    1/Sp[[1]] (-i m e...
    to be
    1/Sp[[1]] (-i m e[]...

    If I make those changes it appears that your code runs almost instantly.

    But it doesn't display any results and I have no idea what it is supposed to do.

    So repeat the steps you have done above
     
  14. Dec 20, 2011 #13
    (*n+1 is the number of eigenvalues to be generated, k is the exponent \
    in the potential term*)
    n = 2;
    k = 4;
    m = 1;
    g = .2;
    \[Omega] = 1;

    Sp = Range[n];
    e = Range[n];
    e[[1]] = \[Omega];

    f[x] = Sqrt[m^2 \[Omega]^2 x^2 + 2 m g x^(2 k)];
    Sp[[1]] = f[x]

    For[i = 2, i <= n, i++,
    Sp[] =
    1/Sp[[1]] (-i m e[] + i/2 D[Sp[[i - 1]], x] -
    1/2 Sum[i!/(k! (i - k)!) Sp[[k]] Sp[[i - k]], {k, 2, i - 1}]);
    e[] =
    Limit[(1/(
    i m)) ((i/2) D[Sp[[i - 1]], x] -
    1/2 Sum[i!/(k! (i - k)!) Sp[[k]] Sp[[i - k]], {k, 2, i - 1}]),
    x -> 0]]

    ----------------------------
    I made those changes, as seen above, and the code runs for me. What I was attempting to have it do was produce these eigenvalues from the equations in the for-loop. At the beginning, I have a place to enter the number of eigenvalues to be generated (these are quantum energy coefficients), and I started with a simple one, n=2. Any idea how I can make it spit these out for me?
     
  15. Dec 20, 2011 #14
    Do you want it to Print something after the For[] has completed?
    Do you want it to Print something after each calculation in the For[]?

    Can you put a Print[]; at an appropriate spot in the code and put the expression you want to see the value of inside the Print[]?
     
  16. Dec 20, 2011 #15
    I want it to print something after each iteration of the For[]. How would I do that?
     
  17. Dec 20, 2011 #16
    For[i = 2, i <= n, i++,
    Sp[] = 1/Sp[[1]] (-i m e[] + i/2 D[Sp[[i - 1]], x] - 1/2 Sum[i!/(k! (i - k)!) Sp[[k]] Sp[[i - k]], {k, 2, i - 1}]);
    e[] = Limit[(1/(i m)) ((i/2) D[Sp[[i - 1]], x] - 1/2 Sum[i!/(k! (i - k)!) Sp[[k]] Sp[[i - k]], {k, 2, i - 1}]), x -> 0];
    Print["something"];
    ]
     
  18. Dec 20, 2011 #17
    Hmm, okay. I want it to print Sp[1], Sp[2],..., Sp[n] and e[1], e[2],..., e[n]. Any idea what I would call that?
     
  19. Dec 20, 2011 #18
    For[i = 2, i <= n, i++,
    Sp[] = 1/Sp[[1]] (-i m e[] + i/2 D[Sp[[i - 1]], x] - 1/2 Sum[i!/(k! (i - k)!) Sp[[k]] Sp[[i - k]], {k, 2, i - 1}]);
    e[] = Limit[(1/(i m)) ((i/2) D[Sp[[i - 1]], x] - 1/2 Sum[i!/(k! (i - k)!) Sp[[k]] Sp[[i - k]], {k, 2, i - 1}]), x -> 0];
    Print[Sp];
    Print[e];
    ]
     
  20. Dec 20, 2011 #19


    Hmm, I tried this and it isn't printing anything for me.

    By the way, thank you SO much for all this help; it is incredibly instructive. I appreciate it.
     
  21. Dec 20, 2011 #20
    In[1]:=(*n+1 is the number of eigenvalues to be generated, k is the exponent in the potential term*)
    n=2;k=4;m=1;g=.2;\[Omega]=1;
    Sp=Range[n];
    e=Range[n];
    e[[1]]=\[Omega];
    f[x]=Sqrt[m^2 \[Omega]^2 x^2+2 m g x^(2 k)];
    Sp[[1]]=f[x];
    For[i=2,i<=n,i++,
    Sp[[i]]=1/Sp[[1]] (-i m e[]+i/2 D[Sp[[i-1]],x]-1/2 Sum[i!/(k! (i-k)!) Sp[[k]] Sp[[i-k]],{k,2,i-1}]);
    e[]=Limit[(1/(i m)) ((i/2) D[Sp[[i-1]],x]-1/2 Sum[i!/(k! (i-k)!) Sp[[k]] Sp[[i-k]],{k,2,i-1}]),x->0];
    Print["Sp=",InputForm[Sp]];
    Print["e=",InputForm[e]];
    ]

    From In[1]:=Sp={Sqrt[x^2+0.4*x^8], (-4+(2*x+3.2*x^7)/(2*Sqrt[x^2+0.4*x^8]))/Sqrt[x^2+0.4*x^8]}

    From In[1]:=e={1, 0.5}

    Note: I just added the labels and InputForm to the Print so you could tell which was which and to get rid of all the 2D formatting so I could paste the results for you here.
     
    Last edited: Dec 20, 2011
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Mathematica error
  1. Errors In Mathematica (Replies: 6)

  2. Mathematica Error (Replies: 4)

Loading...