Re: setps problem/how to set matrix elements
- To: mathgroup at smc.vnet.net
- Subject: [mg65835] Re: setps problem/how to set matrix elements
- From: "J Siehler" <jsiehler at gmail.com>
- Date: Tue, 18 Apr 2006 06:56:32 -0400 (EDT)
- References: <e1vet0$9db$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Giving your function the HoldFirst attribute will cause it to treat the r on the righthand side as exactly what you've passed it, instead of replacing it with the value of what you've passed it (which is what's generating your error). In[10]:= FSD[r_,xdim_,ydim_]:=Module[{},r[[1,1]]=5;] SetAttributes[FSD,HoldFirst] In[12]:= r={{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5}}; In[13]:= FSD[r,256,256] In[14]:= r Out[14]= {{5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5}} ------- If it were me, I would write the function so that it behaves a little differently, and returns a modified list rather than modifying the list you've passed. Use assignment if you actually want to change your r. In[42]:= Clear[FSD] ClearAttributes[FSD,HoldFirst] In[45]:= FSD[r_,xdim_,ydmi_]:=ReplacePart[r,5,{1,1}] In[46]:= r={{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5}}; In[48]:= FSD[r,256,256] Out[48]= {{5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5}} In[49]:= r Out[49]= {{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5}} In[50]:= r=FSD[r,256,256] Out[50]= {{5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5}} In[51]:= r Out[51]= {{5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5},{0.5,0.5,0.5,0.5}}