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

변수(Variables)

변수(Variables)

이전 섹션에서 본 것처럼 모델 정의에는 일반적으로 변수 선언이 포함됩니다. 변수 선언의 기본 구문은 단순히 변수의 "자료형"(내장 자료형(Built-In Types) 섹션에서 곧 설명할 예정임) 뒤에 변수 이름을 선언 하는 것입니다. 예를 들면 아래와 같이 정의 합니다.

Real x;

동일한 자료형을 공유하는 변수는 다음 구문을 사용하여 함께 그룹화할 수 있습니다.

Real x, y;

선언 뒤에 설명이 올 수도 있습니다. 예를 들면 다음과 같습니다.

Real alpha "angular acceleration";

가변성(Variability)

파라미터(매개변수,Parameters)

기본적으로 모델 내부에 선언된 변수는 연속 변수(해가 일반적으로 매끄럽지만 불연속성을 포함할 수 있는 변수)로 간주됩니다. 그러나 물리적인 이해(Getting Physical) 섹션에서 처음 보았듯이 변수 선언 앞에 parameter 한정자를 추가하고 변수가 선험적으로 알려져 있음을 나타낼 수도 있습니다. 시간에 대해 일정한 모델에 대한 "입력 데이터"로 파라미터를 생각할 수 있습니다.

상수(Constants)

parameter 한정자와 밀접한 관련이 있는 것은 constant 한정자입니다. 변수 선언 앞에 배치될 때 constant 한정자는 변수의 값이 선험적으로 알려져 있고 시간에 대해 일정함을 의미합니다. 이 둘의 차이점은 parameter 값은 한 시뮬레이션에서 다음 시뮬레이션으로 변경할 수 있는 반면 constant 값은 일단 모델이 컴파일되면 변경할 수 없다는 사실에 있습니다. 모델 개발자가 constant 를 사용하면 최종 사용자에게 constant 를 변경할 수 있는 옵션이 제공되지 않습니다. constant 는 math:pi 또는 대부분의 엔지니어링 시뮬레이션에서 상수로 가정할 수 있는 지구의 중력 가속도와 같은 물리량을 나타내는 데 자주 사용합니다.

이산 변수(Discrete Variables)

변수 선언 앞에 놓일 수 있는 또 다른 한정자는 discrete 한정자입니다.아직 discrete 한정자가 관련된 어떤 예도 보지 못했었습니다. 그러나 마지막으로 남은 가변성 한정자(variavility qualifier)이므로 이제 완전성을 위해 포함됩니다.

내장 자료형(Built-In Types)

지금까지의 많은 예제는 변수를 선언할 때 Real 자료형을 참조했습니다. 이름에서 알 수 있듯이 Real 은 실제 값 변수를 나타내는 데 사용됩니다(일반적으로 모델리카 컴파일러에 의해 부동 소수점 표현으로 변환됨). 그러나 Real 은 모델리카에 내장된 4가지 자료형 중 하나일 뿐입니다.

또 다른 내장 자료형은 Integer 자료형입니다. 이 자료형은 정수 값을 나타내는 데 사용합니다. Integer 변수는 배열의 크기를 나타내는 것을 포함하여 많은 용도로 사용합니다.(이 사용 사례는 곧 나올 벡터 및 배열 섹션에서 논의될 것임)

나머지 기본 제공 자료형은 Boolean (true 또는 false 일 수 있는 값을 나타내는 데 사용됨) 및 String (문자열을 나타내는 데 사용됨) 입니다.

각 내장 자료형은 변수가 가질 수 있는 가능한 값을 제한합니다.

파생 자료형(Derived Types)

물리적 자료형(Physical Types) 의 이전 예제에서 보았듯이 내장 자료형을 "특화"할 수 있습니다. 이 기능은 주로 unit 과 같은 속성과 관련된 값을 수정하는 데 사용합니다. 파생 자료형을 만들기 위한 일반 구문은 다음과 같습니다.

type NewTypeName = BaseTypeName(/* attributes to be modified */);

BaseTypeName-기본이 되는 자료형 은 내장 자료형(예:, Real ) 중 하나를 주로 사용합니다.그러나, 다른 파생 자료형을 적용할 수 있습니다. 이러한 것이 가능하다는 의미는 여러 수준으로 전문화될 수 있음을 뜻합니다.아래에 예를 들어 보겠습니다.

