Eu tenho um sistema linear não homogêneo
onde é uma matriz real com . O espaço nulo de é garantido como de dimensão zero, portanto a equação possui um inverso exclusivo . Como o resultado entra no lado direito de uma ODE, que pretendo resolver usando um método adaptativo, é importante que a solução seja suave em relação às pequenas variações dos elementos de e . Devido a esse requisito e à pequena dimensionalidade, pensei em implementar fórmulas explícitas paran × n n ≤ 4 A x = A - 1 b A b A - 1 b. Os elementos podem ser exatamente zero ou assumir valores muito diferentes. Minha pergunta é se isso faz sentido para você e se existem expressões estáveis conhecidas para isso. Estou codificando em C para sistemas x86.
fonte
Respostas:
Antes de implementar fórmulas explícitas, eu me perguntava: "vale a pena?":
Meu conselho: use a combinação BLAS / LAPACK primeiro, veja se funciona, analise o programa inteiro, peça a um aluno para implementar fórmulas explícitas (desculpe, sendo sarcástico aqui) e faça uma comparação em velocidade e robustez.
fonte
O único resultado inverso explícito que conheço é a Regra de Cramer , que recentemente demonstrou ser computável em (como a eliminação gaussiana; insegura da constante na frente do fator principal, Apesar).O(n3)
A matriz inversa de é uma função suave de , desde que , e a solução é certamente uma função suave de , desde que o lado direito do ODE seja suave função de e você evita casos em que é deficiente na classificação, eu acho que seu lado direito seria suave. (Aqui, entendo suave como "pelo menos duas vezes continuamente diferenciável".)A A x b x Adet(A)≠0 x b x A
Para ser seguro, provavelmente é melhor garantir que também não seja numericamente deficiente em classificação (ou seja, não possua valores singulares pequenos).A
O problema com a Regra de Cramer é que suas propriedades de estabilidade são desconhecidas, exceto (que é estável para a frente, mas não para trás). (Veja Precisão e estabilidade de algoritmos numéricos , 2ª edição, por N. Higham.) Não é considerado um algoritmo confiável; A eliminação gaussiana com giro parcial (GEPP) é favorecida.n=2
Eu esperaria que o problema de usar o BLAS + LAPACK para executar o GEPP em uma solução ODE fosse qualquer diferenciação finita usada em um método ODE implícito. Eu sei que as pessoas resolveram programas lineares como parte de uma avaliação do lado direito e, como o fizeram de maneira ingênua (apenas conectaram o programa linear ao lado direito, chamando um algoritmo simplex), reduziram bastante a precisão de seus solução computada e aumentou substancialmente o tempo necessário para resolver o problema. Um colega meu descobriu como resolver esses problemas de uma maneira muito mais eficiente e precisa; Vou ter que olhar para ver se a publicação dele já foi lançada. Você pode ter um problema semelhante, independentemente de optar por usar o GEPP ou a Regra do Cramer.
Se houver alguma maneira de calcular uma matriz jacobiana analítica para o seu problema, convém fazer isso para evitar algumas dores de cabeça numéricas. Será mais barato avaliar, e provavelmente mais preciso, do que uma aproximação por diferença finita. Expressões para a derivada da matriz inversa podem ser encontradas aqui, se você precisar delas. Avaliar a derivada da matriz inversa parece exigir pelo menos duas ou três soluções lineares do sistema, mas todas elas terão a mesma matriz e diferentes lados do lado direito, portanto, não seria consideravelmente mais caro que um único sistema linear resolver.
E se houver alguma maneira de comparar sua solução computada com uma solução com valores de parâmetros conhecidos, eu faria isso, para que você possa diagnosticar se encontrou alguma dessas armadilhas numéricas.
fonte
Não tenho certeza de que possa ajudar, mas acho que quando você fala sobre solução estável, você está falando sobre métodos de aproximação. Quando você calcula as coisas explicitamente, a estabilidade não tem sentido. Isso quer dizer que você deve aceitar uma solução aproximada se quiser ganhar estabilidade.
fonte