[Python] Fonctionnalisation de la formule de Heron et calcul de la surface maximale

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.

Officiel de Heron

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.

Fonctionnalisation officielle de Heron

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.

Calcul de la superficie maximale

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

Code source

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

Ici, afin d'utiliser des nombres aléatoires, nous allons importer la fonction de bibliothèque aléatoire.
Cette fois, la longueur totale des trois côtés est fixée à 120. J'expliquerai pourquoi il est 120 ans plus tard.
___ randint(a, b) randint () renvoie un nombre aléatoire d'entiers supérieur ou égal à a et inférieur ou égal à b.

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

résultat

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