python + sympy로 기계 설계 계산서 자료 작성

동기 부여



저는 보통 jupyter를 사용하여 일을 하고 있는 기계계 엔지니어입니다만, 현재 소속되어 있는 회사에서는 종이에서의 출력이 요구되고 있어 이것의 대응에 고민하고 있습니다.
jupyter로 회사 지정의 포맷에 종이로 출력하는 것은 어렵기 때문에, 현재는, MS오피스에 jupyter에서의 검토 결과를 붙여 대응하고 있습니다만, 설계 계산서의 수식계가 멘드 굵었기 때문에 , 파이썬의 sympy에서 시도했습니다.

환경


  • windows10
  • anaconda
  • 파이썬 3.7.1

  • 이마즈키 포인트


  • 그리스 문자를 jupyrer 안에서 사용
    jupyter의 코드에서 "\sigma + tab"에서 σ를 사용할 수 있습니다. 편리!
  • 단위를 sympy로 붙인다
    구그라면 곧바로 발견된다고 생각했는데, 좀처럼 발견되지 않았다. . .
    결과적으로 단위를위한 기호를 만들고 *로 연결하면 OK
  • sympy에서 위 첨자 표시와 같은 방법을 알지 못했습니다.
    LaTex의 커맨드가 대체로 사용할 수 있는 것을 알았다. 아래 사이트가 잘 정리되어 GOOD!
    htp://w w1. Y. jp / ~ 요카 / ㅁ X / ㅁ x. HTML

  • 했던 일



    집중 하중 외팔보의 계산을 해 보았습니다. 하중, 길이, 단면계수를 입력하면 계산서에서 사용할 수 있는 출력을 출력하고 있습니다. jupyter로 가져오고 사용한다고 가정합니다.

    beam.py
    from sympy import Symbol,pi,Eq
    from IPython.display import display
    from sympy.interactive import printing
    printing.init_printing(use_latex=True)
    
    #使用するシンボルはグローバルで定義
    σmax= Symbol('σ_max')
    eσmax= Symbol('σ_max')
    MPa= Symbol('(MPa)')
    Mmax= Symbol('M_max')
    eMmax= Symbol('M_max')
    N_mm= Symbol('(N \cdot mm)')
    Z= Symbol('Z')
    eZ= Symbol('Z')
    mm3= Symbol('({mm^3})')
    F= Symbol('F')
    eF= Symbol('F')
    N= Symbol('(N)')
    L= Symbol('L')
    eL= Symbol('L')
    mm= Symbol('(mm)')
    
    paramater_dict= {
        "σmax":["曲げ応力","MPa"],
        "Mmax":["曲げモーメント","N_mm"],
        "Z":["断面係数","mm3"],
        "F":["荷重","N"],
        "L":["梁の長さ","mm"]
        }
    
    def siki_hyoji(atai,unit_opp = True):
        """sympyで式を表示する関数です
          ( a = b [mm] の形で返す)
        Arguments:
            atai {str} -- パラメータ名
    
        Keyword Arguments:
            unit_opp {bool} -- 単位の表示有無 (default: {True}単位を表示する)
    
        Returns:
            [sympy] -- sympyの式をかえします
        """
        ns = globals()
        hidari = ns["e"+atai]
        migi = ns[atai]
        unit = ns[paramater_dict[atai][1]]
        if unit_opp == True:
            siki = Eq(hidari,migi*unit)
        else:
            siki = Eq(hidari,migi)
        return siki
    
    def katamochi_bari(paramater):
        """片持ち梁の計算書ネタを作成します[荷重,長さ,断面係数]
    
        Arguments:
            paramater {list} -- [荷重,長さ,断面係数]
        """
    
        global σmax,Mmax,Z,F,L #global変数を編集可能にする
        print("曲げ応力は以下の式で表される")
        σmax = Mmax/Z
        Mmax = F*L
        display(siki_hyoji("σmax",False),siki_hyoji("Mmax",False))
    
        print("各パラメータの値を以下に示す")
        F = paramater[0]
        L = paramater[1]
        Z = paramater[2]
        display(siki_hyoji("F"),siki_hyoji("L"),siki_hyoji("Z"))
    
        print("以上より")
        Mmax = F*L
        σmax = Mmax/Z
        σmax = round(σmax)
        display(siki_hyoji("Mmax"),siki_hyoji("σmax"))
    
    

    실행 방법



    jupyter 파일을 같은 폴더에 beam.py를 놓습니다.
    다음과 같이 실행하면 계산서의 재료가 완성!



    소스 코드



    sympy에 대한 symbol을 만드는 것이 어색했기 때문에 utility.py에서 매개 변수 사전에서 symbol을 만들 수 있습니다.

    혼자



    앞으로 확장해 나가면 작업이 편해질 것 같다.
    일본어 변수, 괜찮아. . . 하지만 사용합니다.
    이번이, 첫 투고입니다!

    좋은 웹페이지 즐겨찾기