[Konfrontation! Menschliche Kraft gegen Python] Was ist schließlich schneller, wenn Sie die Mathematik des Zentraltests mit Python lösen oder selbst lösen?

Wenn Sie denken, dass es etwas ist, das Sie irgendwo gesehen haben

Immerhin gab es einen Vorgänger (vielleicht gibt es noch andere). **Toll! ** ** **

1. Was Sie zum Zentraltest mitbringen können

Es scheint, dass Sie Folgendes einbringen können, aber im Moment scheint es, dass ** Python-Interpreter nicht in </ font> ** eingebracht werden kann. Seien Sie also vorsichtig. Für Entwickler ist die Behauptung, dass die Entwicklungsumgebung wie ein Bleistift ist, ** nicht verständlich **. ** * Bringen Sie niemals etwas anderes als das, was erlaubt ist! </ font> **

*Schwarzer Bleistift(Beschränkt auf H, F, HB. Japanische Gedichte, Wörter usw. werden nicht gedruckt.), Bleistiftkappe.
*Druckbleistift(Nur für Memos und Berechnungen verfügbar, beschränkt auf schwarze Kerne.)
*Radiergummi aus Kunststoff
*Bleistiftspitzer(Elektrisch, groß und Messer sind nicht erlaubt.)
*Uhr(Elemente mit Funktionen wie Wörterbüchern, Taschenrechnern und Terminals, Elemente, bei denen es schwierig ist zu bestimmen, ob sie über solche Funktionen verfügen, Elemente, die einen gebrauchten Klang erzeugen, Küchenuhren und große Elemente sind nicht zulässig.)
*Gläser, Taschentücher, Augentropfen, Seidenpapier(Nur der Inhalt wird aus dem Beutel oder der Schachtel genommen.)

2. Das Problem, diesmal zu konkurrieren

** Nur die erste Frage [1] des Prüfungszentrums für Hochschulzugangsprüfung 2017 Mathematik II / Mathematik B **.

Warum ich diese Frage gewählt habe: "Ich denke, ich kann diese Frage mit Python gewinnen."

** Frage 1 (erforderliche Frage) (Punktzahl 30) **

[1] Gleichzeitige Gleichungen

\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.

Denk an. Es ist jedoch $ 0 \ leqq \ alpha \ leqq \ pi, \ quad 0 \ leqq \ beta \ leqq \ pi $, $ \ alpha <\ beta $ und

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

Und. Lassen Sie uns zu diesem Zeitpunkt die Werte von $ cos , \ alpha $ und $ cos , \ beta $ ermitteln.

Unter Verwendung der Doppelwinkelformel aus (1)

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

Wird erhalten. Auch aus (2),

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

Ist. Verwenden Sie daher Bedingung (3)

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

Ist. Aus der Bedingung von (2) $ 0 \ leqq \ alpha \ leqq \ pi, \ quad 0 \ leqq \ beta \ leqq \ pi, \ quad \ alpha <\ beta $

cos \, \alpha = \frac{[Ko]\sqrt{[Bedienung]}}{[Shi]} \quad, \quad\quad cos \, \beta = \frac{[Su]\sqrt{[Se]}}{[Damit]}

Ist.

3. Siegbedingungen auf der Seite "Python + me"

Angesichts der Gesamtmenge des Problems denke ich, dass dieses Problem wahrscheinlich schwerwiegend sein wird, wenn es nicht innerhalb von 6 oder 7 Minuten behoben wird. Stellen Sie in diesem Sinne die Gewinnbedingungen auf der Seite "Python + I" wie folgt ein.

  • Die für die Codierung und Ausführungszeit erforderliche Gesamtzeit beträgt 5 Minuten.
  • Es dauert weniger als 3 Minuten, nein, weniger als 2 Minuten, um ein Level zu erreichen, das als vollständiger Sieg bezeichnet werden kann.
  • Die Python-Entwicklungsumgebung (einschließlich IDE) ist möglicherweise vorinstalliert und gestartet.

Die als Referenz vorbereitete Umgebung ist wie folgt.

  • Windows 10 Pro
  • Python 3.6
  • Visual Studio Code + Python-Erweiterung installiert

4. Es ist immer ein Match!

(Der gesamte ausgefüllte Code wird am Ende dieses Artikels veröffentlicht.)

