Консультация № 200411
13.03.2021, 18:21
0.00 руб.
1 2 1
Прошу помощи в данном вопросе, заранее извините что не пишу в виде формул (пытался, не получается)
Заранее спасибо
Прикрепленные файлы:
f3c692e4a02cc8a6336c09ceb2885f221b1192d3.png

Обсуждение

давно
Модератор
137394
1850
13.03.2021, 20:05
общий
13.03.2021, 20:10
Адресаты:
Объясните, что Вам нужно: написать макрос?
B=A4=A*A*A*A; ?
||A|| и ||B|| - определители? Методика вычисления как-то определена?
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
14.03.2021, 14:33
общий
это ответ
Здравствуйте, 23071996!
Вот первый способ:
Задача решена без привлечения макроса. Файл ya210313.xlsx (14.0 кб)
Получение размерности матрицы и её генерация осуществляется по клавише F9 (пересчет листа). Результат на экране:


Второй способ:
Задача решена посредством макроса. Файл ya210313.xlsm (25.4 кб)
Тут я был на распутье: то ли использовать стандартную функцию листа для перемножения матриц, то ли написать свою. Выбрал второй вариант. Определители считаются стандартной функцией листа: написать свою функцию вычисления определителя слишком трудоемко.
Код:
Sub rrr()

Const Nmin = 7 ' Минимальная размерность матриц
Const Nmax = 15 ' Максимальная размерность матриц
Const R1A = "C6" ' Адрес ячейки с элементом A11
Const R1B = "T6" ' Адрес ячейки с элементом B11
Const RN = "B3" ' Адрес ячейки для отображения размерности матрицы N
Const RDA = "H3" ' Адрес ячейки для отображения определителя ||A||
Const RDB = "X3" ' Адрес ячейки для отображения определителя ||B||

Dim N, i, j, k
Dim RRA, RRB

Randomize
N = Int((Nmax - Nmin + 1) * Rnd + Nmin) ' Определение размерности матрицы случайным образом

RRA = R1A + ":" + Range(R1A).Offset(N - 1, N - 1).Address
RRB = R1B + ":" + Range(R1B).Offset(N - 1, N - 1).Address

ReDim A(1 To N, 1 To N)
ReDim B(1 To N, 1 To N)

For i = 1 To N ' Заполнение матрицы A
k = 1
For j = 1 To N
If j < i Then
A(i, j) = 0
Else
k = k + 1
A(i, j) = k
End If
Next
Next

Call Matrix(A, A, B, N)
Call Matrix(B, A, B, N)
Call Matrix(B, A, B, N)

Range(R1A + ":" + Range(R1A).Offset(Nmax - 1, Nmax - 1).Address).ClearContents
Range(R1B + ":" + Range(R1B).Offset(Nmax - 1, Nmax - 1).Address).ClearContents

Range(RN) = N
Range(RRA) = A
Range(RRB) = B
Range(RDA) = Application.WorksheetFunction.MDeterm(A)
Range(RDB) = Application.WorksheetFunction.MDeterm(B)

End Sub

Sub Matrix(M1, M2, M12, N) ' Процедура перемножения квадратных матриц.
ReDim TMP(1 To N, 1 To N)
Dim i, j, k
For i = 1 To N
For j = 1 To N
TMP(i, j) = 0
For k = 1 To N
TMP(i, j) = TMP(i, j) + M1(i, k) * M2(k, j)
Next
Next
Next

For i = 1 To N
For j = 1 To N
M12(i, j) = TMP(i, j)
Next
Next
End Sub
Результат сюда не вывожу. Я использовал в этой книге форматирование из первого способа+добавил кнопочку для запуска макроса, так что вид результата отличается очень мало. Однако этот макрос можно запустить на любом рабочем листе, при этом форматирование для удобочитаемости ответа ляжет на Вас: задача форматирования результатов макросом не ставилась.
5
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Форма ответа