[Confrontation! Puissance humaine vs Python] Après tout, ce qui est plus rapide, résoudre les mathématiques du test central avec Python ou le résoudre par vous-même?

Si tu penses que c'est quelque chose que tu as vu quelque part

Après tout, il y avait un prédécesseur (il y en a peut-être d'autres). **Génial! ** **

1. Ce que vous pouvez apporter au test central

Il semble que vous puissiez apporter ce qui suit, mais pour le moment, il semble que ** l'interpréteur Python ne puisse pas être introduit dans </ font> **, alors soyez prudent. Pour les développeurs, je pense que l'affirmation selon laquelle l'environnement de développement est comme un crayon n'est ** pas compréhensible **. ** * N'apportez rien d'autre que ce qui est autorisé! </ font> **

*Crayon noir(Limité à H, F, HB. Les poèmes, mots, etc. japonais ne sont pas imprimés.), Capuchon de crayon.
*porte-mine(Uniquement disponible pour les mémos et les calculs, limité aux noyaux noirs.)
*Gomme en plastique
*Taille-crayon(Les couteaux électriques, larges et non autorisés)
*l'horloge(Les éléments qui ont des fonctions telles que les dictionnaires, les calculatrices et les terminaux, les éléments dont il est difficile de déterminer s'ils ont ou non de telles fonctions, les éléments qui produisent un son de seconde main, les minuteries de cuisine et les gros éléments ne sont pas autorisés.)
*Lunettes, mouchoirs, gouttes pour les yeux, papier de soie(Seul le contenu est sorti du sac ou de la boîte.)

2. Le problème de la concurrence cette fois

** Uniquement la première question [1] de l'Examen du Centre d'Examen d'entrée à l'Université 2017 Mathématiques II / Mathématiques B **.

Pourquoi j'ai choisi cette question: "Je pense que je peux gagner cette question avec Python."

** Question 1 (question obligatoire) (note 30) **

[1] Équations simultanées

\left\{
\begin{array}{ll}
cos \, 2\alpha + cos \, 2\beta = \frac{4}{15} \quad\quad\quad\,\,\,\,...(1) \\
cos \, \alpha \, \, cos \, \beta = -\frac{2\sqrt{15}}{15}  \quad\quad\quad\,\,\,\,\,...(2)
\end{array}
\right.

penser à. Cependant, c'est $ 0 \ leqq \ alpha \ leqq \ pi, \ quad 0 \ leqq \ beta \ leqq \ pi $, $ \ alpha <\ beta $ et

|cos \, \alpha| \geqq |cos \, \beta| \quad\quad\quad\quad\quad\quad...(3)

Et. À ce stade, trouvons les valeurs de $ cos , \ alpha $ et $ cos , \ beta $.

Utilisation de la formule à double angle, de (1)

cos^2 \alpha + cos^2 \beta = \frac{[Œil]}{[Ue]}

Est obtenu. Aussi, de (2),

cos^2 \alpha \, \, cos^2 \beta = \frac{[Oh]}{15}

Est. Par conséquent, en utilisant la condition (3)

cos^2 \alpha = \frac{[Puissance]}{[Ki]} \quad, \quad\quad cos^2 \beta = \frac{[Ku]}{[Ke]}

Est. Par conséquent, à partir de la condition de (2) $ 0 \ leqq \ alpha \ leqq \ pi, \ quad 0 \ leqq \ beta \ leqq \ pi, \ quad \ alpha <\ beta $

cos \, \alpha = \frac{[Ko]\sqrt{[Un service]}}{[Shi]} \quad, \quad\quad cos \, \beta = \frac{[Su]\sqrt{[Se]}}{[Alors]}

Est.

3. Conditions de victoire du côté "Python + moi"

Compte tenu de l'ampleur totale du problème, je pense que ce problème sera probablement grave à moins qu'il ne soit résolu dans les 6 ou 7 minutes. Dans cet esprit, définissez les conditions gagnantes du côté "Python + I" comme suit.

  • Le temps total requis pour le codage et le temps d'exécution est de 5 minutes.
  • Il faut moins de 3 minutes, pas moins de 2 minutes pour atteindre un niveau qui peut être considéré comme une victoire complète.
  • L'environnement de développement Python (y compris l'IDE) peut être préinstallé et démarré.

