## `linalg::addRow` -- linear combination of matrix rows

#### Introduction

`linalg::addRow``(A, r1, r2, s)` returns a copy of the matrix A in which row r2 of A is replaced by s*row(A,r1) + row(A,r2).

#### Call(s)

`linalg::addRow(A, r1, r2, s)`

#### Parameters

`A` | - | an m x n matrix of a domain of category `Cat::Matrix`
`r1, r2` | - | the row indices: positive integers <= m
`s` | - | an expression that can be converted into the component ring of `A`

#### Returns

a matrix of the same domain type as `A`.

#### Related Functions

`linalg::addCol`, `linalg::row`, `linalg::multCol`, `linalg::multRow`

#### Example 1

The following defines a 3x3 matrix over the integers:

    >> A := Dom::Matrix(Dom::Integer)(
         [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
       )

                                   +-         -+
                                   |  1, 2, 3  |
                                   |           |
                                   |  4, 5, 6  |
                                   |           |
                                   |  7, 8, 9  |
                                   +-         -+

We replace the 2nd row by -row(A,1) + row(A,2), i.e., we subtract the first row from the second:

    >> linalg::addRow(A, 1, 2, -1)

                                   +-         -+
                                   |  1, 2, 3  |
                                   |           |
                                   |  3, 3, 3  |
                                   |           |
                                   |  7, 8, 9  |
                                   +-         -+

#### Example 2

The following defines a 2x3 matrix over the reals:

    >> B := Dom::Matrix(Dom::Real)(
         [[sin(2), 0, 1], [1, PI, 0]]
       )

                                +-               -+
                                |  sin(2),  0, 1  |
                                |                 |
                                |     1,   PI, 0  |
                                +-               -+

If `s` is an expression that does not represent a real number then an error message is reported. The following tries to replace the 1st row by x*row(B,2) + row(B,1), where x is an identifier which cannot be converted into the component ring `Dom::Real` of B:

    >> delete x: linalg::addRow(B, 2, 1, x)

          Error: unable to convert x [linalg::addRow]

#### Example 3

If symbolic expressions are involved, then one may define matrices over the component ring created by `Dom::ExpressionField`. The following example defines a matrix over this default component ring:

    >> delete a11, a12, a21, a22, x:
       C := matrix([[a11, a12], [a21, a22]])

                                  +-          -+
                                  |  a11, a12  |
                                  |            |
                                  |  a21, a22  |
                                  +-          -+

We retry the input from the previous example:

    >> linalg::addRow(C, 2, 1, x)

                          +-                          -+
                          |  a11 + x a21, a12 + x a22  |
                          |                            |
                          |      a21,         a22      |
                          +-                          -+

Do you have questions or comments?
Copyright © SciFace Software GmbH & Co. KG 2000