[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |

50.1 Functions and Variables for diag |

[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |

__Function:__**diag***(*`lm`)Constructs a matrix that is the block sum of the elements of

`lm`. The elements of`lm`are assumed to be matrices; if an element is scalar, it treated as a 1 by 1 matrix.The resulting matrix will be square if each of the elements of

`lm`is square.Example:

(%i1) load("diag")$ (%i2) a1:matrix([1,2,3],[0,4,5],[0,0,6])$ (%i3) a2:matrix([1,1],[1,0])$ (%i4) diag([a1,x,a2]); [ 1 2 3 0 0 0 ] [ ] [ 0 4 5 0 0 0 ] [ ] [ 0 0 6 0 0 0 ] (%o4) [ ] [ 0 0 0 x 0 0 ] [ ] [ 0 0 0 0 1 1 ] [ ] [ 0 0 0 0 1 0 ] (%i5) diag ([matrix([1,2]), 3]); [ 1 2 0 ] (%o5) [ ] [ 0 0 3 ]

To use this function write first

`load("diag")`

.Categories: Matrices · Share packages · Package diag

__Function:__**JF***(*`lambda`,`n`)Returns the Jordan cell of order

`n`with eigenvalue`lambda`.Example:

(%i1) load("diag")$ (%i2) JF(2,5); [ 2 1 0 0 0 ] [ ] [ 0 2 1 0 0 ] [ ] (%o2) [ 0 0 2 1 0 ] [ ] [ 0 0 0 2 1 ] [ ] [ 0 0 0 0 2 ] (%i3) JF(3,2); [ 3 1 ] (%o3) [ ] [ 0 3 ]

To use this function write first

`load("diag")`

.Categories: Package diag

__Function:__**jordan***(*`mat`)Returns the Jordan form of matrix

`mat`, encoded as a list in a particular format. To get the corresponding matrix, call the function`dispJordan`

using the output of`jordan`

as the argument.The elements of the returned list are themselves lists. The first element of each is an eigenvalue of

`mat`. The remaining elements are positive integers which are the lengths of the Jordan blocks for this eigenvalue. These integers are listed in decreasing order. Eigenvalues are not repeated.The functions

`dispJordan`

,`minimalPoly`

and`ModeMatrix`

expect the output of a call to`jordan`

as an argument. If you construct this argument by hand, rather than by calling`jordan`

, you must ensure that each eigenvalue only appears once and that the block sizes are listed in decreasing order, otherwise the functions might give incorrect answers.Example:

(%i1) load("diag")$ (%i2) A: matrix([2,0,0,0,0,0,0,0], [1,2,0,0,0,0,0,0], [-4,1,2,0,0,0,0,0], [2,0,0,2,0,0,0,0], [-7,2,0,0,2,0,0,0], [9,0,-2,0,1,2,0,0], [-34,7,1,-2,-1,1,2,0], [145,-17,-16,3,9,-2,0,3])$ (%i3) jordan (A); (%o3) [[2, 3, 3, 1], [3, 1]] (%i4) dispJordan (%); [ 2 1 0 0 0 0 0 0 ] [ ] [ 0 2 1 0 0 0 0 0 ] [ ] [ 0 0 2 0 0 0 0 0 ] [ ] [ 0 0 0 2 1 0 0 0 ] (%o4) [ ] [ 0 0 0 0 2 1 0 0 ] [ ] [ 0 0 0 0 0 2 0 0 ] [ ] [ 0 0 0 0 0 0 2 0 ] [ ] [ 0 0 0 0 0 0 0 3 ]

To use this function write first

`load("diag")`

. See also`dispJordan`

and`minimalPoly`

.Categories: Package diag

__Function:__**dispJordan***(*`l`)Returns a matrix in Jordan canonical form (JCF) corresponding to the list of eigenvalues and multiplicities given by

`l`. This list should be in the format given by the`jordan`

function. See`jordan`

for details of this format.Example:

(%i1) load("diag")$ (%i2) b1:matrix([0,0,1,1,1], [0,0,0,1,1], [0,0,0,0,1], [0,0,0,0,0], [0,0,0,0,0])$ (%i3) jordan(b1); (%o3) [[0, 3, 2]] (%i4) dispJordan(%); [ 0 1 0 0 0 ] [ ] [ 0 0 1 0 0 ] [ ] (%o4) [ 0 0 0 0 0 ] [ ] [ 0 0 0 0 1 ] [ ] [ 0 0 0 0 0 ]

To use this function write first

`load("diag")`

. See also`jordan`

and`minimalPoly`

.Categories: Package diag

__Function:__**minimalPoly***(*`l`)Returns the minimal polynomial of the matrix whose Jordan form is described by the list

`l`. This list should be in the format given by the`jordan`

function. See`jordan`

for details of this format.Example:

(%i1) load("diag")$ (%i2) a:matrix([2,1,2,0], [-2,2,1,2], [-2,-1,-1,1], [3,1,2,-1])$ (%i3) jordan(a); (%o3) [[- 1, 1], [1, 3]] (%i4) minimalPoly(%); 3 (%o4) (x - 1) (x + 1)

To use this function write first

`load("diag")`

. See also`jordan`

and`dispJordan`

.Categories: Package diag

__Function:__**ModeMatrix***(*`A`, [`jordan_info`])Returns an invertible matrix

`M`such that*(M^^-1).A.M*is the Jordan form of`A`.To calculate this, Maxima must find the Jordan form of

`A`, which might be quite computationally expensive. If that has already been calculated by a previous call to`jordan`

, pass it as a second argument,`jordan_info`. See`jordan`

for details of the required format.Example:

(%i1) load("diag")$ (%i2) A: matrix([2,1,2,0], [-2,2,1,2], [-2,-1,-1,1], [3,1,2,-1])$ (%i3) M: ModeMatrix (A); [ 1 - 1 1 1 ] [ ] [ 1 ] [ - - - 1 0 0 ] [ 9 ] [ ] (%o3) [ 13 ] [ - -- 1 - 1 0 ] [ 9 ] [ ] [ 17 ] [ -- - 1 1 1 ] [ 9 ] (%i4) is ((M^^-1) . A . M = dispJordan (jordan (A))); (%o4) true

Note that, in this example, the Jordan form of

`A`

is computed twice. To avoid this, we could have stored the output of`jordan(A)`

in a variable and passed that to both`ModeMatrix`

and`dispJordan`

.To use this function write first

`load("diag")`

. See also`jordan`

and`dispJordan`

.Categories: Package diag

__Function:__**mat_function***(*`f`,`A`)Returns

*f(A)*, where`f`is an analytic function and`A`a matrix. This computation is based on the Taylor expansion of`f`. It is not efficient for numerical evaluation, but can give symbolic answers for small matrices.Example 1:

The exponential of a matrix. We only give the first row of the answer, since the output is rather large.

(%i1) load("diag")$ (%i2) A: matrix ([0,1,0], [0,0,1], [-1,-3,-3])$ (%i3) ratsimp (mat_function (exp, t*A)[1]); 2 - t 2 - t (t + 2 t + 2) %e 2 - t t %e (%o3) [--------------------, (t + t) %e , --------] 2 2

Example 2:

Comparison with the Taylor series for the exponential and also comparing

`exp(%i*A)`

with sine and cosine.(%i1) load("diag")$ (%i2) A: matrix ([0,1,1,1], [0,0,0,1], [0,0,0,1], [0,0,0,0])$ (%i3) ratsimp (mat_function (exp, t*A)); [ 2 ] [ 1 t t t + t ] [ ] (%o3) [ 0 1 0 t ] [ ] [ 0 0 1 t ] [ ] [ 0 0 0 1 ] (%i4) minimalPoly (jordan (A)); 3 (%o4) x (%i5) ratsimp (ident(4) + t*A + 1/2*(t^2)*A^^2); [ 2 ] [ 1 t t t + t ] [ ] (%o5) [ 0 1 0 t ] [ ] [ 0 0 1 t ] [ ] [ 0 0 0 1 ] (%i6) ratsimp (mat_function (exp, %i*t*A)); [ 2 ] [ 1 %i t %i t %i t - t ] [ ] (%o6) [ 0 1 0 %i t ] [ ] [ 0 0 1 %i t ] [ ] [ 0 0 0 1 ] (%i7) ratsimp (mat_function (cos, t*A) + %i*mat_function (sin, t*A)); [ 2 ] [ 1 %i t %i t %i t - t ] [ ] (%o7) [ 0 1 0 %i t ] [ ] [ 0 0 1 %i t ] [ ] [ 0 0 0 1 ]

Example 3:

Power operations.

(%i1) load("diag")$ (%i2) A: matrix([1,2,0], [0,1,0], [1,0,1])$ (%i3) integer_pow(x) := block ([k], declare (k, integer), x^k)$ (%i4) mat_function (integer_pow, A); [ 1 2 k 0 ] [ ] (%o4) [ 0 1 0 ] [ ] [ k (k - 1) k 1 ] (%i5) A^^20; [ 1 40 0 ] [ ] (%o5) [ 0 1 0 ] [ ] [ 20 380 1 ]

To use this function write first

`load("diag")`

.Categories: Package diag

[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |

This document was generated by *Wolfgang Dautermann* on *October, 5 2017* using *texi2html 1.76*.