Définissez les trois côtés du triangle comme x, y, z et soit x + y + z = L (constante). Répondez à ce qu'est un triangle qui maximise l'aire du triangle lorsque L est constant.
A été délivré par l'école.
Normalement, il serait nécessaire de résoudre cela mathématiquement, mais au moment où j'ai vu ce problème.
"N'est-il pas plus évident et plus facile à comprendre si cela est prouvé par un programme?"
J'ai pensé ainsi.
Donc, cette fois, j'ai pensé à créer la fonction officielle de Heron en Python et à la prouver avec une boucle while.
zone=
\sqrt{s(s-x)(s-y)(s-z)}\\
s=
\frac{x+y+z}{2}
Tout d'abord, faisons de la formule de Heron une fonction.
def heron(a, b, c):
x, y, z = float(a), float(b), float(c)
s = (x + y + z) / 2
if x+y>z and y+z>x and z+x>y:
return (s * (s - x) * (s - y) * (s - z)) ** 0.5 #Officiel de Heron
else:
return 0
if __name__ == '__main__':
x = input('Valeur de x: ')
y = input('Valeur de y: ')
z = input('valeur de z: ')
print(heron(x, y, z))
Maintenant, nous avons une fonction de la formule de Heron.
Dans l'instruction if, un branchement conditionnel se produit selon que le triangle tient ou non.
Si elle tient, le résultat de la formule de Heron est retourné, et s'il ne tient pas, 0 est retourné.
Je pourrais mettre l'instruction input dans la fonction, mais je ne l'ai pas mise car je sentais qu'il valait mieux l'assigner comme argument.
~~ Quelle est la forme du triangle qui maximise l'aire lorsque le total L des longueurs des trois côtés est constant?
En y réfléchissant, la première chose à laquelle les humains pensent est le round robin </ b>.
Cependant, il n'est pas impossible pour les humains d'effectuer cette énorme quantité de calculs, mais c'est extrêmement difficile.
Alors que feriez-vous? Laissez simplement l'ordinateur le faire. Cela conduit à l'idée. ~~
import random
def heron(a, b, c): #Officiel de Heron
x, y, z = float(a), float(b), float(c)
s = (x + y + z) / 2
if x+y>z and y+z>x and z+x>y:
return (s * (s - x) * (s - y) * (s - z)) ** 0.5
else:
return 0
if __name__ == '__main__':
s = 0
i = 0
while i < 20000000:
x = random.randint(1, 120) #Peut être changé
y = random.randint(1, 120) #Peut être changé
z = random.randint(1, 120) #Peut être changé
if (x+y+z) == 120.0: #Le total des côtés est de 120
if heron(x, y, z) > s:
s = heron(x, y, z)
print('x={}, y={}, z={}Dans les zones={}'.format(x, y, z, s))
else:
continue
i += 1
else:
i += 1
Si vous souhaitez utiliser des nombres aléatoires réels, utilisez uniform (a, b) </ b>.
Puisqu'il renvoie 3 types de nombres aléatoires d'entiers ~~ 1 ~ 120, il faut boucler 1728000 fois de 120 cubes par simple calcul.
Juste au cas où, cette fois, il boucle 2 millions de fois.
Il est émis chaque fois que la valeur maximale est mise à jour, et la dernière sortie est la valeur maximale de l'aire de ce triangle. ~~
Tout d'abord, le triangle régulier </ b> a la valeur maximale.
La raison pour laquelle la longueur totale des trois côtés est de 120 est que je m'attendais au résultat de x = 40, y = 40, z = 40 </ b>.
Vous devriez obtenir le même résultat lorsque vous exécutez réellement le code source.
Même si vous modifiez la valeur, si "(longueur totale de 3 côtés) / 3" est valide, alors x = y = z doit être satisfait.
Recommended Posts