Задание для лабораторной работы №2

Реализовать приводимый ниже алгоритм вычисления обобщенной обратной матрицы Дразина к квадратной матрице A размерности n, используя программу лабораторной №1.

Определение. Пусть А — квадратная матрица. Тогда обобщенной обратной матрицей Дразина к матрице А называется решение матричной системы уравнений

АХ=ХА, ХАХ=Х, ХАk+1=Аk. (1)

Здесь k — индекс матрицы А, т.е. наименьшее целое неотрицательное число, для которого rank(Ak+1)= rank(Ak). Известно, что такая система имеет единственное решение. Обозначают Х=АD.

Система (1) служит для проверки правильности найденного решения AD (проверку лучше всего оформить в виде подпрограммы), а само решение определяется равенством

, (2)

где k — индекс матрицы А. Если средние квадратические разности левых и правых частей каждого равенства (1) не будут превышать заданной величины Del, то задача вычисления матрицы Дразина считается решенной.

Пример. Исходная матрица имеет вид

.

В результате вычислений получаем: индекс исходной матрицы А равен 2, матрица Дразина

Алгоритм:

Шаг 1. Объявить параметры подпрограммы вычисления обобщенной обратной матрицы Дразина.

N - порядок исходной матрицы A (вход),

IK - индекс матрицы A (выход),

Eps - значение точности выявления линейной зависимости столбцов матрицы (вход),

Del - допустимая погрешность счета псевдообратной матрицы и обобщенной обратной матрицы Дразина (вход),

WG - индикатор правильности счета псевдообратной матрицы (выход),

WF3 - индикатор правильности счета обобщенной обратной матрицы Дразина (выход),

НЕ нашли? Не то? Что вы ищете?

A[N,N] - исходная матрица (вход),

AD[N,N] - результат - обобщенная обратная матрица Дразина (выход),

D[N], M1[N,N], M2[N,N], M3[N,N], AN[N,N], A2N1[N,N], R[N,N] - вспомогательные массивы.

Шаг 2. Вычислить псевдообратную матрицу и записать ее в AD, для этого вызвать подпрограмму псевдообращения по методу Гревилля с параметрами N, Eps, Del, WG, A, AD, M1, M2, D.

Шаг 3. Установить IK=0. Если WG=true (т.е. псевдообратная матрица вычислена с заданной точностью Del), то вызвать подпрограмму проверки по трем формулам системы (1) правильности расчета матрицы Дразина (поскольку псевдообратная матрица может случайно оказаться обобщенной обратной матрицей Дразина) с параметрами N, IK, Del, WF3, A, AD, M1, M2, M3, описанную в шагах 4-37, затем перейти к шагу 38, иначе перейти к шагу 39.

Шаг 4. (Подпрограмма проверки правильности расчета матрицы Дразина имеет параметры N, K, Del, W, A, AD, A1, A2, A3). Объявить вспомогательные переменные подпрограммы: D1, D2, D3.

Шаг 5. Установить W=true, NN=N*N, D1=0, D@=0, D#=0.

Шаг 6. В массив A1 записать результат умножения матриц A и AD. В массив A2 записать результат умножения матриц AD и A.

Шаг 7. Для i=1,2,...,N выполнить шаг 8. Затем перейти к шагу 10.

Шаг 8. Для j=1,2,...,N выполнить шаг 9. Затем вернуться (с продолжением шага 7) к шагу 7.

Шаг 9. Установить D1=D1+(A1[i,j]-A2[i,j])^2.

Шаг 10. В массив A2 записать результат умножения матриц AD и A1.

Шаг 11. Для i=1,2,...,N выполнить шаг 12. Затем перейти к шагу 14.

Шаг 12. Для j=1,2,...,N выполнить шаг 13. Затем вернуться к шагу 11.

Шаг 13. Установить D2=D2+(A2[i,j]-AD[i,j])^2.

Шаг 14. Если K<>0, перейти к шагу 18.

Шаг 15. Для i=1,2,...,N выполнить шаг 16. Затем перейти к шагу 30.

Шаг 16. Для j=1,2,...,N выполнить шаг 17. Затем вернуться к шагу 15.

Шаг 17. Если i=j, установить A2[i,j]=1, иначе установить A2[i,j]=0.

Шаг 18. Для i=1,2,...,N выполнить шаг 19. Затем перейти к шагу 21.

Шаг 19. Для j=1,2,...,N выполнить шаг 20. Затем вернуться к шагу 18.

