from sympy import factorint
factorint(6)

"""
Explanation: Devoir 1
En utilisant SymPy ou Mathematica mais un seul des deux, répondre aux questions suivantes.
Écrire vos réponses dans le fichier Devoir-1-&lt;MATRICULE&gt;-&lt;NOM&gt;.ipynb ou Devoir-1-&lt;MATRICULE&gt;-&lt;NOM&gt;.nb selon que vous utilisiez SymPy ou Mathematica téléchargeable sur la page web du cours. Inclure la démarche, les réponses aux questions et les justifications. Envoyer votre fichier avant le jeudi 24 mars à 23h59 par courriel à l'adresse slabbe@ulg.ac.be en remplaçant &lt;MATRICULE&gt; par votre numéro de matricule et &lt;NOM&gt; par votre nom.
Pour écrire du texte entre les cellules et justifier une réponse, utiliser
Format &gt; Style &gt; Text en Mathematica, et Cell &gt; Cell Type &gt;
Markdown en SymPy et Jupyter.
Le plagiat sera détecté et entraînera une note de zéro pour les personnes
impliquées.
Question 1
Le Théorème de
Gauss--Wantzel dit qu'un polygone régulier à $n$ côtés est
constructible avec la règle et le compas si et seulement si $n$ est le produit
d'une puissance de $2$ et de nombres premiers de Fermat distincts dont les seuls
connus sont 3, 5, 17, 257 et 65537.
Est-ce qu'un polygone régulier à 6 côtés est constructible?
End of explanation
"""


factorint(24480)

"""
Explanation: Réponse: OUI
Est-ce qu'un polygone régulier à 24480 côtés est constructible?
End of explanation
"""


factorint(88305875025920)

"""
Explanation: Réponse: NON
Est-ce qu'un polygone régulier à 88305875025920 côtés est constructible?
End of explanation
"""


from sympy import init_printing
init_printing(use_latex='mathjax')

from sympy import solve,N
from sympy.abc import x
racines = solve(x**3-3*x**2-5)
racines

for racine in racines:
    print racine.n()

"""
Explanation: Réponse: OUI
Question 2
Résoudre l'équation $x^3-3x^2-5=0$ et donner une valeur numérique approchée des
solutions.
End of explanation
"""


%matplotlib inline
from sympy.plotting import plot3d_parametric_surface
from sympy import cos,sin,tan,log,pi
from sympy.abc import u,v
plot3d_parametric_surface(cos(u)*sin(v), sin(u)*sin(v),cos(v)+log(tan(v/2))+u, (u,0,5*pi), (v,0.01,1))

"""
Explanation: Question 3
Tracer la surface de Dini
dont les équations paramétriques sont:
\begin{align}
    x&=a\cos\left(u\right)\sin\left(v\right)\
    y&=a\sin\left(u\right)\sin\left(v\right)\
    z&=a\left(\cos\left(v\right)+\ln\left(\tan\left(\frac{v}{2}\right)\right)\right)+bu 
\end{align}
pour $a=1$, $b=1$ sur les intervalles $0\leq u \leq 5\pi$ et $0.01 \leq v\leq
1$.
End of explanation
"""


from sympy.abc import x
p = -x**4+28*x**3-221*x**2+350*x+600
p

from sympy import diff,solve
p_optimum = solve(diff(p, x), x)
p_optimum

from sympy import N
map(N, p_optimum)

p_xx = diff(p, x, x)
[(a, p_xx.subs(x, a).n()) for a in sorted(p_optimum)]

"""
Explanation: Question 4
Soit $p(x)=- x^{4} + 28 x^{3} - 221 x^{2} + 350 x + 600$ un polynôme. Trouver
l'ensemble des valeurs de $x$ telles que $p(x)$ atteint un optimum local et dire s'il s'agit d'un minimum ou un maximum.
End of explanation
"""


from sympy import plot
plot(p, (x,-5, 20), ylim=(-1000,1000))

p_racines = solve(p, x)
p_racines

from sympy import integrate
aire = integrate(p, (x,-1,4)) + integrate(p, (x,10, 15))
aire

aire.n()

"""
Explanation: Réponse: p atteint des maximum en x=0.95 et x=13.04, car la dérivée seconde est négative en ces points
Réponse: p atteint un minimum en x=7, car la dérivée seconde est positive en ce point
Calculer l'aire de la région $A={(x,y):0\leq y\leq p(x)}$ bornée supérieurement par le polynôme $p(x)$ et
inférieurement par l'abscisse.
End of explanation
"""


from sympy import oo
from sympy.abc import x
f = x**(x/(1-x))

f.subs(x,0), f.subs(x,1), f.subs(x,oo)

"""
Explanation: Question 5
On considère la fonction $f(x)=x^{x\over 1-x}$ pour tout réel $x>0$. Donner le
domaine de définition de $f$.
End of explanation
"""


from sympy import limit
limit(f, x, 0)

limit(f, x, 1)

limit(f, x, oo)

"""
Explanation: Réponse: le domaine est $[0, 1[\cup]1,\infty[$ si on accepte que $0^0=1$ est bien défini.
Calculer les limites de la fonction $f$ aux bornes des intervalles qui composent le domaine de $f$.
End of explanation
"""


v1=(-8, 1, -10, 1, 6)
v2=(-6, -10, 2, 10, -3)
v3=(-2, 8, 10, 1, 10)
v4=(-14, -9, -8, 11, 3)
v5=(-2, -3, 5, -8, -6)

from sympy import Matrix
M = Matrix([v1, v2, v3, v4, v5])
M

Mreduite, pivots = M.rref()
Mreduite

"""
Explanation: Expliquez comment prolonger $f$ par continuité aux points $x=0$ et $x=1$.
Réponse: par le résultat des calculs des limites.
Question 6
On considère les vecteurs
$v_1=(-8, 1, -10, 1, 6)$,
$v_2=(-6, -10, 2, 10, -3)$,
$v_3=(-2, 8, 10, 1, 10)$,
$v_4=(-14, -9, -8, 11, 3)$,
$v_5=(-2, -3, 5, -8, -6)$.
Donner une base du sous espace vectoriel engendré par $v_1$, $v_2$, $v_3$, $v_4$
et $v_5$.
End of explanation
"""


w = (0, -6, -1, -8, 10)
M = Matrix([v1, v2, v3, v4, v5, w])
M.transpose().rref()

"""
Explanation: Le vecteur $w=(0, -6, -1, -8, 10)$ est-il dans ce sous-espace vectoriel?
End of explanation
"""