4.1 Ignorieren Sie die Anleitung des Fragestellers von Anfang an!

Ich sage, dass ich die Doppelwinkelformel nicht verstehe Plötzlich wird es aus dem letzten $ cos \ alpha, cos \ beta $ berechnet. Sie sollten dies mit Python und SymPy tun können. Installieren Sie zuerst SymPy!

pip install sympy

Lösen wir alles auf einmal!

f_1 = cos \, 2\alpha + cos \, 2\beta - \frac{4}{15} f_2 = cos \, \alpha \, \, cos \, \beta + \frac{2\sqrt{15}}{15} Als simultane Gleichung von $ f_1 = 0 $ und $ f_2 = 0 $, Wir werden nach $ cos , \ alpha $ und $ cos , \ beta $ auflösen.

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

#Symboldefinition. In diesem Problem werden α und β als Symbole von a bzw. b behandelt.
a, b = symbols('a b')

# (1)Wann(2)Jede Formel ist f1= 0, f2 = 0Wannなるような関数f1, f2Wannして定義。
#Danach cos(a)Und cos(b)Da es die simultanen Gleichungen in Bezug auf löst(1)Bereitstellen(expand)Ich werde das machen.
f1 = expand(cos(2*a) + cos(2*b) - Rational(4, 15), trig = True)
f2 = cos(a) * cos(b) + 2 * sqrt(15) / 15

#Gleichzeitige Gleichungen von f1 und f2, cos(a)Und cos(b)Lösen für(solve)。
answers = solve([f1, f2], [cos(a), cos(b)])

4.2 Von den Bedingungen auf die gewünschte Lösung eingrenzen.

An diesem Punkt sollten "Antworten" einige Lösungen haben, aber finden Sie die gewünschte aus den Bedingungen.

$ 0 \ leqq \ alpha \ leqq \ pi, \ quad 0 \ leqq \ beta \ leqq \ pi $ mit der Bedingung $ \ alpha <\ beta $ Im Bereich von $ 0 \ leqq \ theta \ leqq \ pi $ wird $ cos \ theta $ kleiner, wenn $ \ theta $ größer wird Suchen Sie eine Lösung, die $ cos \ alpha> cos \ beta $ lautet. Und,(3)Bedingungen|cos \, \alpha| \geqq |cos \, \beta|Bewerten Sie auch, um die gewünschte Lösung zu finden.

Da der absolute Wert herausgekommen ist, fügen Sie ihn zu "import" hinzu.

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

Danach werden wir aus der Liste der in "Antworten" enthaltenen Lösungssätze nach dem Lösungssatz suchen, der die Bedingungen erfüllt. In der "if" -Anweisung wird die Bedingung einfach in einen bedingten Ausdruck umgewandelt.

# 0 <= a <= π, 0 <= b <=In π a,Das größere b ist cos(a), cos(b)Der Wert von wird kleiner.
# a <b, also cos(a) > cos(b)Suchen Sie nach etwas, das sein wird.
#Und,(3)Finden Sie diejenige, die die Bedingungen von erfüllt.
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] Gefangennahme abgeschlossen!

Dies gibt Ihnen $ cos \ alpha, cos \ beta $.

#Ziel cos(a)Und cos(b)Ich habe es, also werde ich es anzeigen([Ko][Bedienung][Shi][Su][Se][Damit]Antworten)。
print("[Kosashi] -> {}, [Suseso] -> {}".format(cos_a, cos_b))

4.4. Der Rest ist einfach!

Fragen Sie einfach nach $ cos ^ 2 \ alpha, cos ^ 2 \ beta $ und $ cos ^ 2 \ alpha + cos ^ 2 \ beta $, $ cos ^ 2 \ alpha , , cos ^ 2 \ beta $ Da $ cos \ alpha und cos \ beta $ bereits berechnet wurden, können sie einfach durch Berechnung berechnet werden.

# cos(a)Und cos(b)Finde das Quadrat von jedem.
squared_cos_a = cos_a ** 2
squared_cos_b = cos_b ** 2

# cos(a)Quadrat und cos(b)Zeigt das Quadrat von([Leistung][Ki][Ku][Ke]Antworten)。
print("[Auster] -> {}, [Kuke] -> {}".format(squared_cos_a, squared_cos_b))

