Підняти матрицю до живлення без VBA


4

Мені потрібно підняти матрицю до великої потужності (скажімо, 200), і я не можу використовувати VBA, оскільки це для кінцевого користувача, чий ІТ не дозволяє запускати макроси.

Оскільки потужність велика, недостатньо буде написати надзвичайно велику формулу, наприклад:

=MMULT(m,MMULT(m,MMULT(m..... )))

Де m - діапазон моєї матриці.

Чи є спосіб це зробити, не вдаючись до VBA?

Я озирнувся, і поки здається, що відповідь - ні.

Відповіді:


3

Це можна зробити за допомогою ітеративного розрахунку

  • встановіть прапорець: файл - параметри - формули - "включити ітераційні обчислення" (від версії Excel 2007)
  • встановіть значення "максимальних ітерацій" на число, достатньо велике (це максимальна потужність, яку ви можете підняти матрицею)

введіть тут опис зображення

  • Формула в клітині хелпера:
    =IF(ISNUMBER(G2),IF(G2=E2,TEXT(G2,"0"),G2+1),IF(VALUE(G2)=E2,G2,1))
  • Формула в матриці результатів:
    =IF(ISNUMBER(G2),IF(G2=1,A2:C4,MMULT(A2:C4,H2:J4)),H2:J4)
    (це формула масиву, потрібно закінчити CTRL + SHIFT + ENTER)

Примітки

  • Формула перераховується ТІЛЬКИ, якщо ви ЗМІНУЄМО МОЖЛИВОСТІ , вона не буде перерахована після зміни лише вхідної матриці, ані при перерахунку всіх формул (це можна зробити, але вимагає більш складної формули та більше допоміжних осередків. Дайте мені знати, чи ви цікавить це).
  • Також після введення обох формул вихідна матриця покаже лише 0 значень, щоб її обчислити потрібно змінити потужність, з цього аркуш буде "ініціалізований", він буде працювати без проблем
  • перевірка помилок ще не реалізована у формулі:
    • якщо потужність> максимальна кількість ітерацій, то формула виконуватиме лише встановлені часи ітерації
    • аналогічно, для нецілих чи від’ємних чисел формула не зупиниться, але працюватиме до максимальної кількості ітерацій
    • після досягнення максимальної кількості ітерацій формула буде «переповнена», рахується вперед, не починаючи з 0, щоб виправити це, встановіть потужність, яка буде досягнута в наступному циклі ітерації (наприклад, якщо helper = 500, max max ітерації = 100, то встановіть 500 <потужність <600, тому формула буде правильно зупинятися на цьому, і вона буде правильно працювати для наступного встановлення потужності).
  • Більшість питань, описаних вище, при необхідності можуть бути вирішені у формулі.

оновлення

Відповідь на це питання докладніше опишіть, як працює формула.


Це дивно, але я спробував ідеально повторити ваш аркуш, але це не вийде! Чи має значення параметр Максимальна зміна у Включенні ітеративних обчислень? він встановлений на 0,001 прямо зараз.
Педро Маттос

Принаймні для мого прикладу він повинен працювати з налаштуваннями за замовчуванням (0,001). Що відбувається у вашому аркуші?
Máté Juhász

Це все нулі!
Педро Маттос

Я маю на увазі відповідь
Педро Маттос

1
Я доповнив свою відповідь, будь ласка, подивіться на неї. Якщо це все ще не працює, я завантажую зразок файлу, який працює.
Máté Juhász

1

Я не думаю, що це можна зробити без макросу . Якщо ви прийшли до того ж висновку, то ось макрос, який швидко зробить роботу при великих повноваженнях:

Function PowerMatrix(Matrix As Range, Power As Long) As Variant
    Dim Result As Variant
    Dim Square As Variant
    Dim i As Long

    Square = Matrix

    For i = 0 To 31
        If (Power And 2 ^ i) Then
            If IsEmpty(Result) Then
                Result = Square
            Else
                Result = Application.WorksheetFunction.MMult(Square, Result)
            End If
        End If
        If 2 ^ i >= Power Then Exit For
        Square = Application.WorksheetFunction.MMult(Square, Square)
    Next
    PowerMatrix = Result
End Function

Якщо ви не можете обійти обмеження на макроси VBA, можливо, Excel не є правильним інструментом для початку. Кращим інструментом може стати веб-сторінка з javascript.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.