Текст подпрограммы и версий ( Фортран )
ame1r.zip , ame1d.zip , ame2r.zip , ame2d.zip
Тексты тестовых примеров ( Фортран )
tame1r.zip , tame1d.zip , tame2r.zip , tame2d.zip
Текст подпрограммы и версий ( Си )
ame1r_c.zip , ame1d_c.zip , ame2r_c.zip , ame2d_c.zip
Тексты тестовых примеров ( Си )
tame1r_c.zip , tame1d_c.zip , tame2r_c.zip , tame2d_c.zip
Текст подпрограммы и версий ( Паскаль )
ame1r_p.zip , ame1e_p.zip , ame2r_p.zip , ame2e_p.zip
Тексты тестовых примеров ( Паскаль )
tame1r_p.zip , tame1e_p.zip , tame2r_p.zip , tame2e_p.zip

Подпрограмма:  AME1R ( версия AME2R )

Назначение

Вычисление матричной экспоненты exp (AT) при большом по модулю значении скалярной переменной Т.

Математическое описание

Вычисляется функция от матрицы exp (AT) - матричная экспонента от произведения матрицы А и скалярной переменной T при большом по модулю значении скалярной величины T по формуле:

                   exp(AT)  =  ( exp(AT/N) )N , 

где N - некоторое целое положительное число, задаваемое при обращении к подпрограмме. Матричная экспонента exp (АТ/N) = exp (AH) аппроксимируется усеченным степенным рядом

                              14
                    F  =   ∑    (AH)k / k!
                             k=0 

Значение N предполагается таким, что погрешность аппроксимации exp (АН) - F является достаточно малой.

Использование

    SUBROUTINE  AME1R (A, T, M, N, E, R, R1, R2, IERR) 

Параметры

A - вещественный двумерный массив размера М на М, содержащий матрицу, входящую в матричную экспоненту;
T - скалярная величина, входящая в матричную экспоненту (тип: вещественный);
M - порядок матрицы А (тип: целый);
N - некоторое целое положительное число, участвующее в алгоритме вычисления матричной экспоненты. Значение N рекомендуется задавать таким, чтобы погрешность аппроксимации матричной экспоненты exp (AH) усеченным степенным рядом F была достаточно малой;
E - вещественный двумерный массив размера М на М, содержащий матрицу - результат exp (AT);
R - вещественный одномерный рабочий массив длины М;
R1, R2 - вещественные двумерные рабочие массивы размера М на М;
IERR - целая переменная, значение которой в результате работы подпрограммы полагается равным 65, если значение параметра N меньше 1. В этом случае вычисление матричной экспоненты прекращается.

Версии

AME2R -

вычисление матричной экспоненты exp (AT) при большом по модулю значении скалярной переменной T по формуле

               exp(AT) = ( exp(АТ/N) )N 

в случае, когда N не задается при обращении к подпрограмме, а выбирается в ней автоматически из условия, чтобы || АТ/N || < 1, а именно:

      exp(AT) = ( exp(AT / [ || А || * | Т | + 1 ] ) ) [ || А || * | Т |+1 ] , 
где [Х] - целая часть величины X, а || А || означает максимальную сумму модулей элементов матрицы А по строкам. Первый оператор подпрограммы имеет вид:
SUВRОUТINЕ   АМЕ2R (А, Т, М, Е, R, R1, R2).
Число параметров подпрограммы АМЕ2R на 2 меньше числа параметров подпрограммы АМЕ1R, при этом параметры подпрограммы АМЕ2R имеют тот же смысл, что и одноименные параметры АМЕ1R.
 AME1D -
 AME2D  
то же, что и АМЕ1R, АМЕ2R, но при этом все вычисления проводятся с удвоенным числом значащих цифр. При этом параметры А, T, E, R, R1, R2 должны иметь тип DОUВLЕ РRЕСISIОN.

Вызываемые подпрограммы

UTAM10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы АМЕ1R.
UTAM11 - подпрограмма выдачи диагностических сообщений при работе подпрограммы АМЕ1D.

Замечания по использованию

  При использовании подпрограмм АМЕ1R и АМЕ1D значение параметра N рекомендуется задавать таким, чтобы погрешность аппроксимации матричной экспоненты exp (AH) усеченным степенным рядом
                        14
                        ∑      (AH)k / k!
                       k=0
    то есть величина
                                                
                   exp(AH) - F  =     ∑     (AH)k / k!
                                               k=15
    была достаточно малой. 
Таким образом, выбором параметра N можно управлять точностью вычисления матричной экспоненты exp (AT). Значение параметров A, T, М, N при работе подпрограмм сохраняются.

