왜 ODE의 수치 해가 불안정한 평형에서 멀어 지나요?


15

이중 진자 같은 시스템의 동작을 시뮬레이션하고 싶습니다. 이 시스템은 작동하지 않고 중력의 영향을받는 이중 진자처럼 동작하는 2 자유도 로봇 조작기입니다. 이중 진자와의 유일한 주요 차이점은 질량 중심에서 질량 및 관성 특성을 가진 두 개의 강체로 구성된다는 것입니다.

기본적으로 ode45Matlab에서 다음 유형의 ODE 시스템을 해결하도록 프로그래밍했습니다 .

[10000M110M1200100M120M22][x˙1x˙2x˙3x˙4]=[x2V1G1x4V2G2]

여기서 x1 은 수평에 대한 제 1 바디의 각도이고, x2 는 제 1 바디의 각속도이며; x3 은 제 1 바디에 대한 제 2 바디의 각도이고, x4 는 제 2 바디의 각속도이다. 모든 계수는 내가 만든 rhsfMass함수 에서 다음 코드에 지정되어 있습니다.

clear all
opts= odeset('Mass',@fMass,'MStateDependence','strong','MassSingular','no','OutputFcn',@odeplot);
sol = ode45(@(t,x) rhs(t,x),[0 5],[pi/2 0 0 0],opts);

function F=rhs(t,x)
    m=[1 1];
    l=0.5;
    a=[0.25 0.25];
    g=9.81;
    c1=cos(x(1));
    s2=sin(x(3));
    c12=cos(x(1)+x(3));
    n1=m(2)*a(2)*l;
    V1=-n1*s2*x(4)^2-2*n1*s2*x(2)*x(4);
    V2=n1*s2*x(2)^2;
    G1=m(1)*a(1)*g*c1+m(2)*g*(l*c1+a(2)*c12);
    G2=m(2)*g*a(2)*c12;

    F(1)=x(2);
    F(2)=-V1-G1;
    F(3)=x(4);
    F(4)=-V2-G2;
    F=F';     
end

function M=fMass(t,x)
    m=[1 1];
    l=0.5;
    Izz=[0.11 0.11];
    a=[0.25 0.25];
    c2=cos(x(3));
    n1=m(2)*a(2)*l;
    M11=m(1)*a(1)^2+Izz(1)+m(2)*(a(2)^2+l^2)+2*n1*c2+Izz(2);
    M12=m(2)*a(2)^2+n1*c2+Izz(2);
    M22=m(2)*a(2)^2+Izz(2);
    M=[1 0 0 0;0 M11 0 M12;0 0 1 0;0 M12 0 M22];
end

시스템이 완전히 수직 위치에서 시작되도록 x1 의 초기 조건 (수평에 대한 첫 번째 바디의 각도)을 어떻게 설정했는지 주목 하십시오. 이런 식으로 중력 만 작용하기 때문에 시스템이 그 위치에서 전혀 움직이지 않아야한다는 것이 명백한 결과입니다.

참고 : 아래의 모든 그래픽 에서 시간과 관련 하여 솔루션 x1x3 을 플로팅했습니다 .

ODE45

를 사용하여 6 초 동안 시뮬레이션을 실행하면 ode45전혀 문제가없는 예상 솔루션을 얻을 수 있으며 시스템은 그대로 있고 움직이지 않습니다.

여기에 이미지 설명을 입력하십시오

그러나 10 초 동안 시뮬레이션을 실행하면 시스템이 부적절하게 움직이기 시작합니다.

여기에 이미지 설명을 입력하십시오

ODE23

그런 다음 ode23문제가 지속되는지 확인하기 위해 시뮬레이션을 실행했습니다 . 나는 같은 행동으로 끝나고, 이번에는 1 초 후에 발산이 시작됩니다.

여기에 이미지 설명을 입력하십시오

ODE15

그런 다음 시뮬레이션을 실행하여 ode15s문제가 지속되는지 확인하고 100 초 동안에도 시스템이 안정적으로 보입니다.

여기에 이미지 설명을 입력하십시오

다시 한 번, ode15s첫 번째 순서이며 몇 가지 통합 단계 만 있습니다. 그래서 내가 가진 또 다른 시뮬레이션을 실행 ode15s십초 동안 만 MaxStep의 크기 0.01 정밀도를 높이기 위해, 불행하게도, 모두 같은 결과이 리드 ode45하고 ode23.

