De acordo com a resposta aqui , o número de condição grande (para solução linear do sistema) diminui o número garantido de dígitos corretos na solução de ponto flutuante. Matrizes de diferenciação de ordem superior em métodos pseudoespectrais são tipicamente muito condicionadas. Por que é que eles ainda são métodos muito precisos?
Entendo que a baixa precisão proveniente das matrizes mal condicionadas é apenas um valor garantido , mas ainda me faz pensar por que as matrizes mal condicionadas são resolvidas com precisão por métodos diretos na prática - por exemplo, as LCOL
colunas da Tabela 3.1 na página 11 de Wang et al., MÉTODO DE COLOCAÇÃO BEM CONDICIONADO USANDO UMA MATRIZ DE INTEGRAÇÃO PSEUDOSPECTRAL , SIAM J. Sci. Comput., 36 (3) .
spectral-method
precision
condition-number
Zoltán Csáti
fonte
fonte
Respostas:
Adicionado após minha resposta inicial:
Parece-me agora que o autor do artigo mencionado está fornecendo números de condição (aparentemente números de condição de 2 normas, mas possivelmente números de condição de infinito) na tabela, ao mesmo tempo em que fornece erros absolutos máximos em vez de erros relativos à norma ou erros relativos ao elemento ( todas são medidas diferentes.) Observe que o erro relativo máximo elemento a elemento não é o mesmo que o erro relativo de norma infinita. Além disso, os erros na tabela são relativos à solução exata do problema original do valor-limite da equação diferencial e não ao sistema linear discretizado de equações. Portanto, as informações fornecidas no documento realmente não são apropriadas para uso com o erro vinculado com base no número da condição.
No entanto, em minha replicação dos cálculos, vejo situações em que o erro relativo da norma infinito (ou erro relativo de duas normas) é substancialmente menor que o limite definido pelo número da condição de infinito-norma (número da condição de 2 normas, respectivamente). Às vezes você apenas tem sorte.
Usei o pacote DMSUITE MATLAB e resolvi o problema de exemplo deste artigo usando o método pseudoespectral com polinômios de Chebyshev. Meus números de condição e erros absolutos máximos foram semelhantes aos relatados no artigo.
Também vi erros relativos à norma que eram um pouco melhores do que se poderia esperar com base no número da condição. Por exemplo, no problema de exemplo com , usando N = 1024 , receboϵ=0.01 N=1024
cond (A, 2) = 7,9e + 8
cond (A, inf) = 7,8e + 8
norma (u-uexact, 2) / norma (uexact, 2) = 3.1e-12
norma (u-uexact, inf) / norma (uexact, inf) = 2.7e-12
Parece que a solução é boa para cerca de 11 a 12 dígitos, enquanto o número da condição é da ordem de 1e8.
No entanto, a situação com erros por elementos é mais interessante.
max (abs (u-uexact)) = 2,7e-12
Ainda parece bom.
max (abs ((u-uexact) ./exexact) = 6,1e + 9
Uau - há um erro relativo muito grande em pelo menos um componente da solução.
O que aconteceu? A solução exata dessa equação possui componentes que são minúsculos (por exemplo, 1,9e-22), enquanto a solução aproximada atinge um valor muito maior de 9e-14. Isso é oculto pela medição de erro relativo da norma (seja a norma 2 ou infinito) e só se torna visível quando você olha para os erros relativos aos elementos e obtém o máximo.
Minha resposta original abaixo explica por que você pode obter um erro relativo da norma na solução que é menor que o limite fornecido pelo número da condição.
Como você observou na pergunta, o número da condição, , de uma matriz não singular fornece um erro relativo de pior caso vinculado à solução para um sistema perturbado de equações. Ou seja, se resolvermos A ( x + Δ x ) = b + Δ b exatamente e resolver A x = b exatamente, entãoκ(A) A(x+Δx)=b+Δb Ax=b
Os números de condição podem ser calculados com relação a uma variedade de normas, mas o número de condição com duas normas é frequentemente usado, e esse é o número de condição usado no artigo a que você se refere.
O pior caso de erro ocorre quando é um vector singular esquerda de um correspondente para o menor valor singular de um . O melhor caso ocorre quando Δ b é um vector singular esquerda de uma correspondente ao maior valor singular de um . Quando Δ b é aleatório, é necessário observar as projeções de Δ b em todos os vetores singulares esquerdos de A e nos valores singulares correspondentes. Dependendo do espectro de A , as coisas podem correr muito mal ou muito bem.Δb A A Δb A A Δb Δb A A
Considere duas matrizes , ambas com número de condição de 2 normas 1.0 × 10 10 . A primeira matriz possui os valores singulares 1 , 1 × 10 - 10 , … , 1 × 10 - 10 . A segunda matriz possui valores singulares 1 , 1 , … , 1 , 1 × 10 - 10 .A 1.0×1010 1 1×10−10 … 1×10−10 1 1 … 1 1×10−10
No primeiro caso, é improvável que uma perturbação aleatória esteja na direção do primeiro vetor singular esquerdo e seja mais provável que esteja perto de um dos vetores singulares com valor singular . Portanto, a mudança relativa na solução provavelmente será muito grande. No segundo caso, quase qualquer perturbação estará próxima em direção a um vetor singular com valor singular 11×10−10 1 , e a mudança relativa na solução será pequena.
PS (adicionado mais tarde depois que voltei da aula de ioga ...)
A fórmula da solução para éAΔx=Δb
Pelo teorema de Pitágoras,
Se continuarmos , então esta soma é maximizado quando Δ b = U n e minimizado quando Δ b = L 1 .∥Δb∥2=1 Δb=Un Δb=U1
Na situação considerada aqui, é o resultado de erros de arredondamento aleatórios, portanto, os valores de U T i Δ b devem ser aproximadamente da mesma magnitude. Os termos com valores menores de σ i contribuirão muito para o erro, enquanto os termos com valores maiores de σ i não contribuirão muito. Dependendo do espectro, isso pode ser facilmente muito menor que o pior caso vinculado.Δb UTiΔb σi σi
fonte
?getrs
tl; dr Eles relataram um número de condição, não necessariamente o número de condição correto para a matriz, porque há uma diferença.
Isso é específico para a matriz e o vetor do lado direito. Se você olhar para a documentação
*getrs
, ele diz que o erro para a frente ligado é Aquicond(A,x)não é o habitual condição de númerok∞(A), mas sim cond(A,x)=‖| A - 1Para o seu exemplo, usei um operador diferencial pseudoespectral para um problema semelhante com e, de fato, há uma grande diferença entre ″ | A - 1 | | Um | ″ E κ ∞ ( A ) , calculei 7 × 10 3 e 2,6 × 10 7n=128 ∥|A−1||A|∥ κ∞(A) 7×103 2.6×107 , o que é suficiente para explicar a observação de que isso acontece para todos os lados do lado direito, porque as ordens de magnitudes correspondem aproximadamente ao que é visto na Tabela 3.1 (3-4 ordena erros melhores). Isso não funciona quando tento o mesmo para apenas uma matriz aleatória e mal condicionada; portanto, ela deve ser uma propriedade de A .
Um exemplo explícito para o qual os dois números de condição não coincidem, que tirei de Higham (7.17, p.124), devido a Kahan é Outro exemplo que encontrei é apenas a matriz de Vandermonde simples,combaleatório. Passeie algumas outras matrizes mal condicionadas também produzem esse tipo de resultado, comoe
[1:10]
MatrixDepot.jl
triw
moler
.Essencialmente, o que está acontecendo é que, quando você analisa a estabilidade da solução de sistemas lineares em relação a perturbações, primeiro precisa especificar quais perturbações está considerando. Ao resolver sistemas lineares com LAPACK, esse erro associado considera perturbações em componentes em , mas nenhuma perturbação em b . Portanto, isso é diferente do habitual κ ( A ) = " A - 1 " " A " , que considera perturbações normwise em A e bA b κ(A)=∥A−1∥∥A∥ A b .
Considere (como um contra-exemplo) também o que aconteceria se você não fizer a distinção. Sabemos que usando o refinamento iterativo com precisão dupla (veja o link acima), podemos obter o melhor erro relativo possível de para as matrizes com κ ( A ) ≪ 1 / u . Portanto, se considerarmos a idéia de que sistemas lineares não podem ser resolvidos com precisão melhor que κ ( A ) u , como as soluções de refino possivelmente funcionariam?O(u) κ(A)≪1/u κ(A)u
?getrs
(A + E)x = b
Edit 2 Here is another example of the same phenomenon where the different conditions numbers unexpectedly differ by a lot. This time,
Average case (almost 9 orders of magnitude better error):
Worst case (a=1,…,12 ):
Edit 3 Another example is the Forsythe matrix, which is a perturbed Jordan block of any size of the form
Edit 4 Kahan matrices are also like this, withcond(A)≪κ(A) :
fonte