{ "cells": [ { "cell_type": "code", "execution_count": 2, "id": "83556834-6ac7-4721-8121-4189de0b13d0", "metadata": { "tags": [] }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import math\n", "from matplotlib . colors import ListedColormap\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "a151b08e-688f-4a07-95c1-c0ad95232e0e", "metadata": { "tags": [] }, "outputs": [], "source": [ "def f(x):\n", " y = np.array([\n", " x[0]**5 - 10*x[0]**3 * x[1]**2 + 5 * x[0] * x[1]**4 - 1,\n", " -5 * x[0]**4 * x[1] + 10 * x[0]**2 * x[1]**3 - x[1]**5\n", " ])\n", " \n", " J = np.array([\n", " [5*x[0]**4 - 10*3*x[0]**2 * x[1]**2 + 5 * x[1]**4, -10*x[0]**3 * 2 * x[1] + 5 * x[0] * 4 * x[1]**3 ],\n", " [-5 * 4 * x[0] ** 3 * x[1] + 10 * x[0] * 2 * x[1]**3, -5 * x[0]**4 + 10 * x[0]**2 * x[1] ** 2 * 3 - 5*x[1]**4]\n", " ])\n", " \n", " return y, J" ] }, { "cell_type": "code", "execution_count": 4, "id": "214d1930-4c0e-4aab-ae5e-bdc44dc3cd90", "metadata": { "tags": [] }, "outputs": [], "source": [ "def NewtonRn(fct,x0,tol=1e-6):\n", " k = 0\n", " x = x0\n", " f, df =fct(x)\n", " # f, df = fct(x)\n", " # print(\"f=\",f,\"df=\", df, \"|f|=\",np.linalg.norm(f), tol)\n", " while np.linalg.norm(f) > tol:\n", " f, df = fct(x)\n", " dfI = np.linalg.inv(df)\n", " x = x - f@dfI\n", " \n", " k+=1\n", " if k > 10:\n", " break\n", " \n", " return x" ] }, { "cell_type": "code", "execution_count": 5, "id": "59abd31c-26b5-4a71-9668-ecef255d54a4", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.30901699 0.95105652]\n" ] } ], "source": [ "p = np.array([1, 1])\n", "\n", "# print(f(p))\n", "\n", "x0 = np.array([1,1])\n", "xroot = NewtonRn(f, x0)\n", "print(xroot)" ] }, { "cell_type": "code", "execution_count": 7, "id": "4370d5c6-b098-484b-a577-9ce86ada4f02", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Erreur pour x0 = [0. 0.]\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# fonction a utiliser si on souhaite tracer les bassins d’attraction d’une fonction f\n", "def plot_newton_fractal (f , roots , h =0.007 , domain =( -2 , 2 , -2 , 2) ) :\n", " colors = ['b', 'r', 'g', 'y','m'] # Liste de couleurs\n", " xmin , xmax , ymin , ymax = domain\n", " nbpixelsY = math . ceil (( ymax - ymin ) / h )\n", " nbpixelsX = math . ceil (( xmax - xmin ) / h )\n", " image = np . zeros (( nbpixelsY , nbpixelsX ) )\n", " for j in range ( nbpixelsX ) :\n", " for i in range ( nbpixelsY ) :\n", " x0 = np . array ([ xmin + j *h , ymin + i * h ])\n", " try:\n", " r = NewtonRn (f , x0 ) #On appelle la methode ici !\n", " if r is not False : image [i , j ] = np . argmin ( np . linalg . norm ( roots -r , axis =1) )\n", " except:\n", " print(\"Erreur pour x0 = \", x0)\n", " plt . imshow ( image , cmap = ListedColormap ( colors [: len( roots ) ]) , origin ='lower')\n", " plt . axis ('off')\n", " plt . show ()\n", "# Definition des racines et trace des bassins d’attraction\n", "roots = np . array([[ -0.809 , -0.587] ,[0.309 , -0.951] ,[1.000 ,0.000] ,[0.309 ,0.951] ,[ -0.809 ,0.587]])\n", "x = plot_newton_fractal (f , roots, h=0.05 )\n" ] }, { "cell_type": "code", "execution_count": null, "id": "c3811318-c08f-4fcc-8e6a-f35d9958548f", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.5" } }, "nbformat": 4, "nbformat_minor": 5 }