여기에 이미지 설명을 입력하십시오

일반적으로 이러한 시뮬레이션의 명백한 결과는 시스템이 혼란스럽지 않기 때문에 시스템이 초기 위치를 유지한다는 것입니다. 왜이 발산이 발생합니까? 이러한 유형의 시스템이 본질적으로 혼란 스럽다는 사실과 관련이 있습니까? 이것이 odeMatlab의 함수에 대한 정상적인 동작 입니까?


방정식 외에도 회로도는 질문을 이해하는 데 많은 도움이 될 것이라고 생각합니다.
nicoguaro

적절하다고 생각되면 답변 중 하나를 수락 할 수 있습니다 (녹색 버튼이 있음).
Ertxiem-복원 Monica Monica

당신은 말을하지 않습니다,하지만 당신은 음모를 꾸미고 것 같다 x1x3. (범례 또는 설명없이 그래프에 대한 삽입 건조 주석.) (절대 값)의 대수 플롯 시도 x2x4.
Eric Towers

답변:


15

Brian과 Ertxiem이 이미 두 가지 주요한 점을 지적했다고 생각합니다. 초기 값은 불안정한 평형이며 수치 계산이 실제로 정확하지 않다는 사실은 불안정성을 유발하는 작은 섭동을 제공합니다.

이것이 어떻게 발생하는지 좀 더 자세히 설명하려면 일반적인 초기 값 문제의 형태로 문제를 고려하십시오.

y˙(t)=M1f(t,y(t))
y(t)=(x1(t),x2(t),x3(t),x4(t))

f(t,y(t))=[x2V1G1x4V2G2]

f(0,y0)=0y˙(0)=0f~

코드에서 컴퓨팅을 통해이를 테스트 할 수 있습니다

norm(rhs(0,[pi/2 0 0 0]))

6.191e-16을 제공하므로 거의 0이 아닙니다. 이것이 시스템의 역학에 어떤 영향을 미칩니 까?

fy0y~0

또한 매우 짧은 시간에 시스템에 대한 솔루션은 선형화 된 시스템의 솔루션처럼 보입니다.

y˙(t)=f(0,y0)+f(0,y0)(y(t)y0)=f(0,y0)(y(t)y0)

ffrhsy0(): =와이()와이0

˙()=에프'(0,와이0)().

나는 야곱을 손으로 계산할 필요가 없었으므로 자동 미분 을 사용 하여 근사치를 얻었습니다.

제이: =에프'(0,와이0)=[01009.8102.4525000012.452502.45250]

그래서 당신의 방정식은

˙()=제이(),(0)=와이~0와이0

이제 우리는 마지막 단계가 필요합니다. Jacobian의 고유 값 분해를 계산할 수 있습니다.

제이=1

제이e(t):=Q1d(t)

e˙(t)=De(t),e(0)=Q1d0.

D

e˙i(t)=λiei(t),ei(0)=ith component of Q1d0

i=1,2,3,4λ1=3.2485

e1(t)=e1(0)e3.2485t.

d(0)=0e(0)=Q1d(0)=0e1(0)=0e1(0)


16

π/2π/2


4
과학적 표기법으로 인쇄 된 값을보고 상태 변수를주의 깊게 모니터링하면 초기 속도가 매우 느리게 평형을 벗어나는 것을 볼 수 있습니다.
Brian Borchers

이것은 의미가 있습니다. 실제로 하향 수직 위치 (안정적인 평형 점)에서 시스템을 시작할 때 시스템은 적어도 1000 초의 시뮬레이션을 위해 전혀 움직이지 않습니다. .
jrojasqu