type Temperature = Real(unit="K"); // Could be a temperature difference
type AbsoluteTemperature = Temperature(min=0); // Must be positive

열거형(Enumerations)

enumeration 자료형은 Integer 자료형과 매우 유사합니다. enumeration 은 일반적으로 제한된 특정 값 집합만 가질 수 있는 자료형을 정의하는 데 사용합니다. 실제로 열거형은 언어에서 꼭 필요한 것은 아닙니다. 해당 값은 항상 정수로 나타낼 수 있습니다. 그러나 enumeration 자료형은 Integer 보다 안전하고 읽기 쉽습니다.

두 가지 기본 제공 열거형이 있습니다. 첫 번째는 AssertionLevel 이며 다음과 같이 정의합니다.

type AssertionLevel = enumeration(warning, error);

이러한 값의 중요성은 다음 섹션인 경고(assert) 에서 논의될 것입니다.

다른 기본 제공 열거형은 StateSelect 이며 다음과 같이 정의합니다.

type StateSelect = enumeration(never, avoid, default, prefer, always);

속성(Attributes)

지금까지 이 장에서 속성(예를 들어 , unit )에 대해 언급했지만 자세히 다루지는 않았습니다.예를 들어 어떤 속성이 주어진 변수에 존재할까요? 이는 변수의 자료형(기본 제공 및 파생 자료형)에 따라 다릅니다. 다음 내용은 해당 자료형(즉, 해당 속성에 부여할 수 있는 값의 자료형)을 나타내는 모든 가능한 속성을 보이고,그와 연관될 수 있는 자료형 및 간략한 설명을 보여줍니다.

Real 속성 (Attributes of Real)

quantity

변수가 나타내는 내용에 대한 텍스트 설명

Default: ""

Type: String

start

start 속성은 많은 용도로 사용합니다. 주요 목적은 (초기화(Initialization) 섹션에서 광범위하게 논의된 바와 같이) 상태 변수에 대해 "대체 가능한(fallback)" 초기 조건을 제공하는 것입니다(자세한 내용은 fixed 속성 참조)

start 속성은 변수가 상호 작용하는 형태의 변수로 선택된 경우 초기 추측값으로 사용될 수도 있습니다.

마지막으로 parameter 에 명시적인 값이 지정되어 있지 않으면 start 속성 값이 parameter 의 기본값으로 사용합니다.

Default: 0.0

Type: Real

fixed

fixed 속성은 start 속성이 초기 조건으로 사용될 때 start 속성이 사용하는 방식을 변경합니다. 일반적으로 start 속성은 "fallback - 대체 가느한" 초기 조건으로 간주되며 initial equation 섹션에 명시적으로 지정된 초기 조건이 충분하지 않은 경우에만 사용합니다.그러나, fixed 속성이 true 로 설정되면 start 속성은 명시적인 initial equation 으로 사용된 것처럼 처리됩니다.(즉, 더 이상 fallback - 대체가능한 변수로 사용되지 않으며, 대신에 엄격히 지켜야할 초기 조건으로 처리됨).

또 다른 모호한 fixed 속성의 사용은 "computed parameters - 계산된 파라미터"에 대한 것입니다. parameter 를 명시적으로 초기화할 수 없는 드문 경우에 초기 방정식 섹션에서 파라미터에 대한 일반 방정식을 제공할 수 있습니다. 단, 이렇게 parameter 를 초기화하는 경우에는 fixed 파라미터 변수의 속성을 false 로 설정해야 합니다.

Default: false (except for parameter variables, where it is true by default)

Type: Boolean

min

min 속성은 변수에 허용되는 최소값을 지정하는 데 사용합니다. 이 속성은 잠재적으로 유효하지 않은 입력 데이터 또는 해에 대해 사용자 또는 개발자에게 알리기 위해 다양한 방법으로 편집자와 컴파일러에서 사용할 수 있습니다.

Default: -DBL_MAX where DBL_MAX is the largest floating point value that can be represented for the given platform.

Type: Real

max

