Files
ANum/QUESTION7.ipynb
2024-12-03 20:04:03 +01:00

175 lines
11 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"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": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# fonction a utiliser si on souhaite tracer les bassins dattraction dune 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 dattraction\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
}