{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "26e511c9-72cb-419e-95a4-638de218bb3a",
   "metadata": {},
   "outputs": [],
   "source": [
    "using IntervalArithmetic;"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "587d6c48-f3d4-4335-8e79-41c8174601fb",
   "metadata": {},
   "outputs": [],
   "source": [
    "setdisplay(:full);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "1daa9098-8f1b-4dbf-a9d5-dd748165bea8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(Interval{Float64}(-Inf, -1.0, dac, true), Interval{Float64}(0.5, Inf, trv, true))"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "extended_div(interval(1,2),interval(-1,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "5831b0ab-ec12-4692-8dc6-d6ba3d7fe801",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "extended_Newton (generic function with 2 methods)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function extended_Newton(x,f,fprime)\n",
    "       (x1,x2)=extended_div(f(interval(mid(x))),fprime(x))\n",
    "       if !(isempty_interval(x1))\n",
    "         y1=mid(x)-x1\n",
    "         if !(isempty_interval(x2))\n",
    "           y2=mid(x)-x2\n",
    "           return y1,y2\n",
    "         else\n",
    "           return y1,emptyinterval()\n",
    "         end\n",
    "       else\n",
    "         return emptyinterval(),emptyinterval()\n",
    "       end\n",
    "       end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "e8562eed-e7e1-4cd6-9bf1-859a6e5f7bbc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Qprime (generic function with 1 method)"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function Q(x)\n",
    "    x^2-1\n",
    "end\n",
    "function Qprime(x)\n",
    "    2*x\n",
    "end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "5813e3dc-4ad6-4053-b879-6b04a75a85de",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pfifth (generic function with 1 method)"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function P(x)\n",
    "       x^5-15*x^4+85*x^3-225*x^2+274*x-120\n",
    "       end\n",
    "function Pprime(x)\n",
    "    5*x^4 - 60*x^3 + 255*x^2 - 450*x + 274\n",
    "end\n",
    "function Psecond(x)\n",
    "    20*x^3 - 180*x^2 + 510*x - 450\n",
    "end\n",
    "function Pthird(x)\n",
    "    60*x^2 - 360*x + 510\n",
    "end\n",
    "function Pfourth(x)\n",
    "    120*x - 360\n",
    "end\n",
    "function Pfifth(x)\n",
    "    120\n",
    "end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "4d5ec9bf-a445-40da-8c3c-0ae804d7e69e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "hthird (generic function with 1 method)"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function h(x)\n",
    "    exp(x)*sin(x)/sqrt(x^2+1)\n",
    "end\n",
    "function hprime(x)\n",
    "    exp(x)*sin(x)/sqrt(x^2 + 1) + exp(x)*cos(x)/sqrt(x^2 + 1) - exp(x)*sin(x)*x/sqrt(x^2 + 1)^3\n",
    "end\n",
    "function hsecond(x)\n",
    "    2*exp(x)*cos(x)/sqrt(x^2 + 1) - 2*exp(x)*sin(x)*x/sqrt(x^2 + 1)^3 - 2*exp(x)*cos(x)*x/sqrt(x^2 + 1)^3 + 3*exp(x)*sin(x)*x^2/sqrt(x^2 + 1)^5 - exp(x)*sin(x)/sqrt(x^2 + 1)^3\n",
    "end\n",
    "function hthird(x)\n",
    "    2*exp(x)*cos(x)/sqrt(x^2 + 1) - 2*exp(x)*sin(x)/sqrt(x^2 + 1) - 6*exp(x)*cos(x)*x/sqrt(x^2 + 1)^3 + 9*exp(x)*sin(x)*x^2/sqrt(x^2 + 1)^5 - 3*exp(x)*sin(x)/sqrt(x^2 + 1)^3 + 9*exp(x)*cos(x)*x^2/sqrt(x^2 + 1)^5 - 3*exp(x)*cos(x)/sqrt(x^2 + 1)^3 - 15*exp(x)*sin(x)*x^3/sqrt(x^2 + 1)^7 + 9*exp(x)*sin(x)*x/sqrt(x^2 + 1)^5\n",
    "end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "76a61edb-6746-43e5-9e67-68ae3a1bc191",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Newton (generic function with 1 method)"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function Newton(x0, f, fprime)\n",
    "    # initialization\n",
    "    # creation and initialization of the working list\n",
    "    L=Interval{Float64}[]; push!(L,x0);\n",
    "    # creation and initialization of the list of results\n",
    "    res=Interval{Float64}[];\n",
    "    # initialization of parameters ensuring the convergence\n",
    "    epsilon_x = 0.01; # width of the resulting intervals\n",
    "    epsilon_y = 0.01; # width of the evaluation of f over the candidate interval\n",
    "    N=0; nb_iter_max = 100; # maximal number of examined candidate intervals\n",
    "    while (!isempty(L))\n",
    "        x=pop!(L);\n",
    "        [...]\n",
    "    end\n",
    "    return(res)\n",
    "end\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "4a64067e-5772-4be3-aeab-a88aaba8574b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2-element Vector{Interval{Float64}}:\n",
       " Interval{Float64}(-1.0009358863141407, -0.9967753370814064, trv, false)\n",
       " Interval{Float64}(0.9988240293886298, 1.0001394187386852, trv, false)"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Newton(interval(-2,3),Q,Qprime)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "871f0168-7525-4bf1-8068-4db172568772",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "40-element Vector{Interval{Float64}}:\n",
       " Interval{Float64}(0.9989880293903723, 1.0039105476674595, trv, false)\n",
       " Interval{Float64}(0.9940655111132852, 0.9989880293903723, trv, false)\n",
       " Interval{Float64}(0.9925651715295327, 0.9940655111132852, trv, false)\n",
       " Interval{Float64}(0.9910648319457802, 0.9925651715295327, trv, false)\n",
       " Interval{Float64}(2.7726480432717695, 2.7737345223495566, trv, false)\n",
       " Interval{Float64}(2.7715615641939824, 2.7726480432717695, trv, false)\n",
       " Interval{Float64}(2.802254384622719, 2.804079164476367, trv, false)\n",
       " Interval{Float64}(2.8004296047690707, 2.802254384622719, trv, false)\n",
       " Interval{Float64}(2.77070673524047, 2.7715615641939824, trv, false)\n",
       " Interval{Float64}(2.769851906286958, 2.77070673524047, trv, false)\n",
       " Interval{Float64}(2.8458861387715735, 2.8493473524305113, trv, false)\n",
       " Interval{Float64}(2.8424249251126357, 2.8458861387715735, trv, false)\n",
       " Interval{Float64}(2.870997954591818, 2.8749810365784656, trv, false)\n",
       "   ⋮\n",
       " Interval{Float64}(2.0493394919627788, 2.0546829836564555, trv, false)\n",
       " Interval{Float64}(2.043996000269102, 2.0493394919627788, trv, false)\n",
       " Interval{Float64}(1.9951865810981997, 2.0033949341083304, trv, false)\n",
       " Interval{Float64}(1.9869782280880688, 1.9951865810981997, trv, false)\n",
       " Interval{Float64}(2.0127117261565157, 2.0208306058722623, trv, false)\n",
       " Interval{Float64}(2.0045928464407687, 2.0127117261565157, trv, false)\n",
       " Interval{Float64}(1.7818758988940118, 1.9182794412752338, trv, false)\n",
       " Interval{Float64}(2.192028112816905, 2.328428467736239, trv, false)\n",
       " Interval{Float64}(2.055627757897571, 2.192028112816905, trv, false)\n",
       " Interval{Float64}(-1.5, 0.6874905182892328, trv, false)\n",
       " Interval{Float64}(5.062507451480965, 7.25, trv, false)\n",
       " Interval{Float64}(2.8750149029619303, 5.062507451480965, trv, false)"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Newton(interval(-1.5,7.25),P,Pprime)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "480e9e1e-440f-4266-bd1b-dba8216c6dc2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3-element Vector{Interval{Float64}}:\n",
       " Interval{Float64}(-3.701373554570596e-5, 1.572671150426282e-7, trv, false)\n",
       " Interval{Float64}(-3.5, -3.0564956038130138, trv, false)\n",
       " Interval{Float64}(3.139316719896432, 3.142421936321403, trv, false)"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Newton(interval(-3.5,4),h,hprime)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "421e3880-2a42-4b5e-96d9-0d26e278f549",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Julia 1.12",
   "language": "julia",
   "name": "julia-1.12"
  },
  "language_info": {
   "file_extension": ".jl",
   "mimetype": "application/julia",
   "name": "julia",
   "version": "1.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