Шаг 20. Установить A2[i,j]=A[i,j].

Шаг 21. В массив A3 записать результат умножения матриц A2 и A.

Шаг 22. Если K=1, перейти к шагу 29.

Шаг 23. Установить k1=K-1.

Шаг 24. Для IK=1,2,...,k1 выполнить шаги 25-28. Затем перейти к шагу 29.

Шаг 25. Для i=1,2,...,N выполнить шаг 26. Затем вернуться к шагу 24.

Шаг 26. Для j=1,2,...,N выполнить шаг 27. Затем вернуться к шагу 25.

Шаг 27. Установить A2[i,j]=A3[i,j].

Шаг 28. В массив A3 записать результат умножения матриц A2 и A.

Шаг 29. В массив A1 записать результат умножения матриц A3 и AD.

Шаг 30. Для i=1,2,...,N выполнить шаг 31. Затем перейти к шагу 33.

Шаг 31. Для j=1,2,...,N выполнить шаг 32. Затем вернуться к шагу 30.

Шаг 32. Установить D3=D3+(A1[i,j]-A2[i,j])^2.

Шаг 33. Установить D1=sqrt(D1/NN), D2=sqrt(D2/NN), D3=sqrt(D3/NN).

Шаг 34. Если D1>Del или D2>Del или D3>Del , перейти к шагу 36.

Шаг 35. Вывести сообщение "Проверка показала, что вычисленная матрица AD является матрицей Дразина". Перейти к шагу 37.

Шаг 36. Вывести сообщение "Проверка показала, что некоторые из вычисленных погрешностей превышают заданную, а именно:"

"Средняя разность A*AD и AD*A = ", D1,

"Средняя разность AD*A*AD и AD = ", D2,

"Средняя разность A^(k+1)*AD и A^k = ", D3,

"где k - индекс матрицы A".

Установить W=false.

Шаг 37. Завершить подпрограмму и вернуться в точку вызова.

Шаг 38. Если WF3=true, перейти к шагу 62.

Шаг 39. Для i=1,2,...,N выполнить шаг 40. Затем перейти к шагу 42.

Шаг 40. Для j=1,2,...,N выполнить шаг 41. Затем вернуться к шагу 39.

Шаг 41. Установить AN[i,j]=A[i,j].

Шаг 42. Установить n1=N+1.

Шаг 43. Для k=1,2,...,n1 выполнить шаги 44-59. Затем перейти к шагу 60.

Шаг 44. Установить IK=K-1.

Шаг 45. Если IK=1, перейти к шагу 51.

Шаг 46. В массив R записать результат умножения матриц AN и A.

Шаг 47. Для i=1,2,...,N выполнить шаг 48. Затем перейти к шагу 51.

Шаг 48. Для j=1,2,...,N выполнить шаг 49. Затем вернуться к шагу 47.

Шаг 49. Установить AN[i,j]=R[i,j].

Шаг 50. Вывести сообщение "Ошибка! Этот шаг алгоритма никогда не выполняется при корректной реализации алгоритма".

Шаг 51. В массив R записать результат умножения матрицы AN на себя.

Шаг 52. В массив A2N1 записать результат умножения матриц R и A.

Шаг 53. Вычислить псевдообратную матрицу и записать ее в R, для этого вызвать подпрограмму псевдообращения по методу Гревилля с параметрами N, Eps, Del, WG, A2N1, R, M1,M2, D.

Шаг 54. Если WG=true, то перейти к шагу 55, иначе перейти к шагу 59.

Шаг 55. В массив M1 записать результат умножения матриц AN и R.

Шаг 56. В массив AD записать результат умножения матриц M1 и AN.

Шаг 57. Вызвать подпрограмму проверки правильности расчета матрицы Дразина с параметрами N, IK, Del, WF3, A, AD, M1, M2, M3.

Шаг 58. Если WF3=true, перейти к шагу 62.

Шаг 59. Перейти к следующей итерации цикла по переменной k (вернуться к шагу 43).

Шаг 60. Вывести сообщение "При заданной точности Eps выявления линейной зависимости столбцов в процесссе построения обобщенных обратных матриц заданная допустимая погрешность Del вычисления обобщенной обратной матрицы Дразина не достигается. Вычислить обобщенную обратную матрицу Дразина не удается".

Шаг 61. Перейти к шагу 63.

Шаг 62. Вывести матрицу Дразина AD.

Шаг 63. Завершить работу.