Pattern in immediate definition
- To: mathgroup at smc.vnet.net
- Subject: [mg120737] Pattern in immediate definition
- From: eLVa <elvadrias at gmail.com>
- Date: Mon, 8 Aug 2011 04:20:11 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
Hi,
I want to write more clearly the following definition :
TestFunction[{{a_, b_, c_}, {d_, e_, f_}, {g_, h_, k_}}] =
(* immediate definition with = *)
Module[{F, det},
F = {{a, b, c}, {d, e, f}, {g, h, k}};
det = Det[F];
Flatten[Table[D[det, F[[i, j]]], {i, 1, 3}, {j, 1, 3}]]
]
After that, I can pass any 3x3 matrix to the function and get the
result directly replaced, without having to evaluate the derivatives
again , i.e I don't want it to be written :
TestFunction[F_] :=
(* delayed definition with := *)
Module[{det},
det = Det[F];
Flatten[Table[D[det, F[[i, j]]], {i, 1, 3}, {j, 1, 3}]]
]
for it will compute everything every time I get to call the function
(which will be inefficient since I will call it often).
However, I find the trick with the temporary F that gets to be
assigned the matrix of {{a,b,c},{d,e,f},{g,h,i}} ugly and potentially
dangerous since it uses the value of the variables (a,b,...,k) if they
are defined.
I would like something close to :
TestFunction[F_<....>] = Module[<...>] where in the first <..> I get
to specify that the argument is a 3x3 matrix and so I can have access
to F[[i,j]] (Mathematica complains about this part since F is
obviously just a symbol and not a matrix). This way I just have to
worry about F not being defined elsewhere. It will also be a cleaner
definition in my opinion.
Is that possible in any way ??
Thanks
- Follow-Ups:
- Re: Pattern in immediate definition
- From: Leonid Shifrin <lshifr@gmail.com>
- Re: Pattern in immediate definition
- From: DrMajorBob <btreat1@austin.rr.com>
- Re: Pattern in immediate definition