L'environnement préparé pour référence est le suivant.

  • Windows 10 Pro
  • Python 3.6
  • Visual Studio Code + Extension Python installés

4. C'est toujours un match!

(Le code complet complet sera publié à la fin de cet article.)

4.1 Ignorez les conseils du questionneur depuis le début!

Je dis que je ne comprends pas la formule du double angle, donc Du coup, il est calculé à partir du dernier $ cos \ alpha, cos \ beta $. Vous devriez pouvoir le faire avec Python et SymPy. Tout d'abord, installez SymPy!

pip install sympy

Résolvons tout cela en même temps!

f_1 = cos \, 2\alpha + cos \, 2\beta - \frac{4}{15} f_2 = cos \, \alpha \, \, cos \, \beta + \frac{2\sqrt{15}}{15} Comme une équation simultanée de $ f_1 = 0 $ et $ f_2 = 0 $, Nous allons résoudre pour $ cos , \ alpha $ et $ cos , \ beta $.

from sympy import symbols, expand, cos, Rational, sqrt, solve

#Définition du symbole. Dans ce problème, α et β sont traités comme des symboles de a et b, respectivement.
a, b = symbols('a b')

# (1)Quand(2)Chaque formule est f1= 0, f2 = 0Quandなるような関数f1, f2Quandして定義。
#Après cela, cos(a)Et cos(b)Puisqu'il résout les équations simultanées par rapport à(1)Déployer(expand)Je le ferai.
f1 = expand(cos(2*a) + cos(2*b) - Rational(4, 15), trig = True)
f2 = cos(a) * cos(b) + 2 * sqrt(15) / 15

#Équations simultanées de f1 et f2, cos(a)Et cos(b)Résoudre pour(solve)。
answers = solve([f1, f2], [cos(a), cos(b)])

4.2 Limitez-vous à la solution souhaitée à partir des conditions.

À ce stade, les «réponses» devraient avoir des solutions, mais trouvez celle que vous voulez parmi les conditions.

$ 0 \ leqq \ alpha \ leqq \ pi, \ quad 0 \ leqq \ beta \ leqq \ pi $, avec la condition $ \ alpha <\ beta $ Dans la plage de $ 0 \ leqq \ theta \ leqq \ pi $, à mesure que $ \ theta $ grossit, $ cos \ theta $ devient plus petit, donc Trouvez une solution qui est $ cos \ alpha> cos \ beta . Et,(3)Conditions|cos , \alpha| \geqq |cos , \beta|$Évaluez également pour trouver la solution souhaitée.

Puisque la valeur absolue est sortie, je l'ajouterai à ʻimport`.

from sympy import symbols, expand, cos, Rational, sqrt, solve, Abs

