# -*- coding: utf-8 -*-
# Created on Wed May 21 08:08:08 2025
# @author: mhebding
# DM2py - Recherche d un zero



## I - La methode de dichotomie

K = 10**-4.8
C0 = 0.1

# 1.
def polynome(x): # remplacer les None
    a = None
    b = None
    c = None
    return None

# 2.
def delta(K,C0):
    return None # remplacer

# 3.
def racine(K,C0): # remplacer les None
    assert delta(K,C0) >= 0 # que fait cette ligne ?
    x1 = None
    x2 = None
    if x1<0:
        solution = None
    elif x1>C0: # pourquoi ce test ?
        solution = None
    else:
        solution = None
    return None

# 4.
def dichotomie(f, a, b, epsilon): # implementer la dichotomie
    None

# 5.
def test1():
    print("")
    print("I - Recherche de xeq en chimie")
    solution1 = racine(K,C0)
    print("Par discriminant : " + str(round(solution1,10)))
    epsilon = 10**-7 # a modifier
    solution2 = dichotomie(polynome, 0, 0.1, epsilon)
    print("Par dichotomie (epsilon=" +str(epsilon) + ") : " + str(round(solution2,10)))
    


# II - La methode de Newton

import sympy as sp 
m = 1000 # kg
C = 400*10**9 # SI
G = 6.67*10**-11 # SI
M = 6*10**24 # kg

r = sp.Symbol('r') 
Epeff = 1/2*m*C**2/r**2 - G*m*M/r
dEpeff = sp.diff(Epeff,r) # calcul derivee
dEpeff2 = sp.diff(dEpeff,r) # derivee de la derivee

fonction, fonction2=sp.lambdify(r, dEpeff), sp.lambdify(r, dEpeff2) # conversion en fonctions

# 6.
def newton(f, df, x0, e, Nmax=100): # implementer Newton
    None

# 7.
def test2():
    print("")
    print("II - Recherche de r0 en meca")
    epsilon = 10**-7 # a modifier
    print("Par theorie conique r0 : "+ str(round(C**2/(G*M),2)))
    solution2 = newton(fonction, fonction2, 100, epsilon)
    print("Par Newton (epsilon=" +str(epsilon) + ") : " + str(round(solution2,2)))