View Full Version : Mathematica error
the_kid
Dec17-11, 09:20 PM
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!
DaleSpam
Dec17-11, 09:38 PM
Usually it means you have an expression like this:
i-1=5
Perhaps you meant something like:
i-1==5
the_kid
Dec17-11, 11:22 PM
Hmm, I tried fixing that, but I had no luck. Any chance you could take a look at my code?
Bill Simpson
Dec19-11, 11:23 PM
Any chance you could take a look at my code?
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.
the_kid
Dec19-11, 11:30 PM
(*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[[i]] =
1/Sp[[1]] (-i m e[i] + i/2 D[Sp[[i - 1]], 1] -
1/2 Sum[i!/(k! (i - k)!) Sp[[k]] Sp[[i - k]], k, 2, i - 1]);
e[[i]] =
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]]
the_kid
Dec19-11, 11:31 PM
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.
Bill Simpson
Dec19-11, 11:44 PM
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.
the_kid
Dec20-11, 12:05 AM
I really appreciate the help. The program is running. *fingers crossed*
the_kid
Dec20-11, 12:08 AM
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?
Bill Simpson
Dec20-11, 12:11 AM
As I wrote:
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.
the_kid
Dec20-11, 12:14 AM
(*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] + i/2 D[Sp[[i - 1]], x] -
1/2 Sum[i!/(k! (i - k)!) Sp[[k]] Sp[[i - k]], {k, 2, i - 1}]);
e[[i]] =
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]]
Bill Simpson
Dec20-11, 12:36 AM
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[i]...
to be
1/Sp[[1]] (-i m e[[i]]...
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
the_kid
Dec20-11, 12:45 AM
(*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]] + i/2 D[Sp[[i - 1]], x] -
1/2 Sum[i!/(k! (i - k)!) Sp[[k]] Sp[[i - k]], {k, 2, i - 1}]);
e[[i]] =
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?
Bill Simpson
Dec20-11, 12:49 AM
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?
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[]?
the_kid
Dec20-11, 12:54 AM
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[]?
I want it to print something after each iteration of the For[]. How would I do that?
Bill Simpson
Dec20-11, 12:56 AM
For[i = 2, i <= n, i++,
Sp[[i]] = 1/Sp[[1]] (-i m e[[i]] + i/2 D[Sp[[i - 1]], x] - 1/2 Sum[i!/(k! (i - k)!) Sp[[k]] Sp[[i - k]], {k, 2, i - 1}]);
e[[i]] = 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"];
]
the_kid
Dec20-11, 12:58 AM
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?
Bill Simpson
Dec20-11, 01:00 AM
For[i = 2, i <= n, i++,
Sp[[i]] = 1/Sp[[1]] (-i m e[[i]] + i/2 D[Sp[[i - 1]], x] - 1/2 Sum[i!/(k! (i - k)!) Sp[[k]] Sp[[i - k]], {k, 2, i - 1}]);
e[[i]] = 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];
]
the_kid
Dec20-11, 01:05 AM
For[i = 2, i <= n, i++,
Sp[[i]] = 1/Sp[[1]] (-i m e[[i]] + i/2 D[Sp[[i - 1]], x] - 1/2 Sum[i!/(k! (i - k)!) Sp[[k]] Sp[[i - k]], {k, 2, i - 1}]);
e[[i]] = 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];
]
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.
Bill Simpson
Dec20-11, 01:11 AM
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]]+i/2 D[Sp[[i-1]],x]-1/2 Sum[i!/(k! (i-k)!) Sp[[k]] Sp[[i-k]],{k,2,i-1}]);
e[[i]]=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.
the_kid
Dec20-11, 01:18 AM
That looks great, though I can't get it to show up for me. I literally copy and pasted what you have and it's not printing those values for me. Any ideas?
the_kid
Dec20-11, 01:27 AM
Ah, I got it! One final question, if you have time: is there any way I could change the program so the input values (g, w, etc.) could be keep as "variables"? I would like to eliminate the numerical aspect, if possible.
Again, thank you so much!
Bill Simpson
Dec20-11, 01:47 AM
In[1]:=(*n+1 is the number of eigenvalues to be generated, k is the exponent in the potential term*)
n=2;k=4;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]]+i/2 D[Sp[[i-1]],x]-1/2 Sum[i!/(k! (i-k)!) Sp[[k]] Sp[[i-k]],{k,2,i-1}]);
e[[i]]=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[2*g*m*x^8+m^2*x^2*\[Omega]^2], (-4*m+(16*g*m*x^7 + 2*m^2*x*\[Omega]^2)/(2*Sqrt[2*g*m*x^8 + m^2*x^2*\[Omega]^2]))/ Sqrt[2*g*m*x^8 + m^2*x^2*\[Omega]^2]}
From In[1]:=e={\[Omega], Sqrt[m^2*\[Omega]^2]/(2*m)}
n and k must have constant integer values assigned for For and Sum.
the_kid
Dec20-11, 02:00 AM
Thank you!!
vBulletin® v3.8.7, Copyright ©2000-2012, vBulletin Solutions, Inc.