Found an issue with the book? Report it on Github.

진자의 하모닉 운동(Harmonic Motion of Pendulums)

진자의 하모닉 운동(Harmonic Motion of Pendulums)

이 섹션에서는 이전에 다루었던 진자와 관련하여 추가된 흥미로운 실험 [Berg] 을 다시 해보겠습니다.서로 다른 고유 진동수를 가진 일련의 진자를 만든 다음, 모두 같은 위치에서 시작하면 진자가 서로 다른 진동수로 진동한다는 것을 알 수 있습니다.그러나 시스템에서 에너지가 사라지게 되면 결국 초기 위치에서 모두 "재결합"합니다.

일반적으로 "재결합" 이벤트가 이루어지는 시간은 시스템의 모든 진자 기간의 최소 공배수입니다.이러한 "재결합" 사이의 특정 기간을 원하는 값으로 설정하기 위해 추의 길이를 선택할 수 있습니다.

진자 모델(Pendulum Model)

이 섹션에서는 공간적으로 분산된 열 전달(Spatially Distributed Heat Transfer) 예제에서와 마찬가지로 구성 요소 배열을 사용하여 하위 시스템 모델을 구축할 것입니다.그러나 진자의 배열을 만들기 전에 먼저 단일 진자의 모델이 있어야 합니다.

within ModelicaByExample.Subsystems.Pendula;
model Pendulum "A single individual pendulum"
  import Modelica.Mechanics.MultiBody.Parts;
  import Modelica.Mechanics.MultiBody.Joints;

  parameter Modelica.SIunits.Position x;
  parameter Modelica.SIunits.Mass m "Mass of mass point";
  parameter Modelica.SIunits.Angle phi "Initial angle";
  parameter Modelica.SIunits.Length L "String length";
  parameter Modelica.SIunits.Diameter d=0.01;

  Parts.Fixed ground(r={0,0,x}, animation=false)
    annotation ...
  Parts.PointMass ball(m=m, sphereDiameter=5*d)
    annotation ...
  Parts.BodyCylinder string(density=0, r={0,L,0}, diameter=d)
    annotation ...
  Joints.Revolute revolute(phi(fixed=true, start=phi),
    cylinderDiameter=d/2, animation=false)
    annotation ...
equation
  connect(string.frame_a, ball.frame_a) annotation ...
  connect(revolute.frame_b, ground.frame_b) annotation ...
  connect(revolute.frame_a, string.frame_b) annotation ...
end Pendulum;

이 특정 모델은 Modelica.Mechanics.MultiBody 라이브러리를 사용하고 있습니다.이 라이브러리에는 메커니즘에서 일반적으로 발견되는 많은 유용한 부품 및 관절 모델이 포함되어 있을 뿐만 아니라, 해당 부품을 그림으로 표현하는 방법에 대한 정보도 포함되어 있습니다.이를 통해 모델리카 시뮬레이션 소프트웨어는 이러한 모델의 시뮬레이션 결과를 시스템의 3D 애니메이션으로 직접 변환할 수 있습니다.

진자의 구성 요소는 다음과 같이 표현할 수 있습니다.

A single pendulum

시스템 모델(System Model)

이제 개별 진자 모델이 있으므로 진자 시스템을 구축할 수 있습니다. 시스템의 전체 주기 주기가 T 초인 n 진자의 시스템을 원하면 진자의 길이를 다음과 같이 계산합니다. :

l_i = g_n\frac{T}{2 \pi (X+(n-i))}

여기서 g_n 은 지구의 중력 상수이고, n 은 진자의 수이며, T 는 시스템의 완전한 한 주기의 주기이며 X T 초 동안 가장 긴 진자의 진동 횟수입니다.

모델리카에서는 다음과 같은 시스템을 구축할 수 있습니다.

within ModelicaByExample.Subsystems.Pendula;
model System "A system of pendula"
  import Modelica.Constants.g_n;
  import Modelica.Constants.pi;

  parameter Integer n=15 "Number of pendula";
  parameter Modelica.SIunits.Position x[n] = linspace(0,(n-1)*0.05,n);
  parameter Modelica.SIunits.Time T = 54;
  parameter Modelica.SIunits.Time X = 30;
  parameter Modelica.SIunits.Length lengths[n] = { g_n*(T/(2*pi*(X+(n-i))))^2 for i in 1:n};
  parameter Modelica.SIunits.Angle phi0 = 0.5;

  Pendulum pendulum[n](x=x, each m=1, each phi=phi0, L=lengths)
    annotation ...
  inner Modelica.Mechanics.MultiBody.World world
    annotation ...
end System;

여기에는 두 가지 관심을 가져야 하는 선언이 있습니다. 첫 번째는 world 컴포넌트의 선언인데, 이는 시스템에 대한 참조 프레임과 시스템에서 사용할 중력 상수와 같은 일부 주요 환경 파라미터를 제공하는 데 필요합니다.만드는 모델의 시스템에는 하나의 world 구성 요소만 있어야 합니다. 또 다른 매우 흥미로운 선언은 pendulum 컴포넌트입니다:

  Pendulum pendulum[n](x=x, each m=1, each phi=phi0, L=lengths)

pendulumn 구성 요소의 배열이기 때문에 x , m, phi 및 이러한 진자와 관련된 L 파라미터에 대한 n 값이 있습니다. 예를 들어 n=3 이면 모델은 x 에 대해 pendulum[1].x , pendulum[2].xpendulum[3].x 의 값을 사용합니다. 그러나, pendulum 선언에서 다른 파라미터에 대해 다른 방식으로 이를 처리합니다.``m`` 의 경우 each m=1 으로 수정하였기 때문에 각 진자에 동일한 값을 부여합니다. 그러나 L (및 x)의 경우 lengths 배열의 값이 파라미터를 초기화하는 데 사용하는 L=lengths 값의 배열을 제공합니다. 이값을 사용하여 앞서 소개한 진자 길이 방정식으로 계산합니다.구성 요소 배열에 수정 사항을 적용하는 방법에 대한 자세한 내용은 이 장의 뒷부분 에서 설명합니다.

이 시스템을 시뮬레이션하면 각 진자의 궤적에 대해 다음과 같은 해를 얻을 수 있습니다.

/static/_images/Harm.svg

이 선도에서 볼 수 있듯이 진자는 서로 다른 주파수에서 진동하지만 위치는 일정한 간격으로 일치합니다. 실제로 54초마다 모두 동시에 초기 위치로 돌아갑니다.

이 현상은 3차원으로 가시화됩니다.

결론(Conclusion)

이 섹션에서는 구성 요소 배열을 사용, 선언 및 수정하는 방법을 살펴보았습니다.이 특별한 경우에 시스템의 진자 수를 지정한 다음, 길이를 선택할 때 관찰되는 독특한 동작을 관찰하기 위해 앞에서 지정한 방정식에 따라 진자의 수를 시뮬레이션할 수 있습니다.

[Berg]

Richard E. Berg, "Pendulum waves: A demonstration of wave motion using pendula" http://dx.doi.org/10.1119/1.16608