# cos(a)Quadrat und cos(b)Zeigt auch die Summe und das Produkt der Quadrate von an([EIN][ich][C.][D.][Oh]Antworten)。
print("[Aiue] -> {}".format(squared_cos_a + squared_cos_b))
print("[Oh] -> {}".format(squared_cos_a * squared_cos_b))

(Der gesamte ausgefüllte Code wird am Ende dieses Artikels veröffentlicht.)

5. Gewinnen oder verlieren

Die Zeit, die zum Ausführen des fertigen Python-Codes benötigt wurde (die Zeit, um alle Lösungen zu finden), beträgt In meiner Umgebung waren es ** weniger als 400 Millisekunden ** (genau zu dem Zeitpunkt, seit der Code ausgeführt wurde).

Die für die Codierung erforderliche Zeit betrug jedoch ** 14 Minuten 41 Sekunden 524 ** Es war eine völlige Niederlage auf der Python-Seite (oder mir), eine überwältigende Niederlage. .. ..

(Da dieser Artikel selbst nach Abschluss des Spiels mit dem Schreiben begonnen hat, ist die Schreibzeit des Artikels nicht enthalten.)

5.1. Analyse der Ursache der Niederlage

  1. Unreife meiner Programmierfähigkeit.
  2. Ich habe ernsthaft einen Kommentar geschrieben.
  3. Ich hatte einige Probleme bei der Verwendung des Debuggers bei der Implementierung der Eingrenzung der Lösungen nach dem Lösen der simultanen Gleichungen.
  4. Die Installation von SymPy dauerte länger als erwartet.

6. Code abgeschlossen

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

#Ich möchte die Zeit ausgeben, die zum Lösen benötigt wurde. Denken Sie also an das erste Mal.
offset = time.time()

#Symboldefinition. In diesem Problem werden α und β als Symbole von a bzw. b behandelt.
a, b = symbols('a b')

# (1)Wann(2)Jede Formel ist f1= 0, f2 = 0Wannなるような関数f1, f2Wannして定義。
#Danach cos(a)Und cos(b)Da es die simultanen Gleichungen in Bezug auf löst(1)Bereitstellen(expand)Ich werde das machen.
f1 = expand(cos(2*a) + cos(2*b) - Rational(4, 15), trig = True)
f2 = cos(a) * cos(b) + 2 * sqrt(15) / 15

#Gleichzeitige Gleichungen von f1 und f2, cos(a)Und cos(b)Lösen für(solve)。
answers = solve([f1, f2], [cos(a), cos(b)])

# 0 <= a <= π, 0 <= b <=In π a,Das größere b ist cos(a), cos(b)Der Wert von wird kleiner.
# a <b, also cos(a) > cos(b)Suchen Sie nach etwas, das sein wird.
#Und,(3)Finden Sie diejenige, die die Bedingungen von erfüllt.
for cos_a, cos_b in answers:
    if cos_a > cos_b and Abs(cos_a) >= Abs(cos_b):
        break

#Ziel cos(a)Und cos(b)Ich habe es, also werde ich es anzeigen([Ko][Bedienung][Shi][Su][Se][Damit]Antworten)。
print("[Kosashi] -> {}, [Suseso] -> {}".format(cos_a, cos_b))

# cos(a)Und cos(b)Finde das Quadrat von jedem.
squared_cos_a = cos_a ** 2
squared_cos_b = cos_b ** 2

# cos(a)Quadrat und cos(b)Zeigt das Quadrat von([Leistung][Ki][Ku][Ke]Antworten)。
print("[Auster] -> {}, [Kuke] -> {}".format(squared_cos_a, squared_cos_b))

# cos(a)Quadrat und cos(b)Zeigt auch die Summe und das Produkt der Quadrate von an([EIN][ich][C.][D.][Oh]Antworten)。
print("[Aiue] -> {}".format(squared_cos_a + squared_cos_b))
print("[Oh] -> {}".format(squared_cos_a * squared_cos_b))

#Zeigt die Zeit an, die zum Lösen benötigt wurde.
elapsed = time.time() - offset
print('Zeit zum Lösen gebraucht: {0:.4f}Millisekunde'.format((elapsed * 1000)))

Recommended Posts