이 포스팅은 System Dynamics 시리즈 8 편 중 6 번째 글 입니다.

  • Part 1 - 01: 다물체 동역학 개론
  • Part 2 - 02: 평면에서 다물체계의 운동학
  • Part 3 - 03: Orthogonality, Vector Differentiation, Jacobi's Theorem
  • Part 4 - 04: 평면에서의 기구학
  • Part 5 - 05: 기구학적 제약
  • Part 6 - This Post
  • Part 7 - 07: Computational Algorithm
  • Part 8 - 08: Newton-Euler Equations, D'Alembert's Principle
▼ 목록 보기

Tayler Series

테일러 급수는, 임의의 함수를 무한개의 다항식을 더하여 근사하는 방법이다.

f(x)=f(a)+f(a)(xa)+f(a)2!(xa)2+f(a)2!(xa)3=\infinn=0fn(a)n!(xa)n

보통 테일러 급수는 1차 함수로 근사할 때 많이 사용한다.

Newton-Rahpson method

뉴턴 랍슨 메서드의 핵심은, iterative 접근이다.

1변수 함수에서 Newton-Rahpson method

스크린샷 2019-05-07 오후 1 18 53

다음과 같은 함수가 있다고 하자. 우리가 하고 싶은 것은 이 함수의 을 찾는 것이다. 그러기 위해서 테일러 시리즈를 사용해보자. 이 함수 f는 1차까지만 근사하면 다음과 같다.

f(x)=f(a)+f(a)(xa)

이 때, 이 근사를 시작하는 점, a를 x_i로 주면,

f(x)=f(xi)+f(xi)(xxi)

그렇다면 이 xi로 시작해서 이 함수를 근사했으므로, 근사한 식을 0으로 만드는 것이 답이다. **이 근사된 함수로 나온 solution을 x(i+1) 이라 하자.**

f(xi+1)=f(xi)+f(xi)(xi+1xi)f(xi+1)=f(xi)+f(xi)(Δx)f(xi+1)=0.

우리는 x_(i+1)을 찾고 싶으므로, 위의 가정들을 식에 다 집어넣으면,

f(xi+1)=f(xi)+f(xi)(Δxi)=0Δxi=f(xi)f(xi)

따라서, 우리가 원하는 x_(i+1) 은 다음과 같다.

xi+1=xi+Δxi

나온 x_(i+1)을 다시 a로 넣고, 이 작업을 반복하게 되면, 해 근처에 갔을 때, 델타 x가 매우 작아진다. 이 때, 우리는 해를 찾았다고 return 해준다.

일반화된 Newton-Rahpson method

그렇다면, 식이 2개, 변수가 2개인 벡터 함수에서는 어떻게 근사할 수 있을까?

f(x,y)=[f1(x,y)f2(x,y)]

각각을 테일러 시리즈로 전개하자. 1차항 까지.

f1(xi+1,yi+1)=f1(xi,yi)+f1x(xi,yi)(Δxi)+f1y(xi,yi)(Δyi)=0f2(xi+1,yi+1)=f2(xi,yi)+f2x(xi,yi)(Δxi)+f2y(xi,yi)(Δyi)=0

우변이 0인 이유는 위에서 설명한 것과 같은 의미 이다. 우리는 0이 되는 x, y를 찾고 싶은 것이기에 근사한 식에서 함수값이 0이 될 때, x*(i+1), y*(i+1) 이 필요하다. 편미분 후 x_i, y_i를 넣는 것을 생략해서 표현하면,

[f1xf1yf2xf2y][ΔxiΔyi]=[f1(xi,yi)f2(xi,yi)]

여기서,

J=[f1xf1yf2xf2y]

J를 자코비안 행렬 이라 한다.

Δh=[ΔxiΔyi]=[f1xf1yf2xf2y]1[f1(xi,yi)f2(xi,yi)] xi+1=xi+Δxiyi+1=yi+Δyi

이므로 업데이트가 가능하다. 역시나 초기값 설정이 필요하다!

Position Analysis

이전 글에서 우리는 제약식들이 모인 벡터함수 C를 정의했다. 우리는 결국 벡터함수 C = 0 이되는 해, 즉 q 벡터를 찾는 것이 목적이다. 따라서 우리는 이 벡터 함수 C를 테일러 시리즈로 근사한 뒤 Newton-Rahpson method 를 사용해서 해를 구하자! 그러기 위해서는 벡터함수 C를 근사화 해야 한다. 테일러 시리즈를 적용하면,

C(qi+1,t)=C(qi,t)+CqiΔqi=0 Cqi=Cqi=[C1q1C1qn Cmq1Cmqn]

C 행렬은 자코비안 행렬이다. 따라서,

Δqi=[Cqi]1C(qi,t) qi+1=qi+Δqi

로 q벡터를 구할 수 있다. 이를 반복하다가 특정 조건일 때, 우리는 반복을 멈추고 return 하면되는데,

|Δqi|<ϵ1OR|C(qi,t)|<ϵ2

두 식의 의미는, 하나는 다가가는 step size이고, 두번째는 함수값의 size 차이이다.

스크린샷 2019-05-07 오후 2 24 47

해답을 찾아가는 과정에는 다음과 같이 두가지의 기준을 세울 수 있으므로, 두 기준에 대해서 iteration을 멈춘다.

Notice

우리는 t가 변수가 아닌 것에 주목해야 한다. 우리는 해를 수치적으로 구할 것이기 때문이다. t가 0일 때, q벡터의 초기값을 임의로 잡고, Newton 메서드, q 구함. t가 0.01 일 때, q벡터의 초기값을 임의로 잡고, newton 메서드 , q 구함. 따라서 t는 상수로 생각하고 우리는 문제를 푼다.

Velocity Analysis

같은 방법으로 제약식이 주어졌을 때, 우리가 궁금한 것은 q_dot 벡터이다.

C(q,t)=0

이므로,

dC(q,t)dt=dCdqq+C=Cqq+Ct=0 Ct=[dC1dtdC2dtdCncdt]nc=

Ct 벡터는 t에 대해 미분한 벡터이므로, Driving constraint 식 이외 항은 0이다. 따라서 결론적으로,

Cqq=Ctq=[Cq]1Ct

이다.

Acceleration Analysis

제약식을 두번 미분해서, q_twodot 을 구하면 된다.

d2C(q,t)dt2=ddt[dCdqq+C]=ddt[Cqq+Ct]=0

결과적으로,

Cqq=Qdq=[Cq]1QdQd=(Cqq)qq2CqtqCtt