MathGroup Archive 2001

[Date Index] [Thread Index] [Author Index]

Search the Archive

Functional programming

  • To: mathgroup at
  • Subject: [mg27131] Functional programming
  • From: "Arturo Rania" <abasida at>
  • Date: Wed, 7 Feb 2001 02:12:40 -0500 (EST)
  • Sender: owner-wri-mathgroup at

I'm kind of new to Mathematica and I'm still too procedural in my 
programming. I would like to get some advice in order to make my 
programming more efficient, and especially more Mathematica oriented. In 
order to do this I invite anyone who want to critize or improve a 
program I wrote that finds symbolic matrix powers when MatrixPower fails 
(when the matrix is non-diagonalizable). I think that it is a perfect 
example of unprofesional programming style, but it's improvement can be 
a great source of knowledge for me. Thanks for your time and good luck.

NDMatrixPower[M_/;And[MatrixQ[M], Length[M]] == Length[M[[1]]], t_ 
/; Or[NumericQ[t], Head[t] == Symbol]] :=
            Module[{v, w, r, EigenTable, Multiplicidad, A, B, Sol, k},
            Clear[v, w, r, EigenTable, Multiplicidad, Sol, k];
            v = Eigenvalues[M];
            w = Union[v, v];
            EigenTable = Table[{w[[i]], Count[v, w[[i]]]}, {i, 1, 
            Multiplicidad = Join@@Table[i, {j, 1, Length[EigenTable]}, 
{i, 1, EigenTable[[j, 2]]}] - 1;
            A = Table[D[Power[r, j - 1], {r, Multiplicidad[[i]]}] /. r 
-> v[[i]], {i, 1, Length[M]}, {j, 1, Length[M]}];
            B = Table[D[Power[r, k], {r, Multiplicidad[[i]]}] /. r -> 
v[[i]], {i, 1, Length[M]}, {j, 1, 1}];
            Sol = Transpose[LinearSolve[A, B]][[1]];
            Plus@@Table[MatrixPower[M, i - 1]*Sol[[i]], {i, 1, 
Length[v]}] /. k -> t];

Any comments are welcome,

Arturo Rania

  • Prev by Date: Re: Problem in loading own Package
  • Next by Date: Re: Parametric Plot Again
  • Previous by thread: Re: Genetic Algorithms?
  • Next by thread: Re: Functional programming