max 속성은 변수에 허용되는 최대값을 지정하는 데 사용합니다. 이 속성은 잠재적으로 유효하지 않은 입력 데이터 또는 해에 대해 사용자 또는 개발자에게 알리기 위해 다양한 방법으로 편집자와 컴파일러에서 사용할 수 있습니다.

Default: DBL_MAX where DBL_MAX is the largest floating point value that can be represented for the given platform.

Type: Real

unit

이 장(chapter)에서 광범위하게 논의된 것처럼 변수는 관련된 물리적 단위를 가질 수 있습니다. 이러한 단위를 표현하는 방법에 대한 규칙이 있지만 최종 결과는 unit 속성을 사용하여 방정식이 물리적으로 일관성이 있는지 확인하기 위해 모델을 검사할 수 있다는 것입니다. "1" 값은 값에 물리적 단위가 없음을 나타냅니다. 반면에 "" 값(값이 지정되지 않은 경우 기본값)은 물리적 단위가 지정되지 않았음을 나타냅니다. "1""" 의 차이점은 전자는 양이 무차원(단위가 없음)이라는 명시적인 진술이고 후자는 양이 특정되지 않았지만, 물리적 단위를 가질 가능성이 있음을 나타냅니다.

Default: "" (i.e., no physical units specified)

Type: String

displayUnit

unit 속성은 변수 값과 연관되어야 하는 물리적 단위를 설명하는 반면 displayUnit 은 변수 값을 표시할 때 어떤 단위를 사용해야 하는지에 대한 기본 설정을 나타냅니다. 예를 들어, 압력의 SI 단위는 파스칼(Pascals) 입니다. 그러나 표준 기압은 101,325 Pascals 입니다. 압력을 입력 하거나 표시하는 경우 혹은 선도(plot)로 표현 할 때 바(bars) 를 사용하는 것이 더 편리할 수 있습니다.

displayUnit 속성은 변수의 값이나 모델을 시뮬레이트하는 데 사용하는 방정식에 영향을 미치지 않습니다. 표시에 더 편리한 단위로 변환하여 해당 값의 표현(rendering) 에만 영향을 미칩니다.

Default: ""

Type: String

nominal

nominal 속성은 변수의 명목 값을 지정하는 데 사용합니다.이 공칭 값은 일반적으로 반올림 또는 잘림 오류를 방지하는 데 사용하는 다양한 자료형의 스케일링을 수행하기 위해 수치 계산에 사용합니다.

Default:

Type: Real

stateSelect

stateSelect 속성은 주어진 변수를 상태로 선택해야 하는지 여부에 대한 모델리카 컴파일러에 대한 힌트로 사용됩니다(선택해야 하는 경우). 이전에 열거형(Enumerations) 섹션에서 논의한 것처럼 이 속성에 가능한 값은 never , avoid , default , preferalways 입니다.

Default: default

Type: StateSelect (enumeration, see 열거형(Enumerations))

Integer 의 속성 (Attributes of Integer )

quantity

변수가 나타내는 내용에 대한 텍스트 설명

Default: ""

Type: String

start

Integer 변수가 상태 변수 또는 상호 작용하는 변수로 선택될 수 있다는 점에 주목할 필요가 있습니다. 이러한 상황에서 컴파일러는 start 속성을 Real 변수와 동일하게 사용할 수 있습니다(이전 설명 참조 Real 속성 (Attributes of Real) ).

parameter 의 경우 start 속성은 (일반적으로) parameter 의 기본값으로 사용합니다.

Default: 0.0

Type: Integer

fixed

이전 설명 참조 Real 속성 (Attributes of Real)

Default: false (except for parameter variables, where it is true by default)

Type: Boolean

min

min 속성은 변수에 허용되는 최소값을 지정하는 데 사용합니다. 이 속성은 잠재적으로 유효하지 않은 입력 데이터 또는 해에 대해 사용자 또는 개발자에게 알리기 위해 다양한 방법으로 편집자와 컴파일러에서 사용할 수 있습니다.

Default: - \infty

Type: Integer

max

max 속성은 변수에 허용되는 최대값을 지정하는 데 사용합니다. 이 속성은 잠재적으로 유효하지 않은 입력 데이터 또는 해에 대해 사용자 또는 개발자에게 알리기 위해 다양한 방법으로 편집자와 컴파일러에서 사용할 수 있습니다.

