Found an issue with the book? Report it on Github.
다음 예제는 함수와 관련된 비선형 방정식 시스템을 풀 때 발생하는 문제를 해결하는 방법을 보여줍니다.
다음과 같은 간단한 수학적 관계를 포함하는 가벼운 모델부터 시작하겠습니다.
여기서 는 시간입니다. 이 모델은 모델리카에서 다음과 같이 구현할 수 있습니다.
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
에 대한 다음과 같은 해가 제공합니다.
지금까지는 이 모든 것이 꽤 합리적으로 보였고, 이전 다항식 해석(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;
이 모델은 다음 방정식을 푸는 것과 같습니다.
여기에서 중요한 차이점은, 왼쪽항에 표현된 방정식을 만족하는 값을 계산해야 한다는 것입니다. 즉, 이전 예제에서 했던 것처럼 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
함수를 이용하여 y
로 x
를 계산하여 사용할 수 있음을 나타냅니다.
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
모델의 경우 모델리카 컴파일러는 이 역함수를 위에서 언급한 방정식으로 대체할 수 있습니다. 처음으로 돌아가서 설명하면, 계수 인수를 무시하고 다음 방정식으로 풀 수 있습니다.
에 대해서 암시적 방정식으로 풀어야 했는데, 이제 다음과 같이 명시적 방정식을 풀 수 있습니다.
InverseQuadratic
함수를 역함수로 사용하여 푸는것 입니다.
ImplicitEvaluation
모델을 시뮬레이트하면 y
에 대해 다음과 같은 해를 얻습니다.
이 그림을 보면, 일반적인 ImplicitEvaluation
모델 에서 발생하는 비선형 시스템을 풀 필요가 없이 올바른 결과를 얻었음을 알 수 있습니다.