Re: Define a matrix function with size as argument

*To*: mathgroup at smc.vnet.net*Subject*: [mg71380] Re: Define a matrix function with size as argument*From*: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>*Date*: Thu, 16 Nov 2006 00:53:18 -0500 (EST)*Organization*: The Open University, Milton Keynes, UK*References*: <ejf10f$4pt$1@smc.vnet.net>

Simone Giannerini wrote: > Dear all, > > I am quite new to Mathematica and I have the following problem I could > not find track of both in the Forum and in the documentation. > I need to define a matrix function with size of the matrix as an > argument. The function produces a tridiagonal matrix: > > Q[w_] := MatrixForm[SparseArray[ > {i_, j_} /; Abs[i - j] <= 1 -> Which[i < j, > a[i - 1]*(1 - (i - 1)/(2*w)), i > j, > (a[-i + 2*w + 1]*(i - 1))/(2*w), i == j, > (-(1 - (i - 1)/(2*w)))*a[i - 1] - > (a[-i + 2*w + 1]*(i - 1))/(2*w) + 1], > {2*w, 2*w}]] > > > dum = Q[2] > > the problem is that dum is not recognized as a matrix so that > operations like Inversion and the like do not work. MatrixForm is a wrapper function for display only: do not use it within your function definition. Q[w_] := SparseArray[{i_, j_} /; Abs[i - j] â?¤ 1 -> Which[i < j, a[i - 1]*(1 - (i - 1)/(2*w)), i > j, ( a[-i + 2*w + 1]*(i - 1))/( 2*w), i == j, (-(1 - (i - 1)/(2*w)))*a[i - 1] - (a[-i + 2* w + 1]*(i - 1))/(2*w) + 1], {2*w, 2*w}] dum = Q[2] dum // MatrixForm Inverse[dum] The above expression work as expected. Regards, Jean-Marc