Eleve a matriz ao poder sem o VBA

4

Eu preciso elevar uma matriz para uma grande potência (digamos 200), e não posso usar o VBA porque é para um usuário final cuja TI não permite a execução de macros.

Além disso, como o poder é grande, não é suficiente escrever uma fórmula extremamente grande como:

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

Onde m é o intervalo da minha matriz.

Existe uma maneira de fazer isso sem recorrer ao VBA?

Eu olhei em volta, e até agora parece que a resposta é não.

    
por Pedro Mattos 07.08.2015 / 15:36

2 respostas

3

Você pode fazer isso com um cálculo iterativo

  • marque a caixa: arquivo - opções - fórmulas - "ativar cálculos iterativos" (a partir da versão Excel 2007)
  • defina o valor "iterações máximas" para um número grande o suficiente (essa é a potência máxima que você pode aumentar a matriz)

  • Fórmulanacélulaauxiliar:
    =IF(ISNUMBER(G2),IF(G2=E2,TEXT(G2,"0"),G2+1),IF(VALUE(G2)=E2,G2,1))
  • Fórmula na matriz de resultados:
    =IF(ISNUMBER(G2),IF(G2=1,A2:C4,MMULT(A2:C4,H2:J4)),H2:J4)
    (esta é uma fórmula de matriz, precisa terminar com CTRL + SHIFT + ENTER)

Notas

  • A fórmula é recalculada APENAS se MUDANÇA DE ENERGIA , não será recalculada depois de alterar apenas a matriz de entrada, nem no recálculo de todas as fórmulas (pode ser feito, mas requer fórmula mais complexa e mais células auxiliares, deixe - me saber se você está interessado nisso).
  • Além disso, depois de inserir as duas fórmulas, a matriz de saída mostrará apenas 0 valores, para calculá-lo você precisa alterar a potência, a partir do qual a planilha será "inicializada", funcionará sem problemas
  • A verificação de erros
  • ainda não está implementada na fórmula:
    • se potência > número máximo de iterações, que a fórmula executará apenas os tempos do conjunto de iterações
    • da mesma forma, para números não inteiros ou negativos, a fórmula não será interrompida, mas será executada até o número máximo de iterações
    • após o número máximo de iterações atingidas a fórmula "transborda", conta para frente sem iniciar de 0, para fixar isso, defina uma potência que será alcançada no próximo ciclo de iteração (por exemplo, se ajudante = 500, número máximo de iteração = 100, então defina um < 500 < power < 600, portanto a fórmula irá parar corretamente e funcionará corretamente para a próxima configuração de potência).
  • maioria dos problemas descritos acima pode ser corrigida na fórmula, se necessário.

atualizar

Responda a esta questão descreva com mais detalhes como a fórmula funciona.

    
por 07.08.2015 / 16:25
1

Eu não acho que ele possa ser feito sem uma macro . Se você chegar à mesma conclusão, então aqui está uma macro que fará o trabalho rapidamente com grandes poderes:

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

Se você não conseguir contornar a restrição em macros VBA, talvez o Excel não seja a ferramenta correta para começar. Uma página da Web com javascript pode ser a melhor ferramenta.

    
por 07.08.2015 / 16:07