Vous connaissez tous la méthode de Newton pour approximer les racines d'une fonction, n'est-ce pas? Mon objectif dans cette tâche est de vous présenter un aspect intéressant de cet algorithme.
L'algorithme de Newton ne converge que pour certaines, mais surtout pour les valeurs d'entrée complexes. Si vous imaginez la convergence de la méthode pour toutes les valeurs d'entrée sur le plan complexe, vous obtenez généralement une belle fractale comme celle-ci:
Caractéristiques
Le but de cette tâche est de générer de telles fractales. Cela signifie que vous obtenez un polynôme en entrée et que vous devez imprimer la fractale correspondante en tant qu'image dans un format de votre choix en tant que sortie.
Contribution
L'entrée est une liste de nombres complexes séparés par des espaces. Ils sont écrits dans le style <Real part><iImaginary part>
, comme ce numéro: 5.32i3.05
. Vous pouvez supposer que le nombre d'entrée n'a pas plus de 4 décimales et est inférieur à 1000. Le premier d'entre eux ne doit pas être nul. Par exemple, cela pourrait être une entrée pour votre programme:
1 -2i7,5 23,0004i-3,8 i12 0 5,1233i0,1
Les nombres sont interprétés comme les coefficients d'un polynôme, en commençant par la puissance la plus élevée. Dans le reste de cette description, le polynôme d'entrée est appelé P . L'entrée ci-dessus est égale à ce polynôme:
f (x) = x 5 + (-2 + 7,5 i ) x 4 + (23,0004 - 3,8 i ) x 3 + 12 i x 2 + 5,1233 + 0,1 i
L'entrée peut vous venir soit de stdin, soit d'un argument passé au programme, soit d'une invite affichée à votre programme. Vous pouvez supposer que l'entrée ne contient aucun espace blanc de début ou de fin.
Le rendu
Vous devez rendre la fractale de la manière suivante:
- Choisissez autant de couleurs que de racines de P plus une couleur supplémentaire pour la divergence
- Pour chaque nombre dans le plan visible, déterminez si la méthode converge et si oui vers quelle racine. Colorez le point en fonction du résultat.
- N'imprimez pas de règles ou d'autres objets de fantaisie
- Imprimez un point noir aux points, qui sont les racines des polynômes d'orientation. Vous pouvez imprimer jusqu'à quatre pixels autour de chaque racine.
- Trouvez un moyen de choisir le plan visible de manière à ce que toutes les racines se distinguent et se propagent largement à travers celui-ci, si possible. Bien qu'un placement parfait du cadre de sortie ne soit pas requis, je me réserve le droit de refuser d'accepter une réponse qui choisit le cadre d'une manière inacceptable, par exemple. toujours aux mêmes coordonnées, toutes les racines sont en un seul point, etc.
- L'image de sortie doit avoir une taille de 1024 * 1024 pixels.
- Le temps de rendu est de 10 minutes maximum
- L'utilisation de valeurs à virgule flottante simple précision suffit
Sortie
La sortie doit être une image graphique raster dans un format de fichier de votre choix, lisible par un logiciel standard pour un système d'exploitation de marque X. Si vous souhaitez utiliser un format rare, pensez à ajouter un lien vers un site Web où l'on peut télécharger une visionneuse pour celui-ci.
Sortez le fichier sur stdout. Si votre langue ne prend pas en charge la mise de quelque chose sur stdout ou si vous trouvez cette option moins pratique, trouvez un autre moyen. De toute façon, il doit être possible d'enregistrer l'image générée.
Restrictions
- Aucune bibliothèque de traitement d'image
- Aucune bibliothèque génératrice de fractales
- Le code le plus court gagne
Extensions
Si vous aimez cette tâche, vous pouvez essayer de colorer les points en fonction de la vitesse de convergence ou d'autres critères. J'aimerais voir des résultats intéressants.