source: pyromaths/trunk/fuentes/src/pyromaths/ex/lycee/equations.py @ 423

Last change on this file since 423 was 423, checked in by mabarracus, 4 years ago

add sources from pyromaths 15.10

File size: 5.2 KB
Line 
1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3#
4# Pyromaths
5# Un programme en Python qui permet de créer des fiches d'exercices types de
6# mathématiques niveau collège ainsi que leur corrigé en LaTeX.
7# Copyright (C) 2006 -- Jérôme Ortais (jerome.ortais@pyromaths.org)
8#
9# This program is free software; you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation; either version 2 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program; if not, write to the Free Software
21# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22from __builtin__ import str
23'''
24Created on 1 janv. 2015
25
26@author: jerome
27'''
28from pyromaths import ex
29from random import randrange
30from math import sqrt
31from pyromaths.ex.troisiemes import notion_de_fonction
32from pyromaths.outils import Priorites3
33from pyromaths.classes.PolynomesCollege import Polynome
34from pyromaths.classes.Fractions import Fraction
35
36if __name__ == '__main__':
37    from pyromaths.ex.troisiemes import notion_de_fonction
38    from pyromaths.outils import Priorites3
39
40    pass
41
42def racines(p, lracines):
43    """ Trouve les 2 racines manquantes d'un polynôme de degré 5 connaissant 3 des racines
44    """
45    q = Polynome(p)
46    for r in lracines:
47        q = q // Polynome("x-%s" % r)
48    delta = q[1][0] ** 2 - 4 * q[0][0] * q[2][0]
49    d = float(eval(Priorites3.priorites(delta)[-1][0]))
50    return (-float(q[1][0]) + sqrt(d)) / 2 / float(q[0][0]), (-float(q[1][0]) - sqrt(d)) / 2 / float(q[0][0])
51
52class EquationGraphique(ex.TexExercise):
53    # description = _(u'Résolution graphique d\'équations')
54    # level = _(u"2.Seconde")
55
56    def __init__(self):
57        """
58        l1, l2 et l3 sont les abscisses remarquables,
59        y1, y2 et y3 sont les ordonnées correspondantes
60
61        l1 contient trois abscisses de même ordonnée
62        l2 contient deux abscisses de même ordonnée
63        l3 contient 2 abscisses séparées d'un dixième (un extremum local j'espère) de même ordonnée
64        """
65        End = False
66        while End == False:
67            encore = True
68            while encore:
69                l1 = [a for a in range(-6, 7)]
70                for dummy in range(10):
71                    l1.pop(randrange(len(l1)))
72                if l1[2] - l1[1] > 3 and l1[1] - l1[0] > 3: encore = False
73            pos = randrange(2)
74            l2 = randrange(1, 4) / 2.
75            l2 = [l1[pos] + l2, l1[pos + 1] - l2]
76            l3 = [(l1[(pos + 1) % 2] + l1[(pos + 1) % 2 + 1]) / 2.]
77            l1.extend(l2)
78            l1.extend(l3)
79            y = [randrange(2) * (-1) ** randrange(2), randrange(3, 5) * (-1) ** randrange(2)]
80            # if randrange(2): y[0], y[2] = y[2], y[0]
81            #=======================================================================
82            # y = [y[1], y[1], y[1], y[0], y[0], y[2], y[2]]
83            #=======================================================================
84            y = [y[1], y[1], y[1], y[0], y[0], y[0]]
85            self.points = list([(l1[i], y[i]) for i in range(6)])
86            p = notion_de_fonction.Lagrange(self.points)
87            self.polynome = eval(Priorites3.priorites(p)[-1][0])
88            End = True
89            for val in range(13):
90                #===============================================================
91                # try:
92                #     ordonnee = eval(self.polynome(val - 6))
93                # except:
94                #     print repr(self.polynome), val - 6
95                # if isinstance(ordonnee, str):
96                #     ordonnee = eval(Priorites3.priorites(ordonnee)[-1][0])
97                #===============================================================
98                try:
99                    ordonnee = eval(Priorites3.priorites(self.polynome(val - 6))[-1][0])
100                except IndexError:
101                    ordonnee = eval(self.polynome(val - 6))
102                if ordonnee > 5 or ordonnee < -5:
103                    End = False
104                    break
105
106    def tex_statement(self):
107        exo = [r'\exercice']
108        exo.extend([r"\psset{unit=5mm, algebraic, dotsize=4pt 4}", r"\begin{pspicture*}(-6.2,-5.2)(6.2,5.2)"])
109        exo.append(r"\psgrid[subgriddiv=1, gridwidth=.6pt,subgridcolor=lightgray, gridlabels=0pt]")
110        exo.append(r"\psaxes[linewidth=1.2pt,]{->}(0,0)(-6.2,-5.2)(6.2,5.2)")
111        exo.append(r"\psplot[plotpoints=200, linewidth=1.5pt, linecolor=DarkRed]{-6}{6}{%s}" % Priorites3.plotify(repr(self.polynome)))
112        exo.append(r"\psdots %s" % " ".join([str(val) for val in self.points]))
113        exo.append(r"\end{pspicture*}")
114        #=======================================================================
115        # print racines(self.polynome, [self.points[i][0] for i in range(3)])
116        # print racines(self.polynome, [self.points[i][0] for i in range(3, 6)])
117        #=======================================================================
118        return exo
Note: See TracBrowser for help on using the repository browser.