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

비선형성(Non-Linearities)

비선형성(Non-Linearities)

다음 예제는 함수와 관련된 비선형 방정식 시스템을 풀 때 발생하는 문제를 해결하는 방법을 보여줍니다.

다음과 같은 간단한 수학적 관계를 포함하는 가벼운 모델부터 시작하겠습니다.

y = 2 t^2 + 3 t + 1

여기서 t 는 시간입니다. 이 모델은 모델리카에서 다음과 같이 구현할 수 있습니다.

model ExplicitEvaluation
  "Model that evaluates the quadratic function explicitly"
  Real y;
equation
  y = Quadratic(2.0, 3.0, 1.0, time);
end ExplicitEvaluation;

곧 논의할 Quadratic 함수는 2차 다항식을 해석 하며,

이 모델을 시뮬레이트하면 y 에 대한 다음과 같은 해가 제공합니다.

/static/_images/NLEE.svg

지금까지는 이 모든 것이 꽤 합리적으로 보였고, 이전 다항식 해석(Polynomial Evaluation) 에 대해 논의한 바에 따르면 Quadratic 의 구현은 그리 놀라운 일이 아닐 것입니다.그러나 문제를 조금 더 복잡하게 만들어서 다음 모델을 살펴 보겠습니다.

model ImplicitEvaluation
  "Model that requires the inverse of the quadratic function"
  parameter Real y_guess=2;
  Real y(start=y_guess);
equation
  time+1 = Quadratic(2.0, 3.0, 1.0, y);
end ImplicitEvaluation;

이 모델은 다음 방정식을 푸는 것과 같습니다.

t+5 = 2 y^2 + 3 y + 1

여기에서 중요한 차이점은, 왼쪽항에 표현된 방정식을 만족하는 y 값을 계산해야 한다는 것입니다. 즉, 이전 예제에서 했던 것처럼 2차 다항식을 해석하는 대신 이제 2차 방정식을 풀어야 합니다.

비선형 방정식 시스템을 해결해야 하는 모델은 그 자체로는 놀라운 것이 아닙니다. 모델리카 컴파일러는 (이러한 방법은 일반적으로 수렴하기 위해 합리적인 초기 추측에 의존하지만) 확실히 비선형 방정식 시스템을 인식하고 해결할 수 있는 능력 이상을 가지고 있습니다.

그러나 이 경우 모델리카 컴파일러는 실제로 비선형 시스템을 풀 필요가 없습니다. Quadratic 함수가 어떻게 구현되는지 아래를 통해 살펴보면서 이해할 수 있습니다.

function Quadratic "A quadratic function"
  input Real a "2nd order coefficient";
  input Real b "1st order coefficient";
  input Real c "constant term";
  input Real x "independent variable";
  output Real y "dependent variable";
algorithm
  y := a*x*x + b*x + c;
  annotation(inverse(x = InverseQuadratic(a,b,c,y)));
end Quadratic;

특히 inverse 주석을 지정하는 행에 유의해서 보겠습니다. 이 함수 정의를 통해 모델리카 컴파일러에게 Quadratic 함수를 해석하는 방법을 알려줄 뿐만 아니라,``inverse`` 주석을 통해 InverseQuadratic 함수를 이용하여 yx 를 계산하여 사용할 수 있음을 나타냅니다.

InverseQuadratic 함수는 다음과 같이 정의합니다.

function InverseQuadratic
  "An inverse of the quadratic function returning the positive root"
  input Real a;
  input Real b;
  input Real c;
  input Real y;
  output Real x;
algorithm
  x := sqrt(b*b - 4*a*(c - y))/(2*a);
end InverseQuadratic;

Note

InverseQuadratic 함수는 2차 방정식에서 양의 근만 계산합니다. 이것은 좋은 방법일 수도 있고 나쁜 방법일 수도 있습니다. 하나의 경로만 계산하면 2차 관계를 역전시킬 때 여러 해를 갖는 문제를 피할 수 있지만, 음의 경로가 원하는 경로인 경우 문제가 될 수 있습니다.

ImplicitEvaluation 모델의 경우 모델리카 컴파일러는 이 역함수를 위에서 언급한 방정식으로 대체할 수 있습니다. 처음으로 돌아가서 설명하면, 계수 인수를 무시하고 다음 방정식으로 풀 수 있습니다.

t+5 = f(y)

y 에 대해서 암시적 방정식으로 풀어야 했는데, 이제 다음과 같이 명시적 방정식을 풀 수 있습니다.

y = f^{-1}(t+5)

InverseQuadratic 함수를 역함수로 사용하여 푸는것 입니다.

ImplicitEvaluation 모델을 시뮬레이트하면 y 에 대해 다음과 같은 해를 얻습니다.

/static/_images/NLIE.svg

이 그림을 보면, 일반적인 ImplicitEvaluation 모델 에서 발생하는 비선형 시스템을 풀 필요가 없이 올바른 결과를 얻었음을 알 수 있습니다.