Численные методы в среде символьной математики. Программирование и решение задач: Учебно-методическое пособие, страница 11

Таблицу решения с заголовком без столбца аналитического решения можно получить, задав фактические параметры для F(h,k,m). Исполнение этого оператора в режиме Approximate (кнопка “»”) даст следующий результат:

F(0.01, 10, 5)

„  t        x1                x2         †

¦  0         1                 0         ¦

¦ 0.1  0.8090170388      -0.5877851838   ¦

¦ 0.2  0.3090171467      -0.9510564578   ¦

¦ 0.3  -0.3090167610     -0.9510565898   ¦

¦ 0.4  -0.8090167975     -0.5877855123   ¦

¦                                     -7 ¦

… 0.5       -1        - 4.075856339·10   ‡

По численным значениям двух крайних столбцов в операторе #9 видно, что абсолютная погрешность интегрирования с 50 точками на заданном интервале проявляется в седьмом десятичном знаке. Это особенно хорошо заметно на последней строке, где синус равен нулю.

Векторные и матричные процедуры

В утилите VECTOR.MTH размещено большое количество запрограммированных подобным образом операторов-процедур для преобразования векторных и матричных операндов. После загрузки утилиты в память задачи эти процедуры вызываются на исполнение по имени. В их список параметров нужно подставлять необходимые фактические параметры. Имена самих процедур со списком параметров могут тоже являться фактическим параметром.

Среди существующего множества процедур можно выделить такие:

OUTER(r, s) – возвращает результат в виде прямоугольной матрицы, соответствующей внешнему произведению двух матриц r и s .

Например, если определены векторы:

r := [a1, a2, a3]

s := [b, c]

то исполнение   OUTER(r, s)   даст следующий результат:

„ a1·b  a1·c †

¦ a2·b  a2·c ¦

… a3·b  a3·c ‡

APPEND_COLUMNS(A, B)  - сцепление матриц А и В столбцами  , например, пристыковка результата внешнего произведения и столбца, сформированного из вектора r , даст следующую матрицу:

              €„ a1·b  a1·c †      ‚

APPEND_COLUMNS¦¦ a2·b  a2·c ¦, [r]`¦

              … a3·b  a3·c ‡      ƒ

„ a1·b  a1·c  a1 †

¦ a2·b  a2·c  a2 ¦

… a3·b  a3·c  a3 ‡

MINOR(A, i, j) – возвращает копию матрицы А, у которой удалены  i–я  строка и  j–й  столбец, то есть минор матрицы А:

     €„ a1·b  a1·c  a1 †      ‚

MINOR¦¦ a2·b  a2·c  a2 ¦, 2, 1¦

     … a3·b  a3·c  a3 ‡      ƒ

„ a1·c  a1 †

… a3·c  a3 ‡

SWAP_ELEMENTS(v, i, j) – меняет i-тый и j-тый элементы вектора v местами:

SWAP_ELEMENTS(r, 1, 2)

[a2, a1, a3]

                    DIMENSION(B)            

MATPROD(A,B,i,j) :=      ¤       A    ·B– этот

                        n_=1      i,n_  n_,j

оператор вычисляет скалярное произведение i-того вектора-строки матрицы  A  на  j-тый   вектор-столбец   матрицы   B , например:

s := [b, c]

       €„ a1·c  a1 †            ‚

MATPROD¦¦          ¦, [s]`, 2, 1¦

       … a3·c  a3 ‡            ƒ

a3·(b·c + c)

SUBTRACT_ELEMENTS(A, i, j, k) – процедура, которая вместо i-того элемента помещает в вектор A значение разности i-того элемента и j-того элемента, умноженного на масштабный коэффициент k:. Определение этой процедуры выглядит следующим образом:

VECTOR(IF(m_ = i, A  - k·A , A  ), m_, DIMENSION(A))

                   i      j   m_                    

Новым в этом определении является использование встроенного условного оператора IF(). Его полное определения и частные случаи даны ниже. В приведенном выше операторе, если отношение (условие), помещенное на первом месте в списке параметров выполнено, то выполняется второй в списке оператор, иначе – третий.

Вторым важным здесь моментом является применение оператора VECTOR() с укороченным форматом списка параметров. Если начальное значение переменной цикла и/или шаг ее изменения равны единице, то последние из списка можно исключить.

Для матрицы A , как вектора с векторными кмпонентами, применение  рассматриваемой процедуры дает следующий результат:

     „ a11  a12  a13 †

A := ¦ a21  a22  a23 ¦

     … a31  a32  a33 ‡

SUBTRACT_ELEMENTS(A, 1, 2, k)

„ a11 - a21·k  a12 - a22·k  a13 - a23·k †

¦     a21          a22          a23     ¦

…     a31          a32          a33     ‡