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
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
https://github.com/massa142/mathematics-2b
Tout d'abord, je vais résumer comment utiliser Sympy qui apparaîtra beaucoup par la suite.
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
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
In [5]: expand((x + 1)**2)
Out[5]: x**2 + 2*x + 1
In [6]: factor(x**4 - 3*x**2 + 1)
Out[6]: (1 + x - x**2)*(1 - x - x**2)
In [7]: simplify((x**3 + x**2 - x - 1)/(x**2 + 2*x + 1))
Out[7]: x - 1
In [8]: limit(x, x, oo)
Out[8]: oo
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
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
In [13]: Matrix([[1, 2, 3], [-2, 0, 4]])
Out[13]:
Matrix([
[ 1, 2, 3],
[-2, 0, 4]])
In [14]: solve(x**2 - 1, x)
Out[14]: [-1, 1]
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
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]
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]
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^ ̄
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
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!
from scipy.stats import norm
norm.interval(alpha=0.99)
production
(-2.5758293035489004, 2.5758293035489004) #Ta
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,À
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