Contexte mathématique
Soit A une matrice N par N de nombres réels, un vecteur ba de N nombres réels et xa vecteur N nombres réels inconnus. Une équation matricielle est Ax = b.
La méthode de Jacobi est la suivante: décomposer A = D + R, où D est la matrice des diagonales et R les entrées restantes.
si vous faites une solution initiale x0, une solution améliorée est x1 = inverse (D) * (b - Rx) où toutes les multiplications sont une multiplication matrice-vecteur et l'inverse (D) est l'inverse de la matrice.
Spécification du problème
- Entrée : Votre programme complet doit accepter comme entrée les données suivantes: la matrice A, le vecteur b, une estimation initiale x0 et un numéro «d'erreur» e.
- Sortie : Le programme doit sortir le nombre minimum d'itérations de telle sorte que la dernière solution diffère par la vraie solution, par au plus e. Cela signifie que chaque composante des vecteurs en amplitude absolue diffère d'au plus e. Vous devez utiliser la méthode de Jacobi pour les itérations.
La façon dont les données sont entrées est votre choix ; cela peut être votre propre syntaxe sur une ligne de commande, vous pouvez prendre des entrées à partir d'un fichier, quoi que vous choisissiez.
Le mode de sortie des données est votre choix ; il peut être écrit dans un fichier, affiché dans la ligne de commande, écrit en tant qu'art ASCII, n'importe quoi, tant qu'il est lisible par un humain.
Plus de détails
On ne vous donne pas la vraie solution: la façon dont vous calculez la vraie solution dépend entièrement de vous. Vous pouvez le résoudre par la règle de Cramer par exemple, ou en calculant directement un inverse. Ce qui compte, c'est que vous ayez une vraie solution pour pouvoir comparer aux itérations.
La précision est un problème; Les «solutions exactes» de comparaison de certaines personnes peuvent différer. Aux fins de ce code golf, la solution exacte doit être fidèle à 10 décimales.
Pour être absolument clair, si même un composant de votre solution d'itération actuelle dépasse son composant correspondant dans la vraie solution par e, vous devez continuer à itérer.
La limite supérieure de N varie en fonction du matériel que vous utilisez et du temps que vous êtes prêt à passer à exécuter le programme. Aux fins de ce code golf, supposons un maximum N = 50.
Conditions préalables
Lorsque votre programme est appelé, vous êtes libre de supposer que les éléments suivants sont toujours valables:
- N> 1 et N <51, c'est-à-dire qu'on ne vous donnera jamais une équation scalaire, toujours une équation matricielle.
- Toutes les entrées concernent le domaine des nombres réels et ne seront jamais complexes.
- La matrice A est toujours telle que la méthode converge vers la vraie solution, de sorte que vous pouvez toujours trouver un certain nombre d'itérations pour minimiser l'erreur (telle que définie ci-dessus) ci-dessous ou égale à e.
- A n'est jamais la matrice zéro ou la matrice d'identité, c'est-à-dire qu'il y a une solution.
Cas de test
A = ((9, -2), (1, 3)), b = (3,4), x0 = (1,1), e = 0.04
La vraie solution est (0,586, 1,138). La première itération donne x1 = (5/9, 1), différant de plus de 0,04 de la vraie solution, d'au moins un composant. En prenant une autre itération, nous trouvons, x2 = (0,555, 1,148) qui diffère de moins de 0,04 de (0,586, 1,138). Ainsi, la sortie est
2
A = ((2, 3), (1, 4)), b = (2, -1), x0 = (2.7, -0.7), e = 1.0
Dans ce cas, la vraie solution est (2.2, -0.8) et la supposition initiale x0 a déjà une erreur inférieure à e = 1.0, donc nous émettons 0. Autrement dit, chaque fois que vous n'avez pas besoin de faire une itération, vous émettez simplement
0
Évaluation de la soumission
Il s'agit du code golf, avec toutes les lacunes standard par la présente interdites. Le programme complet (ou la fonction) correct le plus court , c'est-à-dire le nombre d'octets le plus faible, gagne. Il est déconseillé d'utiliser des choses comme Mathematica qui regroupent un grand nombre des étapes nécessaires dans une seule fonction, mais utilisez la langue de votre choix.