Примеры использования

1)
                    | -1   3   0   0 |
           A  =  |  4  -2   0   0 |   ,     T  =  1
                    |  0   0  -3   3 |
                    |  0   0   4  -2 |

Вычисление матричной экспоненты производится с помощью подпрограммы АМЕ1D при значении параметра N = 16

      PROGRAM 02
      DIMENSION A(4, 4), E(4, 4), R(4, 4), R1(4, 4), R2(4, 4)
      DOUBLE PRECISION A, E, R, R1, R2, T
      DATA A(1, 1), A(2, 1), A(3, 1), A(4, 1), A(1, 2), A(2, 2), A(3, 2),
     *           A(4, 2), A(1, 3), A(2, 3), A(3, 3), A(4, 3), A(1, 4), A(2, 4),
     *           A(3, 4), A(4, 4) /-1.D0, 4.D0, 0.D0, 0.D0, 3.D0, -2.D0,
     *           0.D0, 0.D0, 0.D0, 0.D0, -3.D0, 4.D0, 0.D0, 0.D0, 3.D0, -2.D0/
      T = 1.D0
      M = 4
      N = 16
      CALL  AME1D (A, T, M, N, E, R, R1, R2, IERR)
      PRINT 1, IERR
      PRINT 2, E
   1 FORMAT('  IERR = ',  15)
   2 FORMAT(4D21.12)

Результаты:

      IERR = 0
      первая строка
                                       4.225205462389 + 000
                                       3.163850636542 + 000
                                       0.000000000000 + 000
                                       0.000000000000 + 000
      вторая строка
                                       4.218467515389 + 000
                                       3.170588583541 + 000
                                       0.000000000000 + 000
                                       0.000000000000 + 000
      третья строка
                                       0.000000000000 + 000
                                       0.000000000000 + 000
                                       1.166394356298 + 000
                                       1.163915604121 + 000
      четвертая строка
                                       0.000000000000 + 000
                                       0.000000000000 + 000
                                       1.551887472161 + 000
                                       1.554366224338 + 000 

2) Матрица A и скалярная величина T те же, что и в примере 1. Матричная экспонента  exp (AT) вычисляется с помощью подпрограммы АМЕ2R.

      PROGRAM 01
      DIMENSION A(4, 4), E(4, 4), R(4), R1(4, 4), R2(4, 4), E1(4, 4)
      DATA A /-1., 4., 0., 0., 3., -2., 0., 0., 0., 0., -3., 4., 0., 0., 3., -2./
      T = 1.
      M = 4
      CALL  AME2R (A, T, M, E, R, R1, R2)
      PRINT 1, E
      T = -1.
      CALL  AME2R (A, T, M, E1, R, R1, R2)
      PRINT 1, E1
      CALL  AM11R (E, E1, R, M)
      PRINT 1, E1
   1 FORMAT(4E21.11)

Результаты:

      4.22520546235 + 00    4.21846751535 + 00    0.00000000000 + 00
      3.16385063651 + 00    3.17058858350 + 00    0.00000000000 + 00
      0.00000000000 + 00    0.00000000000 + 00    1.16639435628 + 00
      0.00000000000 + 00    0.00000000000 + 00    1.16391560411 + 00
             
                                           0.00000000000 + 00
                                           0.00000000000 + 00
                                           1.55188747214 + 00
                                           1.55436622432 + 00

3) Матрица A та же, что и в первых двух примерах, T = -1. Матричная экспонента  exp (AT) вычисляется с помощью подпрограммы АМЕ2R.

      6.36829740628 + 01   -8.47301850395 + 01    0.00000000000 + 00
     -6.35476387796 + 01    8.48655203223 + 01    0.00000000000 + 00
      0.00000000000 + 00    0.00000000000 + 00    2.30688401754 + 02
      0.00000000000 + 00    0.00000000000 + 00   -1.72740391735 + 02
            
                                           0.00000000000 + 00
                                           0.00000000000 + 00
                                          -2.30320522314 + 02
                                           1.73108271176 + 02
       
Произведение матричных экспонент, вычисленных в  примерах 2 и 3:

      1.00000000000 + 00    0.00000000000 + 00    0.00000000000 + 00
     -2.32830643653  - 09    9.99999997672 - 01    0.00000000000 + 00
      0.00000000000 + 00    0.00000000000 + 00    9.99999998137  - 01
      0.00000000000 + 00    0.00000000000 + 00   -2.32830643653  - 10

                                           0.00000000000 + 00
                                           0.00000000000 + 00
                                          -1.86264514923  - 09
                                           9.99999999069  - 01