Текст подпрограммы и версий ( Фортран ) 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 |
Вычисление матричной экспоненты 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