Examen du centre 2015 Math IIB Résolution avec Python

introduction

Cet article est l'article du 17ème jour du Calendrier de l'Avent Python 2015. Encore une fois, [Python](http: //www.adventar.org/) de Mathematics Advent Calendar 2015 et ADVENTAR //www.adventar.org/calendars/846) et Math servent également de 17e jour m (_ _) m

Que faire ici

Ceci est un article inspirant de Résoudre tous les mathématiques de l'examen du centre 2015 IA par programmation (Python). Je me suis beaucoup amusé à le faire ici, alors j'ai essayé Mathematics IIB en plus d'étudier Sympy.

Examen du centre d'examen d'entrée à l'université | Bulletin de réponse 2015 | Toshin de l'école préparatoire Mathématiques II / Mathématiques B http://www.toshin.com/center/sugaku-2b_mondai_0.html

Environnement d'exécution

Dépôt

https://github.com/massa142/mathematics-2b

Utilisation basique de Sympy

Tout d'abord, je vais résumer comment utiliser Sympy qui apparaîtra beaucoup par la suite.

Qu'est-ce que Sympy?

Bibliothèque de calcul de symboles Python Document officiel: http://www.sympy.org/en/index.html Traduction japonaise: http://turbare.net/transl/scipy-lecture-notes/index.html

Définition des variables de symboles

In [1]: from sympy import *
In [2]: x + 1
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-2-4cf92658b648> in <module>()
----> 1 x + 1

NameError: name 'x' is not defined

In [3]: x = symbols('x')
In [4]: x + 1
Out[4]: x + 1

développer - agrandir

In [5]: expand((x + 1)**2)
Out[5]: x**2 + 2*x + 1

facteur - factorisation

In [6]: factor(x**4 - 3*x**2 + 1)
Out[6]: (1 + x - x**2)*(1 - x - x**2)

simplifier - Simplifier

In [7]: simplify((x**3 + x**2 - x - 1)/(x**2 + 2*x + 1))
Out[7]: x - 1

limite --extrême

In [8]: limit(x, x, oo)
Out[8]: oo

diff-différenciation

In [9]: diff(cos(x), x)
Out[9]: -sin(x)
In [10]: diff(x**3 + x**2 - x - 1, x)
Out[10]: 3*x**2 + 2*x - 1

intégrer - intégrer

In [11]: integrate(cos(x), x)
Out[11]: sin(x)
In [12]: integrate(x**3 + x**2 - x - 1, x)
Out[12]: x**4/4 + x**3/3 - x**2/2 - x

Matrice-Matrice

In [13]: Matrix([[1, 2, 3], [-2, 0, 4]])
Out[13]:
Matrix([
[ 1, 2, 3],
[-2, 0, 4]])

résoudre - résoudre une expression

In [14]: solve(x**2 - 1, x)
Out[14]: [-1, 1]

Résoudre en fait

Question 1-Fonction triangulaire, fonction exponentielle / logarithmique

sugaku-2b_101.gif

Le problème des coordonnées est correct si vous pensez à chaque point d'un vecteur en utilisant la matrice de Sympy. Pour le moment, réglons θ à 45 ° pour plus de commodité.

import math
import sympy as sy
import numpy as np

γ = sy.pi/4
O = sy.Matrix([0, 0])
P = sy.Matrix([2*sy.cos(γ), 2*sy.sin(γ)])
Q = sy.Matrix([2*sy.cos(γ) + sy.cos(7*γ), 2*sy.sin(γ) + sy.sin(7*γ)])

La distance entre deux points peut être exprimée par le concept de la norme d'une matrice. http://docs.sympy.org/0.7.2/modules/matrices/matrices.html#sympy.matrices.matrices.MatrixBase.norm

(O - P).norm()
(P - Q).norm()

production


2 #UNE
1 #je

Le prochain $ OQ ^ 2 $ semble devoir être calculé honnêtement. Ce calcul dépend de la valeur de θ, donc le 45 ° que vous avez défini précédemment ne peut pas être utilisé ... Définissons un nouveau θ comme symbole.

#Symbolise θ comme une valeur supérieure à 0
θ = sy.symbols('θ', positive=True)
sy.simplify((2*sy.cos(θ) + sy.cos(7*θ))**2 + (2*sy.sin(θ) + sy.sin(7*θ))**2)
4*cos(6*θ) + 5 #C,ré,Oh

Après l'avoir simplifié, j'ai pu trouver une bonne réponse. Ensuite, considérez la valeur maximale de OQ. Cela semble un peu gênant, je vais donc utiliser la méthode de calcul de la solution par round-robin en utilisant le fait que la colonne de réponse [ka] est un chiffre entier.

for n in range(4, 9):
    γ = math.pi / n
    print("θ est π/"+ str(n) + "A cette époque, OQ**La valeur de 2 est" + str(5 + 4*np.cos(6*γ)))
θ est π/Quand 4, OQ**La valeur de 2 est 5.0
θ est π/Quand 5, OQ**La valeur de 2 est 1.7639320225
θ est π/À 6 ans, OQ**La valeur de 2 est 1.0
θ est π/Quand il est 7, OQ**La valeur de 2 est 1.39612452839
θ est π/Quand il est 8, OQ**La valeur de 2 est 2.17157287525

Il s'avère que la valeur maximale est prise lorsque «θ = π / 5». [F]: 5

La valeur prise à ce moment était de 1,7639320225. Vous pouvez comprendre intuitivement la racine carrée de cette valeur, mais calculons-la juste au cas où.

from fractions import Fraction
#Trouver la fraction optimale avec un dénominateur de 1 ou moins
Fraction(1.7639320225**2).limit_denominator(1)
Fraction(3, 1)

Puisqu'il s'est avéré que 1,7639320225 $ ^ 2 ≒ 3 $, la valeur de [ki] a également été obtenue. [Ki]: 3

sugaku-2b_102.gif

L'équation représentant la droite OP peut être comprise par calcul secret, elle est donc omise. [K]

(\sin\theta)x - (\cos\theta)y = 0 

Étant donné que les trois points O, P et Q sont sur une ligne droite, vous pouvez remplacer les coordonnées du point Q dans la formule ci-dessus.

sy.simplify(sy.sin(θ)*(2*sy.cos(θ)+sy.cos(7*θ))-sy.cos(θ)*(2*sy.sin(θ)+sy.sin(7*θ)))

production


-sin(6*θ)
# _Reçoit la valeur de sortie précédente
sy.solve(_)

production


[pi/6] #Ke

Oui ensuite! C'est vraiment simple. L'angle OQP devient un angle droit à partir de OP = 2, PQ = 1 [Co]: $ OQ = \ sqrt3 $

En utilisant cette valeur et la valeur de OQ obtenue dans [c] [d] [e], trouvez θ lorsque l'angle OQP devient un angle droit.

# 5+4*sy.cos(6*θ) =À partir de 3
sy.solve(5+4*sy.cos(6*θ) - 3)

production


[pi/9, 2*pi/9]

$ \ pi / 8 \ leqq θ \ leqq \ pi / 4 $ Pourquoi $ θ = 2/9 \ pi $ [sa] [shi]

sugaku-2b_103.gif

import math
import sympy as sy
import numpy as np

x, y, a, b = sy.symbols('x y a b', real=True, positive=True) #Symbolisé comme un nombre réel positif
c1 = x**2*y**3 - a**2
c2 = x*y**3 - b**3
sy.solve({c1, c2}, {x, y})

production


[{y: b**2/a**(2/3), x: a**2/b**3}] #Su,Se,Alors,Ta

J'ai pu le résoudre en un instant en utilisant résoudre!

Après cela, faites attention à la valeur de y et trouvez la valeur de p. [Chi] [Tsu] [Te] p = -2/3

sugaku-2b_104.gif

Remplacez respectivement «b = 2 * a ** (4/3)» par x et y calculés ci-dessus. D'abord de x.

sy.simplify(a**2/(2*a**(4/3))**3)

production


a**(-2.0)/8 #À,N / a

Et y aussi.

sy.simplify((2*a**(4/3))**2/a**(2/3))

production


4*a**2.0 #ré

Lorsque vous considérez ici la valeur minimale de x + y, si vous utilisez la puissance de Scipy, vous n'avez pas à vous souvenir de la formule "relation entre moyenne additive et moyenne synergique"!

from scipy.optimize import differential_evolution
#Convertir a, qui est un symbole, afin qu'il puisse être traité comme une valeur numérique
numeric_a = sy.lambdify(a, a**(-2.0)/8 + 4*a**2.0)
#La gamme d'un est un>0 Pourquoi, la limite supérieure est la valeur int maximale dans la série python2
#A est 0 en force brute~Trouvez la valeur minimale entre 2147483647
differential_evolution(numeric_a, [(0, 2**31-1)])

production


    nfev: 518
 success: True
     nit: 33
     jac: array([  7.06101844e-06])
 message: 'Optimization terminated successfully.'
     fun: array([ 1.41421356])
       x: array([ 0.42044842])

De ce résultat On peut voir que "quand a = 0,42044842, x + y prend la valeur minimale 1,41421356".

Après cela, vous pouvez calculer "0,42044842 est la puissance de 2" et "1,41421356 est la racine carrée".

from fractions import Fraction
math.log2(0.4204482)
Fraction(_).limit_denominator(9)

production


Fraction(-5, 4) #Ne,Non,C
Fraction(1.41421356**2).limit_denominator(1)

production


Fraction(2, 1) #Nu

Enfin la première question est terminée (´-ω-`)

Omettez les deuxième, troisième et quatrième questions

Personnes Personnes Personnes Personnes Personnes > 5ème question soudaine <  ̄Y^Y^Y^Y^Y^Y^Y^ ̄

Question 5-Distribution des probabilités et estimation statistique

sugaku-2b_501.gif

Le calcul des combinaisons est facile avec un module appelé Scipy.misc.comb. http://docs.scipy.org/doc/scipy/reference/generated/scipy.misc.comb.html#scipy.misc.comb

import itertools
import scipy.misc as scm

scm.comb(7, 3,  exact=True)

production


35 #je,C
scm.comb(4, 0,  exact=True)*scm.comb(3, 3,  exact=True)
scm.comb(4, 1,  exact=True)*scm.comb(3, 2,  exact=True)
scm.comb(4, 2,  exact=True)*scm.comb(3, 1,  exact=True)
scm.comb(4, 3,  exact=True)*scm.comb(3, 0,  exact=True)

production


1 #UNE
12 #ré,Oh
18 #Puissance,Ki
4 #Ku
#Stocké dans le dictionnaire pour calculer les valeurs attendues et les variances
dict = {0: 1/35, 1: 12/35, 2: 18/35, 3: 4/35}
mean = sum(x*y for x, y in dict.items())
from fractions import Fraction
Fraction(mean).limit_denominator(9)

production


Fraction(12, 7) #Ke,Ko,Un service
variance = sum(x*x*y for x, y in dict.items()) - mean**2
Fraction(variance).limit_denominator(99)

production


Fraction(24, 49) #Shi,Su,Se,Alors

sugaku-2b_502.gif

Une distribution normale standard est sortie, mais c'est également OK si vous utilisez la bibliothèque statistique de Scipy. http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.norm.html#scipy.stats.norm

Vous n'avez plus à regarder cette table de distribution régulière! sugaku-2b_504.gif

from scipy.stats import norm
norm.interval(alpha=0.99)

production


(-2.5758293035489004, 2.5758293035489004) #Ta

sugaku-2b_503.gif

import sympy as sy
from scipy.stats import norm

n, σ = sy.symbols('n σ')
norm.interval(alpha=0.95)
norm.interval(alpha=0.99)

production


(-1.959963984540054, 1.959963984540054)
(-2.5758293035489004, 2.5758293035489004)
L1 = 2*1.96*σ/sy.sqrt(n)
L2 = 2*2.58*σ/sy.sqrt(n)
L2/L1

production


1.31632653061224 #Ji,Tsu
L3 = 2*1.96*σ/sy.sqrt(4*n)
L3/L1

production


0.500000000000000 #Te,À

à la fin

Une fois que j'ai appris l'utilisation de base de Sympy, il était facile d'atteindre le niveau de l'examen central. L'impression d'essayer cette fois est comme ça.

Recommended Posts

Examen du centre 2015 Math IIB Résolution avec Python
Étudier les mathématiques avec Python: résoudre des problèmes simples de probabilité
Algorithme en Python (jugement premier)
Techniques de tri en Python
Modèle Python pour Codeforces-test manuel-
À propos de "for _ in range ():" de python
Définir le test python dans jenkins
Rechercher les fuites de mémoire dans Python
Rechercher des commandes externes avec python
Ecrire le code de test du sélénium en python
Création d'un outil de test AtCoder pour Python
Test statistique (test multiple) en Python: scikit_posthocs
Exécutez unittest en Python (pour les débutants)
Note de nfc.ContactlessFrontend () de nfcpy de python
Ecrire le test dans la docstring python
Conseils pour gérer les binaires en Python
Résumé de diverses instructions for en Python
Tapez les annotations pour Python2 dans les fichiers stub!
Modèle pour l'écriture de scripts batch en python
Traiter plusieurs listes avec for en Python
MongoDB avec Python pour la première fois
Obtenez un jeton pour conoha avec python
Exemple de gestion des fichiers eml en Python
Fiche de triche AtCoder en python (pour moi-même)
J'ai cherché un nombre premier avec python
Remarques sur l'utilisation de python (pydev) avec eclipse
Conseils pour créer de petits outils avec python
Utilisez pathlib dans Maya (Python2.7) en préparation du prochain Python3.7