공식(그림)python화 작업 프로세스
18059 단어 Python
모티프
논문과 교과서에서 공식을 찾아서라도 활용하는 데 시간이 걸린다.더군다나 문서에 빠지면 시간이 더 걸린다.
따라서 공식 이미지를 입력으로 하고 프로그래밍에 사용할 수 있으며 이후의 문서화에도 사용할 수 있는 작업 절차를 만들었다.
※ 전자동은 어렵기 때문에 사람과의 협업 작업입니다.
그림부터 latex화
Mathpix의 서비스를 이용하여latex화하다.등록 등은 필요하지만 좋은 느낌으로 이미지를 latex화합니다.
이런 느낌이에요.
AsciMath 문자열 가져오기
Actimath의 문자열을 pythn에서 사용할 수 있는 형식으로 변환하기
이 문자열을 기반으로 프로그램에서 사용할 수 있습니다.
프리 프로세싱
문자열 사전 처리
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)#添字を無視して変数を取得できるよう、_()を0に変換
hensu = re.findall("[A-Za-z]+",temp)#変数を抜き出します
li_moji = list(set(hensu))#変数の重複を消す
print(a)
print(li_moji)
이 내용을 실시하면 다음과 같은 내용을 출력할 것이다.만약 이곳식에 이상한 점이 있다면, 나는 수정할 것이다.또 변수가 추출되었는지 확인한다.(무시할 수 있는 예시에서 여분의'exp'가 무시됨)sigma=(E*alpha*DeltaT)/(1-nu)*(1)/(1.5+3.25/beta-0.5*exp(-16/beta))
['nu', 'sigma', 'DeltaT', 'beta', 'alpha', 'exp', 'E']
변환 표현식
그리스 문자와 색인을 공식으로 바꾸다
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)
상기 조작을 실행하면 다음과 같은 내용을 출력합니다σ=(E*α*ΔT)/(1-ν)*1/(1.5+3.25/β-0.5*exp(-16/β))
['E', 'exp', 'ΔT', 'α', 'β', 'ν', 'σ']
이어서 흰 글자를 붙이면서 공식적인 모양을 만든다.
자동으로 완성된 것은 여기까지입니다. 그리고python을 수동으로 사용하십시오.
result_Eq.py
import math
σ=(E*α*ΔT)/(1-ν)*1/(1.5+3.25/β-0.5*math.exp(-16/β))
공식이 완성되었으니 다음에 매개 변수를 추출합니다.paramater_print.py
print("paramater_dict= {")
for i in li:
print(" " + "'" + i +"':['',''],")
print(" }")
위 작업을 수행하면 다음 내용이 출력됩니다.out.py
paramater_dict= {
'E':['',''],
'exp':['',''],
'ΔT':['',''],
'α':['',''],
'β':['',''],
'ν':['',''],
'σ':['',''],
}
자동 여기까지 매개 변수에 대해 수동으로 다음과 같은 처리를 진행한다paramater_dict= {
'E':['ヤング率','MPa'],
'ΔT':['内外温度差','K'],
'α':['線膨張係数','/K'],
'β':['ビオ数',''],
'ν':['ポアソン比',''],
'σ':['熱応力','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(σ)
이 내용을 실행하면 정답이 나온다.0.045716739515498046
문서화
이렇게 하면 다음 글의 응용에서sympy를 사용하여 간단하게 문서화할 수 있다.
python+sympy로 기계 시스템 설계 계산표 소재 만들기
작성된 방정식 정보
적절한 의식을 만들고 아래에서 공유(적절한 업데이트)
공식 및 함수(적절한 업데이트)
후기
latex2sympy 등 프로그램 라이브러리를 사용하려고 했지만 어렵습니다.
못하는 정규 표현을 배웠어요!
회사의 안전 관계로 인해 Mathpix를 사용할 수 없습니다...슬프다.
Reference
이 문제에 관하여(공식(그림)python화 작업 프로세스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/myao9494/items/62cf3c9bc7e600922a9d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)