Selon la réponse ici , un grand nombre de conditions (pour la résolution de systèmes linéaires) diminue le nombre garanti de chiffres corrects dans la solution à virgule flottante. Les matrices de différenciation d'ordre supérieur dans les méthodes pseudospectrales sont généralement très mal conditionnées. Pourquoi est-ce alors que ce sont encore des méthodes très précises?
Je comprends que la faible précision provenant des matrices mal conditionnées n'est qu'une valeur garantie , mais je me demande quand même pourquoi les matrices mal conditionnées sont résolues avec précision par des méthodes directes dans la pratique - par exemple, les LCOL
colonnes du tableau 3.1 à la page 11 de Wang et al., UNE MÉTHODE DE COLLOCATION BIEN CONDITIONNÉE UTILISANT UNE MATRICE D'INTÉGRATION PSEUDOSPECTRALE , SIAM J. Sci. Comput., 36 (3) .
la source
Réponses:
Ajouté après ma réponse initiale:
Il me semble maintenant que l'auteur de l'article référencé donne des numéros de condition (apparemment des numéros de condition à 2 normes mais peut-être des numéros de condition à l'infini) dans le tableau tout en donnant un maximum d'erreurs absolues plutôt que des erreurs relatives de norme ou des erreurs relatives maximales par élément ( ce sont toutes des mesures différentes.) Notez que l'erreur relative maximale élément par élément n'est pas la même chose que l'erreur relative de norme infinie. De plus, les erreurs dans le tableau sont relatives à la solution exacte du problème d'origine de la valeur limite de l'équation différentielle plutôt qu'au système linéaire discrétisé d'équations. Ainsi, les informations fournies dans le document ne sont vraiment pas appropriées pour une utilisation avec la borne d'erreur basée sur le numéro de condition.
Cependant, dans ma réplication des calculs, je vois des situations où l'erreur de norme relative à l'infini (ou l'erreur relative à deux normes) est sensiblement plus petite que la limite définie par le nombre de conditions à la norme à l'infini (respectivement le nombre de conditions à 2 normes). Parfois, vous avez juste de la chance.
J'ai utilisé le package DMSUITE MATLAB et résolu l'exemple de problème de cet article en utilisant la méthode pseudospectrale avec les polynômes de Chebyshev. Mes numéros de condition et les erreurs absolues maximales étaient similaires à ceux rapportés dans le document.
J'ai également vu des erreurs relatives à la norme qui étaient un peu mieux que ce à quoi on pourrait s'attendre en fonction du numéro de condition. Par exemple, sur l'exemple de problème avec , en utilisant N = 1024 , j'obtiensϵ = 0,01 N= 1024
cond (A, 2) = 7,9e + 8
cond (A, inf) = 7,8e + 8
norme (u-uexact, 2) / norme (uexact, 2) = 3.1e-12
norme (u-uexact, inf) / norme (uexact, inf) = 2,7e-12
Il semblerait que la solution soit bonne à environ 11-12 chiffres, alors que le numéro de condition est de l'ordre de 1e8.
Cependant, la situation avec des erreurs par élément est plus intéressante.
max (abs (u-uexact)) = 2,7e-12
Cela semble toujours bon.
max (abs ((u-uexact) ./ uexact) = 6,1e + 9
Wow - il y a une très grande erreur relative dans au moins un composant de la solution.
Qu'est-il arrivé? La solution exacte de cette équation a des composants qui sont minuscules (par exemple 1,9e-22) tandis que la solution approximative se termine à une valeur beaucoup plus grande de 9e-14. Ceci est masqué par la mesure d'erreur relative de norme (que ce soit la norme 2 ou la norme infini) et ne devient visible que lorsque vous regardez les erreurs relatives élément par élément et prenez le maximum.
Ma réponse originale ci-dessous explique pourquoi vous pouvez obtenir une erreur relative normale dans la solution qui est inférieure à la limite donnée par le numéro de condition.
Comme vous l'avez noté dans la question, le nombre de conditions, , d'une matrice non singulière donne une erreur relative dans le pire des cas liée à la solution d'un système d'équations perturbé. Autrement dit, si nous résolvons A ( x + Δ x ) = b + Δ b exactement et résolvons A x = b exactement, alorsκ ( A ) A ( x + Δ x ) = b + Δ b A x = b
Les numéros de condition peuvent être calculés par rapport à une variété de normes, mais le numéro de condition à deux normes est souvent utilisé, et c'est le numéro de condition utilisé dans le document auquel vous vous référez.
Le pire des cas d' erreur se produit lorsque est un vecteur singulier gauche de A correspondant à la plus petite valeur singulière de A . Le meilleur cas se produit lorsque Δ b est un vecteur singulier gauche de A correspondant à la plus grande valeur singulière de A . Lorsque Δ b est aléatoire, alors vous devez regarder les projections de Δ b sur tous les vecteurs singuliers gauches de A et les valeurs singulières correspondantes. Selon le spectre de A , les choses peuvent aller très mal ou très bien.Δ b UNE UNE Δ b UNE UNE Δ b Δ b UNE UNE
Considérons deux matrices , toutes deux avec le numéro de condition à 2 normes 1.0 × 10 10 . La première matrice a les valeurs singulières 1 , 1 × 10 - 10 , … , 1 × 10 - 10 . La deuxième matrice a des valeurs singulières 1 , 1 , … , 1 , 1 × 10 - 10 .UNE 1,0 × 10dix 1 1 × 10-10 … 1 ×10- 10 1 1 … 1 1 × 10- 10
Dans le premier cas, une perturbation aléatoire est peu susceptible d'être dans la direction du premier vecteur singulier gauche, et plus susceptible d'être proche de l'un des vecteurs singuliers de valeur singulière . Ainsi, le changement relatif dans la solution est susceptible d'être très important. Dans le second cas, presque toute perturbation sera proche de la direction d'un vecteur singulier avec une valeur singulière 1 , et le changement relatif dans la solution sera petit.1 × 10- 10 1
PS (ajouté plus tard après mon retour de cours de yoga ...)
La formule pour la solution de estA Δ x = Δ b
Par le théorème de Pythagore,
Si nous gardons , alors cette somme est maximisée lorsque Δ b = U n et minimisée lorsque Δ b = U 1 .∥Δb∥2=1 Δb=Un Δb=U1
Dans la situation considérée ici, est le résultat d'erreurs d'arrondi aléatoires, donc les valeurs U T i Δ b devraient toutes être à peu près de la même ampleur. Les termes avec des valeurs plus petites de σ i contribueront beaucoup à l'erreur, tandis que les termes avec des valeurs plus grandes de σ i ne contribueront pas beaucoup. Selon le spectre, cela pourrait facilement être beaucoup plus petit que le pire des cas.Δb UTiΔb σi σi
la source
?getrs
tl; dr Ils ont signalé un numéro de condition, pas nécessairement le bon numéro de condition pour la matrice, car il y a une différence.
Ceci est spécifique à la matrice et au vecteur de droite. Si vous regardez la documentation de
*getrs
, elle indique que la limite d'erreur directe estFor your example, I took a pseudospectral differential operator for a similar problem withn=128 , and there is in fact a big difference between ∥|A−1||A|∥ and κ∞(A) , I computed 7×103 and 2.6×107 , which is enough to explain the observation that this happens for all right hand sides, because the orders of magnitudes roughly match what is seen in Table 3.1 (3-4 orders better errors). This doesn't work when I try the same for just a random ill-conditioned matrix, so it has to be a property of A .
An explicit example for which the two condition numbers don't match, which I took from Higham (7.17, p.124), due to Kahan is
[1:10]
with randomMatrixDepot.jl
and some other ill-conditioned matrices also produce this type of result, liketriw
andmoler
.Essentially, what's going on is that when you analyze the stability of solving linear systems with respect to perturbations, you first have to specify which perturbations you are considering. When solving linear systems with LAPACK, this error bound considers component-wise perturbations inA , but no perturbation in b . So this is different from the usual κ(A)=∥A−1∥∥A∥ , which considers normwise perturbations in both A and b .
Consider (as a counterexample) also what would happen if you don't make the distinction. We know that using iterative refinement with double precision (see link above) we can get the best possible forward relative error ofO(u) for those matrices with κ(A)≪1/u . So if we consider the idea that linear systems can't be solved to accuracy better than κ(A)u , how would refining solutions possibly work?
P.S. It matters thatE in A , but no perturbation in b . Things would be different if perturbations were allowed in b .
?getrs
says the computed solution is the true solution of(A + E)x = b
with a perturbationEdit To show this working more directly, in code, that this is not a fluke or a matter of luck, but rather the (unusual) consequence of two condition numbers being very different for some specific matrices, i.e.,
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) :
la source