6
x1sin(0)cos(0)sin(pi/2)cos(pi/2)rhs(t,[0,0,0 0] == [0,0,0,0]

π/2

1
θ=0 1016

4

함수에서 계산 된 힘의 성분을 살펴보십시오.

π

1016

a=1.0a=a+1016


4

초기 가정은 초기 위치가 운동 에너지가 0 인 안정된 평형 (즉, 최소 에너지)에 있고 시스템이 평형에서 멀어지기 시작했다는 것이 었습니다.
물리적으로 일어날 수 없기 때문에 (고전 역학을 고려한다면) 두 가지 생각이 듭니다.

  1. π/2π/2

  2. 두 번째는 아마도 운동 방정식에 문제가있을 수 있습니다 (아마도 오타일까요?). 방정식을 명시 적으로 작성할 수 있습니까? 아마도 각속도의 영점을 가정하여 이상한 것이 있는지를 가정하면서 각 진자의 초기 위치의 함수로 각가속도를 플로팅 할 수 있습니다.


1
π

2
그건 그렇고, 재미를 위해 시스템을 불안정한 수직 위치에 유지하려면 좌표 원점을 0을 위로 향하게 변경하십시오.
Ertxiem-복원 Monica Monica

@Ertxiem 또 다른 옵션은 핀에 작은 마찰을 유발하여 숫자 오류를 먹는 것입니다.
svavil

sin(π)

육체적으로는 일어날 수 없기 때문에 – 우리가 불안정한 균형에 있다는 통찰력을 감안할 때, 나는 이것에 다소 도전합니다. 물리적 시스템 (마찰이 너무 많음)은 불안정한 평형 상태를 유지하지 않습니다. 더 일반적으로, 실제 시스템을 시뮬레이션하는 경우 실수로 불안정한 평형 상태에 빠지는 것을 피하고 싶을 것입니다. 그러나 이것이 버그가 아닌 기능입니다. (면역의 감염되지 않은 상태, 유지 될 수있는 불안정한 평형과 같은 일부 예외적 인 경우가 있습니다.)
Wrzlprmft

0

이중 진자에 대한 자세한 내용을 검색해야합니다. "진정한 시스템"이라고합니다. 약간 다른 초기 조건에서 시작하여 간단한 규칙에 따라 동작하지만 솔루션은 매우 빠르게 분기됩니다. 이런 종류의 시스템에 대한 수치 시뮬레이션은 쉽지 않습니다. 상기 봐 다음 비디오 문제에 더 많은 통찰력을 얻을 수 있습니다.

단순 또는 이중 진자의 경우 시스템의 총 에너지에 대한 공식을 작성할 수 있습니다. 마찰력이 무시된다고 가정하면,이 전체 에너지는 분석 시스템에 의해 보존됩니다. 수치 적으로 이것은 완전히 다른 문제입니다.

이중 진자를 시도하기 전에 간단한 진자를 시도하십시오. 작은 순서의 Runge-Kutta 방법의 경우 시스템의 에너지가 일정하게 유지되는 대신 수치 시뮬레이션에서 증가합니다 (이는 시뮬레이션에서 발생하는 것입니다 : 움직임이 전혀 없음). 이를 방지하기 위해 고차 RK 방법을 사용할 수 있습니다 (ode45는 차수 4, 차수 8은 RK가 더 효과적 임). 수치 시뮬레이션이 에너지를 보존하도록 설계된 "증상 방법"이라고하는 다른 방법이 있습니다. 일반적으로 초기화에 비해 에너지가 크게 증가하자마자 시뮬레이션을 중지해야합니다.

이중 진자에 가기 전에 간단한 진자를 이해하십시오.


2
그러나 이것은 시스템이 혼란스러워하는 문제는 아닙니다. 예를 들어 단일 진자가 "그 머리에있는"것과 같이 혼돈되지 않은 시스템에서도 불안정한 평형을 가질 수 있으며, 질문에 설명 된 것과 동일한 동작을 보일 것입니다.
Daniel

1
RKM의 에너지가 작은 차수로 증가한다는 것도 사실이 아닙니다.
Daniel

@BeniBogosel 당신은 분명히 예를 들어, 에너지가 보존되지 않기 때문에 내주의를 끌었던 상징적 인 방법을 언급합니다. 그러나 여기서 구현할 수있는 특정 증상 방법을 나타낼 수 있습니까?
jrojasqu 2016 년

@jrojasqu 왜 시스템에 에너지가 보존되지 않는다고 말합니까?
Ertxiem-Monica

@Ertxiem에서 제공 한 출력으로 시스템의 총 기계 에너지 (Kinetic + Potential energies)를 계산하면 ode450으로 시작하여 시간이 지남에 따라 증가하는 값을 얻습니다. 이 값은 첫 번째 초에 매우 작지만 여전히 0에서 멀어집니다. 위의 답변에서 해결 된 문제 때문이라고 생각합니다 (근사치π등).
jrojasqu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.