Default: \infty

Type: Integer

Boolean 의 속성 (Attributes of Boolean )

quantity

변수가 나타내는 내용에 대한 텍스트 설명

Default: ""

Type: String

start

Boolean 변수가 상태 변수 또는 상호 작용하는 변수로 선택될 수 있다는 점에 주목할 필요가 있습니다. 이러한 상황에서 컴파일러는 start 속성을 Real 변수와 동일하게 사용할 수 있습니다(이전 설명 참조 Real 속성 (Attributes of Real) ).

parameter 의 경우 start 속성은 (일반적으로) parameter 의 기본값으로 사용합니다.

Default: 0.0

Type: Boolean

fixed

이전 설명 참조 Real 속성 (Attributes of Real)

Default: false (except for parameter variables, where it is true by default)

Type: Boolean

Attributes of String

quantity

변수가 나타내는 내용에 대한 텍스트 설명

Default: ""

Type: String

start

기술적으로 String 은 상태 변수(또는 상호 관계가 있는 변수)로 선택될 수 있지만 실제로는 이런 일이 발생하지 않습니다.따라서 String 변수의 경우 start 속성의 유일한 실용적인 용도는 명시적인 파라미터가 없는 경우 parameter``( ``String 자료형을 가짐)의 값을 정의하는 것입니다. paramter에 대한 값을 설정합니다.

Default: ""

Type: String

파생 자료형(Derived Types) 는 궁극적으로 파생된 내장 자료형의 속성을 유지한다는 점은 주목할 가치가 있습니다. 또한, 예를 들어 Real 변수에 대한 min 속성의 자료형이 Real 자료형으로 나열되더라도 속성 자체가 속성을 가질 수 없음을 알아야 합니다.즉, start 속성에는 start 속성이 없습니다.

변경(Modifications)

지금까지 두 가지 자료형의 변경을 보았습니다. 첫 번째는 속성 값을 변경할 때입니다. 예를 들어

Real x(start=10);

이 경우 Real 자료형의 x 변수를 생성합니다. 그러나 "있는 그대로" 두지 않고 x 의 값을 변경합니다.특히 x 의 "내부에 접근(reach inside)"하고 start 속성 값을 변경합니다. 이 예제에서는 수정을 위해 x 로 한 단계만 이동합니다. 그러나 다음 예제에서 볼 수 있듯이 임의의 깊이에 대해서 값을 변경 할 수 있습니다.

반복 피하기(Avoiding Repetition) 섹션을 통해 값을 변경하는 다른 상황을 확인할 수 있었습니다.여기서 extends 절과 함께 사용하여 값을 변경하는 사례를 보았습니다.예를 들어 보면 아래와 같습니다.

extends QuiescentModelWithInheritance(gamma=0.3, delta=0.01);

여기서 값의 변경은 QuiescentModelWithInheritance 모델에서 상속된 요소에 적용합니다. 속성 값의 변경과 마찬가지로 수정되는 요소(이 경우 모델) 뒤에는 괄호가 오고 그 괄호 안에 원하는 변경 사항을 지정합니다.

여기서, 변경 사항이 임의로 중첩될 수 있다는 점은 주목할 가치가 있습니다. 예를 들어, QuiescentModelWithInheritance 모델에서 상속된 x 변수에 대한 start 속성을 변경하고 싶다고 가정해 보십시오. 모델리카에서는 다음과 같은 방법으로 값을 변경할 수 있습니다.

extends QuiescentModelWithInheritance(x(start=5));

먼저 QuiescentModelWithInheritance 모델의 "내부에 도달"하여 "상속"된 내용(이 경우 x)을 변경하기 위해 내부에 도달 한 다음에 내부에 있는 xstart 속성 값을 수정합니다.

모델리카의 주요한 관심사 중 하나는 재사용을 지원하고 코드를 "복사하여 붙여넣기"할 필요가 없도록 한다는 것입니다. 값을 변경하는 기능은 재사용을 지원하는 모델리카의 필수 요소 중 하나입니다. 앞으로 이어지는 섹션에서 다른 관련된 것들에 대해 배울 것입니다