파이썬 변수 행렬 연산 ( Symbolic 계산)

종강을 앞두고 그동안 쓴 레포트를 제출하기 전에 점검하면서 생각난 김에 적어봅니다. 뜬금없이 과제로 로봇공학쪽 내용인 자유도6로봇팔의 제어의 Forward Kinetics와 Inverse Kinetics를 계산해야했다. Forward Kinetics를 계산하려면 회전행렬을 6개를 곱해줘야 하는데 이것을 전부 변수로 계산하려니 머리가 띵해져서 파이썬의 힘을 빌리기 위해 조사했다. from sympy import * var('s1 s2 s3 s4 s5 s6 c1 c2 c3 c4 c5 c6 a2 a3 a4 d4') T1=Matrix([[c1, -s1, 0, 0],[s1, c1, 0, 0],[0, 0, 1, 0],[0, 0, 0, 1]]) T2=Matrix([[s2, c2, 0, a2],[0, 0, 1, 0],[c2, -s2, 0, 0],[0, 0, 0, 1]]) T3=Matrix([[c3, -s3, 0, a3],[s3, c3, 0, 0],[0, 0, 1, 0],[0, 0, 0, 1]]) T4=Matrix([[c4, -s4, 0, a4],[0, 0, 1, d4],[-s4, -c4, 0, 0],[0, 0, 0, 1]]) T5=Matrix([[-s5, -c5, 0, 0],[0, 0, -1, 0],[c5, -s5, 0, 0],[0, 0, 0, 1]]) T6=Matrix([[c6, -s6, 0, 0],[0, 0, 1, 0],[-s6, -c6, 0, 0],[0, 0, 0, 1]]) Tf=T1.multiply(T2).multiply(T3).multiply(T4).multiply(T5).multiply(T6) print(Tf) 먼저 sympy라는 모듈을 불러온다. 그리고 var 안에 자신이 변수로 쓸 문자들을 미리 선언해준다. 다음 그 변수와 상수를 사용하여 Matrix를 선언하고 곱해준다. ...

August 6, 2021 · EBeb

파이썬 리스트 카운트, 정렬 (Counter, sort) with. AES DDT

과제중에 AES의 차분공격을 위해 AES의 DDT(differential distribution table)을 계산해야할 일이 있었다. 차분공격과 DDT에대한 개념은 넘겨두고 요점은 Sbox에 Δx의 차이를 가진 두 입력의 출력의 차이 Δy의 출현값 분포표를 계산하는 것이다. 계산방법등을 생략하면 리스트안에 지저분하게 값들이 append 되어있다. 물론 dict를 미리 선언하고 없으면 아이템을 추가한 뒤 이후에 사전에 존재하는 아이템일 경우 +1을 하는 방식으로 해도 괜찮지만 파이썬에는 대충 리스트안에 값들을 다 박아두면 이런 것들을 자동으로 해주는 장치가 있을 것이라는 믿음이 있었다. Counter함수 파이썬으로 코드를 짜면 가장 편한 것은 이거 이렇게 한번에 해주는게 없을까? 하면 늘 있어준다는 것이다 ...

August 6, 2021 · EBeb