Задание для лабораторной работы №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. Завершить работу.


.
