Re: SparseArray
- To: mathgroup at smc.vnet.net
- Subject: [mg92322] Re: SparseArray
- From: "Steve Luttrell" <steve at _removemefirst_luttrell.org.uk>
- Date: Sat, 27 Sep 2008 22:20:26 -0400 (EDT)
- References: <gbl365$m5v$1@smc.vnet.net>
Have a look at the documentation for Band. Here is an example of what you need to do: n = 10; {diagbelow, diag, diagabove} = RandomReal[{-1, 1}, {3, n}]; a = SparseArray[{Band[{1, 1}] -> diag, Band[{1, 2}] -> Most[diagabove], Band[{2, 1}] -> Most[diagbelow]}, {n, n}]; ArrayPlot[a] -- Stephen Luttrell West Malvern, UK "Uli Wuerfel" <uli.wuerfel at fmf.uni-freiburg.de> wrote in message news:gbl365$m5v$1 at smc.vnet.net... > Hello, > > I want to create a SparseArray with the elements being zero except for the > diagonal elements and their direct neighbours. For those, I would like to > assign them a value from another list, depending on the index i. > > The code is like this: > > anz=150; > kg=10^-3; > dx=10^-5; > delx={}; > For[i=1,i<=anz, > delx=Append[delx,{i,dx}]; > i++]; > > matr=SparseArray[{1,1}->-2*kg*delx[[1]][[2]],{i_,i_}/;1<i<anz->-2*kg*(delx[[i]][[2]]+delx[[i-1]][[2]]),{1,2}->kg*delx[[1][[2]],{i_,j_}/;i-j==1&&i>1->kg*delx[[i]][[2]],{i_,j_}/;j-i==1->kg*delx[[i-1]][[2]],{anz,anz}->-kg*(delx[[anz]][[2]]+delx[[anz-1][[2]])},{anz,anz}]; > > Here delx is a very simple list, but later I would like to do the same > with a list with varying elements. > The reason is that I would like to have a non-constant > grid spacing in order to solve a differential equation with the > SparseArray and using LinearSolve. > This works well as long as I assign constants to the SparseArray-item. If > I try to assign values from a list to the SparseArray-item, it does not > work. > > Can you help? > > Regards, > Uli >