Même si vous trouvez une formule dans un papier ou un manuel, son utilisation prend du temps. De plus, il faut plus de temps pour le déposer dans le document. Par conséquent, nous avons créé un flux de travail qui peut être utilisé pour la programmation et la documentation ultérieure en utilisant des images mathématiques comme entrée.
Latex en utilisant un service appelé Mathpix. L'inscription est requise, mais cela rendra bien l'image.
C'est comme ça
Nous traiterons la chaîne AsciiMath et la convertirons en une forme pouvant être utilisée en python.
--Copier Ascii Math sur l'onglet "données" de Mathpix Sur la base de cette chaîne de caractères, nous la rendrons disponible dans le programme.
Prétraiter la chaîne
--a: coller la chaîne Ascii Math --shoki_dict: Le dictionnaire à remplacer en premier * Mis à jour de temps en temps
translate_1.py
import re
# a = "sigma=(E alpha DeltaT)/(1-nu)*(1)/(1.5+3.25//beta-0.5 exp(-16//beta))"
# a = "M_(max)=(w*l^(2))/(8)"
a= "delta_(max)=(5*w*l^(4))/(384 E*I)"
# a ="K=(1.7 xx10^(5))/((delta_(1)+delta_(0))/(lambda_(1))+(delta_(2)+delta_(0))/(lambda_(2)))xx(0.6P)/(H)+(10^(6)lambda_(f))/(delta_(1)+delta_(2))"
shoki_tikan_dict = {" ":"*",
"xx":"*",
"^":"**",
"//":"/"}
for i in shoki_tikan_dict:
a = a.replace(i,shoki_tikan_dict[i])
temp = re.sub("_\((.*?)\)","0",a)#Pour que vous puissiez obtenir la variable en ignorant l'indice_()À 0
hensu = re.findall("[A-Za-z]+",temp)#Extraire des variables
li_moji = list(set(hensu))#Supprimer les variables en double
print(a)
print(li_moji)
Lorsque ce qui précède est exécuté, ce qui suit est émis. S'il y a quelque chose qui ne va pas avec la formule ici, corrigez-le. Assurez-vous également que les variables sont correctement extraites. (Ignorez les extra. Dans l'exemple, ignorez "exp") sigma=(EalphaDeltaT)/(1-nu)(1)/(1.5+3.25/beta-0.5exp(-16/beta)) ['nu', 'sigma', 'DeltaT', 'beta', 'alpha', 'exp', 'E']
Convertissez les lettres et indices grecs en formules
--moji_dict: Liste utilisée lors de l'extraction des paramètres (caractères grecs) * Mis à jour de temps en temps
translate_2.py
moji_dict = {'lambda':"λ",
'delta':"δ",
'sigma':"σ",
'alpha':"α",
'DeltaT':"ΔT",
'nu':'ν',
'beta':'β',
'epsi':"ε",
'pi':'π',
'mu':'μ'}
def tikan(moji_retsu,taisho,moji_dict):
# print(taisho)
taisho_temp = taisho+"_"
seiki_1 = taisho_temp + "\(.*?\)"
seiki_2 = taisho_temp + "\((.*?)\)"
b = re.findall(seiki_1,moji_retsu)
if len(b) != 0:
if taisho in moji_dict:
tikan_moji = moji_dict[taisho]
else:
tikan_moji = taisho
# print(tikan_moji)
newList = [re.sub(seiki_2,tikan_moji+"\\1",item) for item in b]
moji_retsu = re.sub(seiki_2,tikan_moji+"\\1",moji_retsu)
elif taisho in moji_dict:
tikan_moji = moji_dict[taisho]
newList = [tikan_moji]
moji_retsu = moji_retsu.replace(taisho,tikan_moji)
else:
tikan_moji = taisho
newList = [taisho]
return moji_retsu,newList
li=[]
for i in li_moji:
a,p = tikan(a,i,moji_dict)
li.extend(p)
li=list(set(li))
li.sort()
a = re.sub("\(([0-9])\)","\\1",a)
print(a)
print(li)
Lorsque vous exécutez ce qui précède, ce qui suit sera affiché σ=(EαΔT)/(1-ν)1/(1.5+3.25/β-0.5exp(-16/β)) ['E', 'exp', 'ΔT', 'α', 'β', 'ν', 'σ']
Ensuite, ajoutez des indices pour former la formule. C'est la fin de ce qui peut être fait automatiquement, et le reste est manuellement transformé en une expression qui peut être utilisée en python.
result_Eq.py
import math
σ=(E*α*ΔT)/(1-ν)*1/(1.5+3.25/β-0.5*math.exp(-16/β))
Maintenant que la formule est complète, il est temps d'extraire les paramètres.
paramater_print.py
print("paramater_dict= {")
for i in li:
print(" " + "'" + i +"':['',''],")
print(" }")
Lorsque vous exécutez ce qui précède, ce qui suit sera produit.
out.py
paramater_dict= {
'E':['',''],
'exp':['',''],
'ΔT':['',''],
'α':['',''],
'β':['',''],
'ν':['',''],
'σ':['',''],
}
C'est la fin du fonctionnement automatique et les actions suivantes sont effectuées manuellement pour les paramètres.
result.py
paramater_dict= {
'E':['Module d'Young','MPa'],
'ΔT':['Différence de température intérieure et extérieure','K'],
'α':['Coefficient de dilatation linéaire','/K'],
'β':['Numéro bio',''],
'ν':['Coefficient de Poisson',''],
'σ':['Stress thermique','MPa'],
}
run.py
import math
E = 200
ΔT = 10
α = 0.00005
β = 2
ν = 0.3
σ=(E*α*ΔT)/(1-ν)*1/(1.5+3.25/β-0.5*math.exp(-16/β))
print(σ)
Si vous faites ce qui précède, vous obtiendrez la réponse. 0.045716739515498046
À ce stade, vous pouvez facilement documenter à l'aide de sympy en appliquant l'article suivant. Créer un matériau de feuille de calcul de conception mécanique avec python + sympy
Créez des formules appropriées et partagez-les ci-dessous (mises à jour le cas échéant) Formules et fonctions (mises à jour le cas échéant)
J'ai pensé à utiliser une bibliothèque telle que latex2sympy, mais c'était assez difficile. J'ai appris les expressions régulières dans lesquelles je ne suis pas douée! Mathpix ne peut pas être utilisé en raison de la sécurité de l'entreprise. .. .. Je suis désolé
Recommended Posts