Après cela, nous rechercherons l'ensemble des solutions qui remplissent les conditions dans la liste des ensembles de solutions contenus dans «réponses». Dans l'instruction ʻif`, la condition est simplement transformée en une expression conditionnelle.

# 0 <= a <= π, 0 <= b <=En π, a,Le plus grand b est cos(a), cos(b)La valeur de devient plus petite.
# a <b, donc cos(a) > cos(b)Cherchez quelque chose qui sera.
#Et,(3)Trouvez celui qui remplit les conditions de.
for cos_a, cos_b in answers:
    if cos_a > cos_b and Abs(cos_a) >= Abs(cos_b):
        break

4.3 [Ko] [Sa] [Shi] [Su] [Se] [So] capture terminée!

Cela vous donnera $ cos \ alpha, cos \ beta $.

#Cible cos(a)Et cos(b)Je l'ai, donc je vais l'afficher([Ko][Un service][Shi][Su][Se][Alors]Répondre)。
print("[Kosashi] -> {}, [Suseso] -> {}".format(cos_a, cos_b))

4.4 Le reste est simple!

Demandez simplement $ cos ^ 2 \ alpha, cos ^ 2 \ beta $ et $ cos ^ 2 \ alpha + cos ^ 2 \ beta $, $ cos ^ 2 \ alpha , , cos ^ 2 \ beta $ Puisque $ cos \ alpha et cos \ beta $ ont déjà été calculés, ils peuvent être calculés simplement par calcul.

# cos(a)Et cos(b)Trouvez le carré de chacun.
squared_cos_a = cos_a ** 2
squared_cos_b = cos_b ** 2

# cos(a)Carré et cos(b)Montre le carré de([Puissance][Ki][Ku][Ke]Répondre)。
print("[huître] -> {}, [Kuke] -> {}".format(squared_cos_a, squared_cos_b))

# cos(a)Carré et cos(b)Affiche également la somme et le produit des carrés de([UNE][je][C][ré][Oh]Répondre)。
print("[Aiue] -> {}".format(squared_cos_a + squared_cos_b))
print("[Oh] -> {}".format(squared_cos_a * squared_cos_b))

(Le code complet complet sera publié à la fin de cet article.)

5. Gagner ou perdre

Le temps qu'il a fallu pour exécuter le code Python terminé (le temps de trouver toutes les solutions) est Dans mon environnement, c'était ** moins de 400 millisecondes ** (juste le temps écoulé depuis le début de l'exécution du code).

Cependant, le temps requis pour le codage était de ** 14 minutes 41 secondes 524 **, donc Ce fut une défaite totale du côté Python (ou moi), ** défaite écrasante **. .. ..

(Étant donné que cet article lui-même a commencé à écrire après le règlement du jeu, le temps d'écriture de l'article n'est pas inclus.)

5.1. Analyse de la cause de la défaite

  1. Immaturité de ma capacité de programmation.
  2. J'ai écrit un commentaire sérieusement.
  3. J'ai eu quelques problèmes lors de l'utilisation du débogueur dans l'implémentation de la réduction des solutions après avoir résolu les équations simultanées.
  4. Il a fallu plus de temps que prévu pour installer SymPy.

6. Code complété

from sympy import symbols, expand, cos, Rational, sqrt, solve, Abs
import time

#Je veux afficher le temps qu'il a fallu pour résoudre, alors souvenez-vous de la première fois.
offset = time.time()

#Définition du symbole. Dans ce problème, α et β sont traités comme des symboles de a et b, respectivement.
a, b = symbols('a b')

# (1)Quand(2)Chaque formule est f1= 0, f2 = 0Quandなるような関数f1, f2Quandして定義。
#Après cela, cos(a)Et cos(b)Puisqu'il résout les équations simultanées par rapport à(1)Déployer(expand)Je le ferai.
f1 = expand(cos(2*a) + cos(2*b) - Rational(4, 15), trig = True)
f2 = cos(a) * cos(b) + 2 * sqrt(15) / 15

#Équations simultanées de f1 et f2, cos(a)Et cos(b)Résoudre pour(solve)。
answers = solve([f1, f2], [cos(a), cos(b)])

# 0 <= a <= π, 0 <= b <=En π, a,Le plus grand b est cos(a), cos(b)La valeur de devient plus petite.
# a <b, donc cos(a) > cos(b)Cherchez quelque chose qui sera.
#Et,(3)Trouvez celui qui remplit les conditions de.
for cos_a, cos_b in answers:
    if cos_a > cos_b and Abs(cos_a) >= Abs(cos_b):
        break

#Cible cos(a)Et cos(b)Je l'ai, donc je vais l'afficher([Ko][Un service][Shi][Su][Se][Alors]Répondre)。
print("[Kosashi] -> {}, [Suseso] -> {}".format(cos_a, cos_b))

# cos(a)Et cos(b)Trouvez le carré de chacun.
squared_cos_a = cos_a ** 2
squared_cos_b = cos_b ** 2

# cos(a)Carré et cos(b)Montre le carré de([Puissance][Ki][Ku][Ke]Répondre)。
print("[huître] -> {}, [Kuke] -> {}".format(squared_cos_a, squared_cos_b))

# cos(a)Carré et cos(b)Affiche également la somme et le produit des carrés de([UNE][je][C][ré][Oh]Répondre)。
print("[Aiue] -> {}".format(squared_cos_a + squared_cos_b))
print("[Oh] -> {}".format(squared_cos_a * squared_cos_b))

#Affiche le temps qu'il a fallu pour résoudre.
elapsed = time.time() - offset
print('Temps de résolution: {0:.4f}milliseconde'.format((elapsed * 1000)))

Recommended Posts