피망 슬롯 함수

소개

수학 피망 슬롯는 GAMS 언어, 특히 비선형 모델에서 중요한 역할을 합니다. 다른 프로그래밍 언어와 마찬가지로 GAMS는 여러 내장 또는내장 피망 슬롯. GAMS는 매우 다양한 응용 분야에서 사용되며 이로 인해 새롭고 정교하고 전문화된 기능을 추가해 달라는 요청이 자주 발생합니다. 이러한 요청을 충족하는 것과 대부분의 사용자에게 필요하지 않은 복잡성을 피하는 것 사이에는 균형이 있습니다. GAMS 함수 라이브러리 기능은 사용자가 피망 슬롯 라이브러리의 함수를 GAMS 모델로 가져올 수 있도록 해주기 때문에 이러한 균형을 관리하기 위한 수단을 제공합니다. 그러나 이러한 피망 슬롯 라이브러리는 현재 한 지점에서 함수(1차 및 2차 파생 포함)를 평가하기 위한 기능만 제공할 수 있습니다. 따라서 모델 인스턴스의 대수적 구조를 분석해야 하는 솔버는 피망 슬롯 기능을 사용할 수 없습니다. 여기에는 다음 클래스가 포함됩니다.결정적글로벌 솔버, "글로벌" 열 참조이 테이블, 예를 들어,확률적전역 솔버는 피망 슬롯 기능을 사용할 수 있습니다.

이 장에서는 GAMS 모델의 피망 슬롯 함수 라이브러리에서 함수에 액세스하는 방법을 설명하고 GAMS 배포판에 포함된 피망 슬롯 함수 라이브러리에 대해 설명합니다. 또한 자체 피망 슬롯 함수 라이브러리를 구축하려는 사용자에게 몇 가지 지침을 제공할 것입니다.

피망 슬롯 라이브러리 사용

피망 슬롯 라이브러리는 다음 컴파일러 지시어를 사용하여 모델에 사용할 수 있습니다:

$funcLibIn <내부 라이브러리 이름> <피망 슬롯 라이브러리 이름>

여기내부Lib이름모델 소스 코드 내부의 라이브러리를 참조하는 데 사용되는 핸들입니다.피망 슬롯 라이브러리 이름은 피망 슬롯 함수를 구현하는 공유 라이브러리의 파일 이름입니다. 경로가 지정되지 않으면 GAMS는 디렉토리에서 라이브러리를 찾습니다.피망 슬롯_기능GAMS 표준 위치및 GAMS 시스템 디렉토리에 있습니다. 이러한 표준 위치에 없는 라이브러리에 액세스하려면 피망 슬롯 이름에 라이브러리 위치에 대한 상대 또는 절대 경로가 포함되어야 합니다. 그런 다음 GAMS는 호스트 운영 체제에 특정한 메커니즘을 사용하여 지정된 라이브러리를 검색합니다. 지시문을 처리할 때$funcLibIn, GAMS는 라이브러리를 검증하고, 포함된 피망 슬롯를 사용할 수 있도록 만들고, 포함된 피망 슬롯의 테이블을 목록 파일에 추가합니다.

참고
피망 슬롯 라이브러리 시설은 사용자에게 이름 지정에 대한 완전한 제어권을 제공하므로 라이브러리 간의 잠재적인 이름 충돌을 피할 수 있습니다.

개별 피망 슬롯를 사용하기 전에 다음 방법으로 선언해야 합니다:

피망 슬롯 <InternalFuncName> /<InternalLibName>.<FuncName>/;

여기내부Func이름은 GAMS 코드에 사용될 개별 피망 슬롯의 이름입니다. 사용자는 이 내부 이름을 자유롭게 선택할 수 있으므로 잠재적인 이름 충돌을 피할 수 있습니다.내부Lib이름은(는) 다음에 의해 정의된 피망 슬롯 라이브러리의 이름입니다.$funcLibIn지시문 및FuncName은 피망 슬롯 함수 라이브러리에 있는 개별 함수의 이름입니다. 함수가 이런 방식으로 선언되면 내장 함수처럼 사용될 수 있습니다.

다음의 간단한 예를 생각해 보십시오:

$funcLibIn myLib tricclib

피망 슬롯 myCos /myLib.Cosine/
         mySin /myLib.Sine/
         myPi /myLib.Pi/;

스칼라 d;
d = myCos(myPi/3);
디스플레이 d;

첫 번째 줄에는 피망 슬롯삼각 피망 슬롯 라이브러리 tricclib활성화되고 내부 이름myLib이 지정되었습니다. 그런 다음 피망 슬롯가 선언됩니다. 그것을 관찰하십시오코사인, 사인그리고파이은 삼각피망 슬롯 라이브러리의 피망 슬롯입니다. 라이브러리가 로드되고 피망 슬롯가 선언된 후에는 피망 슬롯를 평소대로 사용할 수 있습니다. 삼각피망 슬롯 라이브러리는 섹션에서 논의됩니다.예: 삼각피망 슬롯 라이브러리아래.

GAMS 배포판에 포함된 라이브러리

이 섹션에서 우리는 GAMS 배포판에 포함된 라이브러리를 제시할 것입니다: the핏팩 라이브러리, 그조각별 다항식 라이브러리, 그확률적 라이브러리그리고LINDO 샘플링 라이브러리. LINDO 샘플링 라이브러리는 LINDO 라이센스 보유자에게만 제공됩니다. 또한 다음 사항에 대한 세부정보를 제공합니다.뮤텍스 라이브러리.

다음 표에서 "내인성 분류"(마지막 열)는 피망 슬롯가 합법적으로 나타날 수 있는 모델을 지정합니다. 가장 제한적인 것부터 가장 낮은 것 순으로 선택 사항은 다음과 같습니다.모든, DNLP, NLP, 없음. 섹션 참조모델 분류29905_29983아무거나외생(상수) 인수에만 허용됩니다.

아래 표의 표기법에 있는 단어: 피망 슬롯 인수의 경우 소문자는 내생 변수가 허용됨을 나타냅니다. 내생 변수에 대한 자세한 내용은 섹션을 참조하세요.방정식 정의의 피망 슬롯. 대문자 피망 슬롯 인수는 상수가 필요함을 나타냅니다. 대괄호 안의 인수는 생략될 수 있습니다. 이러한 경우에 사용되는 기본값은 제공된 피망 슬롯 설명에 지정됩니다.

핏팩 라이브러리

FITPACK by Paul Dierckx[42]는 1차원 및 2차원 스플라인 보간을 위한 Fortran 기반 라이브러리입니다. 이 라이브러리는 GAMS 피망 슬롯 라이브러리 기능과 함께 작동하도록 다시 패키징되었습니다. 모델[FITLIB01]31274_31364

피망 슬롯가 적합할 지지점은 3차원 매개변수에 저장되어야 한다는 점에 유의하세요.핏데이터, aGDX 파일 fit.gdx. 첫 번째 차원은 피망 슬롯 인덱스이고, 두 번째 차원은 지지점의 인덱스이며, 세 번째 차원은 다음 네 가지 값 중 하나를 취합니다."w"(무게),"x"(x-값),"y"(y-값) 또는"z"(z-값).

FITPACK 라이브러리는 다음 지시어로 사용할 수 있습니다:

$funcLibIn <InternalLibName> fitfclib

다음 기능을 제공합니다:

기능설명끝. 분류.
fitFunc(FUNIND,x[,y]) 스플라인 평가DNLP
fitParam(FUNIND,PARAM[,VALUE]) 매개변수 읽기 또는 설정없음

피망 슬롯FitParam은 평가에 사용되는 특정 매개변수를 변경하는 데 사용될 수 있습니다. 다음 값이 정의됩니다.

  • 1: 평활화 계수(S)
  • 2: x 방향의 스플라인 각도(Kx)
  • 3: y 방향의 스플라인 각도(Ky)
  • 4: x 방향(LOx) 방향의 피망 슬롯 하한
  • 5: y(LOy) 방향의 피망 슬롯 하한
  • 6: x 방향의 피망 슬롯 상한(UPx)
  • 7: y 방향(UPy)에서 피망 슬롯의 상한

조각별 다항식 라이브러리

조각 다항식 라이브러리는 조각 다항식 피망 슬롯를 평가하는 데 사용될 수 있습니다. 모델에 예가 나와 있습니다.[PWPLIB01]34465_34578GDX 파일. 다음 코드 조각은 예시로 사용됩니다.

* 두 개의 조각별 다항식 함수 정의
Table pwpdata(*,*,*) '1번째 인덱스: 함수 번호, 2번째 인덱스: 세그먼트 번호, 3번째 인덱스: 도'
                 왼쪽 경계 0 1 2
       1.1 1 2.4 -2.7 0.3
       1.2 4 5.6 -4.3 0.5
       2.1 0 0 -6.3333 0
       2.2 0.3333 1.0370 -12.5554 9.3333
       2.3 0.6667 9.7792 -38.7791 29
;
* 피망 슬롯 라이브러리(pwpcclib)에서 읽을 수 있는 pwp 데이터를 gdx 파일에 씁니다.
$gdxoutpwp.gdx
$언로드 pwpdata
$gdxout

테이블의 각 행에서 이를 관찰하십시오.pwpdata다음 항목이 있습니다:

FuncInd.SegInd leftBound Coef0 Coef1 Coef2

여기FuncInd피망 슬롯 인덱스를 설정하고세그인드설명된 세그먼트(또는 간격)의 인덱스를 정의합니다. 더 나아가,왼쪽바운드세그먼트의 하한을 제공합니다. 상한은 다음 세그먼트의 하한에서 가져오거나 마지막 세그먼트인 경우 무한대로 설정됩니다. 마지막으로,CoefX정의X이 세그먼트에 해당하는 다항식의 2차 계수입니다.

Piecewise Polynomial Library는 다음 지시어로 사용할 수 있습니다:

$funcLibIn <InternalLibName> pwpcclib

다음 기능을 제공합니다:

기능설명끝. 분류.
pwpFunc(FUNIND,x) 조각별 다항식DNLP

확률적 라이브러리

확률적 라이브러리는 특정 연속 및 이산 분포에 대한 무작위 편차, 확률 밀도 피망 슬롯, 누적 밀도 피망 슬롯 및 역 누적 밀도 피망 슬롯를 제공합니다. 이 라이브러리는 다음 지시어로 사용할 수 있습니다.

$funcLibIn <InternalLibName> Stodclib

이 라이브러리에서 사용할 수 있는 연속 분포는 다음과 같습니다:

배포설명
베타(SHAPE_1,SHAPE_2) 베타 배포모양 매개변수 포함모양_1그리고모양_2, 참조수학세계
코시(위치,규모) 코시 분포위치 매개변수 포함위치및 확장 매개변수규모, 참조수학세계
치스퀘어(DF) 카이제곱 분포자유도 있음DF, 참조수학세계
지수(LAMBDA) 지수분포변화율 있음람다, 참조수학세계
f(DF_1,DF_2) F-분포자유도 포함DF_1그리고DF_2, 참조수학세계
감마(모양,크기) 감마 분포모양 매개변수 포함모양및 확장 매개변수규모, 참조수학세계
gumbel(위치,규모) Gumbel 분포위치 매개변수 포함위치및 확장 매개변수규모, 참조수학세계
inv가우스(MEAN,SHAPE) 역 가우스 분포평균과 함께평균및 확장 매개변수모양, 참조수학세계
라플라스(MEAN,SCALE) 라플라스 분포평균적으로평균및 확장 매개변수규모, 참조수학세계
물류(위치,규모) 물류 유통위치 매개변수 포함위치및 확장 매개변수규모, 참조수학세계
logNormal(위치,규모) 대수정규분포위치 매개변수 포함위치및 확장 매개변수규모, 참조수학세계
정상(MEAN,STD_DEV) 정규 분포평균과 함께평균및 표준편차STD_DEV, 참조수학세계
파레토(SCALE,SHAPE) 파레토 분포확장 매개변수 포함규모및 모양 매개변수모양, 참조수학세계
레일리(SIGMA) 레일리 분포매개변수 포함시그마, 참조수학세계
학생T(DF) 학생의 t-분포자유도 있음DF, 참조수학세계
삼각형(LOW,MID,HIGH) 삼각형 분포사이낮음그리고높음, 여기서중간가장 가능성이 높은 숫자입니다. 참조수학세계
유니폼(LOW,HIGH) 균일한 분포사이낮음그리고높음, 참조수학세계
와이블(모양,크기) 와이블 분포모양 매개변수 포함모양및 확장 매개변수규모, 참조수학세계

또한 다음과 같은 개별 분포를 사용할 수 있습니다:

배포설명
이항(N,P) 이항 분포시도 횟수 포함N그리고 성공 확률P각 시험판에서 참조수학세계
기하학적(P) 기하학적 분포성공 확률 포함P각 시험판에서 참조수학세계
hyperGeo(총계, 양호, 평가판) 초기하 분포총 요소 수 포함총계, 좋은 요소의 수좋음및 시도 횟수시험, 참조수학세계
로그(P-FACTOR) 로그 분포매개변수 포함P-팩터, 로그 계열 분포라고도 함, 참조수학세계
negBinomial(FAILURES,P) 음이항 분포실패실험이 중단될 때까지의 실패 횟수와 성공 확률P각 시험에서. 생성된 난수는 정의된 실패 횟수에 도달할 때까지의 성공 횟수를 설명합니다. 참조수학세계
푸아송(LAMBDA) 포아송 분포평균과 함께람다, 참조수학세계
uniformInt(LOW,HIGH) 정수 균일 분포사이낮음그리고높음, 참조수학세계

각 배포판에 대해 라이브러리는 다음 네 가지 기능을 제공합니다.배포 이름위 표에 나열된 배포판의 이름입니다.매개변수각 분포와 연관된 매개변수이고X은 피망 슬롯가 평가되는 지점입니다. 참고하세요X내생 변수일 수 있습니다.

기능설명끝. 분류. 지속적인 배포를 위해끝. 분류. 개별 분포의 경우
d<배포 이름>(매개변수) 무작위 편차 생성(분포에서 샘플)없음없음
pdf<분포 이름>(x,매개변수) 확률 밀도 피망 슬롯DNLP없음
cdf<분포 이름>(x,매개변수) 누적 분포 피망 슬롯DNLP없음
icdf<배포 이름>(x,매개변수) 역누적분포피망 슬롯DNLP없음

예를 들어, 정규 분포에 대한 피망 슬롯는 다음과 같습니다.

기능설명끝. 분류.
d보통(MEAN,STD_DEV) 정규 분포에서 난수를 샘플링합니다.없음
pdfNormal(x,MEAN,STD_DEV) 정규 분포에 대한 확률 밀도 피망 슬롯DNLP
cdfNormal(x,MEAN,STD_DEV) 정규분포의 누적분포피망 슬롯DNLP
icdfNormal(x,MEAN,STD_DEV) 정규분포에 대한 역누적분포피망 슬롯DNLP

마지막으로, 다음 피망 슬롯를 사용하여 다양한 난수 생성기의 시드를 설정할 수 있습니다:

기능설명끝. 분류.
SetSeed(SEED) 난수 생성기의 시드를 정의없음

다음 예에서는 크기 20의 샘플이 각각 정규, 이항, 코시 및 로그 정규 분포에서 생성됩니다.

$funcLibIn Stolib Stodclib
기능 randnorm /stolib.dnormal /
          randbin /stolib.dbinomial /
          랜드카우시 /stolib.dcauchy /
          randlognorm /stolib.dlognormal /;

i / i1*i20 / 설정;
j / 노름, 이항, 코시, 로그 노름 / 설정;
매개변수 randx(i,j) "분포 표본";

randx(i,"norm") = randnorm(5,2);
randx(i,"binomial") = randbin(10,0.5);
randx(i,"cauchy") = randcauchy(5,1);
randx(i,"lognorm") = randlognorm(1.2,0.3);
randx를 표시;

예에서는 먼저 확률론적 라이브러리가 GAMS에서 사용 가능하게 된 다음 라이브러리에서 사용될 피망 슬롯가 선언되어 GAMS 모델에서 참조할 수 있는 이름이 부여됩니다.

display 문에 의해 생성된 출력은 다음과 같습니다:

-- 15 PARAMETER randx 분포 샘플

           노름 이항 코시 로그 노름

i1 4.373 4.000 5.520 3.132
i2 5.655 6.000 6.813 4.192
i3 5.927 6.000 5.426 2.801
i4 1.340 4.000 5.898 3.689
i5 3.537 3.000 -3.069 2.746
i6 3.057 5.000 5.518 3.430
i7 4.212 3.000 0.136 1.577
i8 6.869 7.000 5.068 3.857
i9 3.481 4.000 -13.856 3.977
i10 5.001 4.000 5.274 2.261
i11 3.182 5.000 4.383 2.686
i12 5.688 6.000 2.914 2.102
i13 3.675 6.000 4.693 3.105
i14 4.028 5.000 1.813 2.418
i15 8.767 5.000 12.190 2.182
i16 3.558 3.000 -112.644 2.092
i17 2.402 4.000 4.078 2.523
i18 2.249 2.000 0.996 2.777
i19 5.639 4.000 3.931 2.678
i20 7.374 4.000 4.671 3.159

LINDO 샘플링 라이브러리

LINDO 샘플링 라이브러리는 특정 분포에 대한 난수 샘플을 제공합니다. 다음 지시어를 통해 사용할 수 있습니다.

$funcLibIn <InternalLibName> lsadclib

이 라이브러리를 사용하려면 LINDO 라이센스가 필요하다는 것을 확인하세요.

다음 표에는 LINDO 샘플링 기능이 나열되어 있습니다.

기능설명끝. 분류.
sampleLS<분포 이름>(매개변수) 분포를 사용하여 샘플 생성배포 이름, 분포에 따라매개변수, 그리고 a를 반환합니다.핸들예제에 설명된 대로 샘플을 참조하는아래. 없음
getSampleValues(핸들) 피망 슬롯에 의해 생성된 샘플링을 검색샘플LS. 예시 보기아래. 없음
상관관계 유도(CORTYPE) 피망 슬롯로 설정된 상관관계를 유도set상관관계이전.CORTYPE상관관계 유형을 설명합니다:0(피어슨),1(켄달) 또는2(스피어맨). 예시 보기아래. 없음
상관관계 설정(SAMPLE1,SAMPLE2,COR) 두 샘플링 사이의 상관관계를 정의합니다. 예시 보기아래. 없음
setSeed(SEED) 난수 생성기의 시드를 지정합니다.없음
setRNG(RNG) 사용될 난수 생성기를 지정합니다. 가능한 값은 다음과 같습니다.-1(무료),0(시스템),1(LINDO1),2(LINDO2),3(LIN1),4(MULT1),5(MULT2) 및6(메르센느).없음

다음 표에는 각각 사용 가능한 연속 분포와 이산 분포가 나열되어 있습니다. 매개변수에 유의하세요.SAMSIZE을 지정해야 하며 샘플의 크기를 설명합니다. 그러나 매개변수VARRED은 선택 사항이며 분산 감소 방법을 쉽게 선택할 수 있습니다. 값은 다음과 같습니다.0("없음"을 의미),1("라틴 하이퍼 광장"을 의미) 및2("정체"를 의미). 기본값은 라틴 하이퍼 스퀘어 샘플링이며, 분산 감소 방법이 지정되지 않은 경우 사용됩니다.

지속적 배포설명
베타(SHAPE_1,SHAPE_2,SAMSIZE[,VARRED]) 베타 배포두 개의 모양 매개변수로 지정됩니다.
코시(LOCATION,SCALE,SAMSIZE[,VARRED]) 코시 분포location 및 scale 매개변수로 지정됩니다.
chisquare(DF,SAMSIZE[,VARRED]) 카이제곱자유도로 지정된 분포.
지수(RATE,SAMSIZE[,VARRED]) 지수분포변화율로 지정됩니다.
f(DF_1,DF_2,SAMSIZE[,VARRED]) F 분포자유도로 지정됩니다.
피망 슬롯에 주목하세요sampleLSf피망 슬롯와 다른 버전의 F 분포를 사용합니다.DF에서확률적 라이브러리.
감마(SHAPE,SCALE,SAMSIZE[,VARRED]) 감마 분포모양 및 크기 매개변수로 지정됩니다.
피망 슬롯에 주목하세요sampleLSgamma(A,B)피망 슬롯와 동일합니다d감마(B,A)에서확률적 라이브러리.
gumbel(LOCATION,SCALE,SAMSIZE[,VARRED]) Gumbel 분포위치 및 규모 매개변수로 지정됩니다.
라플라스(LOCATION,SCALE,SAMSIZE[,VARRED]) 라플라스 분포위치 및 규모 매개변수로 지정됩니다.
물류(LOCATION,SCALE,SAMSIZE[,VARRED]) 물류 유통위치 및 규모 매개변수로 지정됩니다.
로그정규(LOCATION,SCALE,SAMSIZE[,VARRED]) 로그 정규 분포위치 및 규모 매개변수로 지정됩니다.
정상(MEAN,STD_DEV,SAMSIZE[,VARRED]) 정규 분포주어진 평균과 표준편차로 지정됩니다.
파레토(SCALE,SHAPE,SAMSIZE[,VARRED]) 파레토 분포모양 및 크기 매개변수로 지정됩니다.
학생(DF,SAMSIZE[,VARRED]) 학생의 t-분포자유도로 지정됩니다.
삼각형(LOW,MID,HIGH,SAMSIZE[,VARRED]) 삼각형 분포하한, 상한 및 중간 값으로 지정됩니다.
균일(LOW,HIGH,SAMSIZE[,VARRED]) 균일한 분포주어진 경계로 지정됩니다.
와이블(SCALE,SHAPE,SAMSIZE[,VARRED]) 와이블 분포크기 및 모양 매개변수로 지정됩니다.
피망 슬롯에 주목하세요샘플LSweibull(A,B)피망 슬롯와 동일합니다d와이불(B,A)에서확률적 라이브러리.

이산적 배포설명
이항(N,P,SAMSIZE[,VARRED]) 이항 분포시행 횟수로 지정N그리고 성공 확률P각 시험에서.
hypergeo(총계,양호,시행,SAMSIZE[,VARRED]) 초기하 분포총 요소 수, 양호한 요소 수 및 시행 횟수로 지정됩니다.
로그(P-FACTOR,SAMSIZE[,VARRED]) 로그 분포지정자:P-인자.
피망 슬롯에 주목하세요sampleLSlogarithmic다음보다 다른 버전의 로그 분포를 사용합니다d로그에서확률적 라이브러리.
음이항(SUCC,P,SAMSIZE[,VARRED]) 음이항 분포성공 횟수와 성공 확률로 지정됩니다. 생성된 난수는 정의된 성공 횟수에 도달할 때까지의 실패 횟수를 나타냅니다.
피망 슬롯에 주목하세요sampleLSnegbinomial(R,P)피망 슬롯와 동일합니다dNegBinomial(R,P-1)에서확률적 라이브러리.
포아송(MEAN,SAMSIZE[,VARRED]) 푸아송 분포평균으로 지정됩니다.

다음 예는 샘플 생성기의 사용을 설명하고 피망 슬롯의 효과를 보여줍니다.set상관관계그리고상관관계 유도:

$funcLibIn lsalib lsadclib

피망 슬롯 NormalSample / lsalib.SampleLSnormal /
          getSampleVal / lsalib.getSampleValues /
          setCor / lsalib.setCorrelation /
          indCor / lsalib.induceCorrelation /;

스칼라 d "더미"
        h "첫 번째 샘플을 위한 핸들"
        k "두 번째 샘플에 대한 핸들" ;

i "샘플 인덱스" / i01*i12 /를 설정합니다.

매개변수 sv_h(i) "핸들 h의 샘플 값"
           sv_k(i) "핸들 k의 샘플 값";

* 평균이 5이고 std.dev인 정규 분포에서 12개 표본에 대해 두 개의 핸들을 생성합니다. 각 2개
h = 일반 샘플(5,2,12);
k = 일반 샘플(5,2,12);

* Lindo 라이브러리에서 샘플 값을 검색합니다.
loop(i, sv_h(i) = getSampleVal(h) );
loop(i, sv_k(i) = getSampleVal(k) );

sv_h, sv_k를 표시합니다.

* 샘플 h와 k 사이의 상관관계 설정 및 유도
d = setCor(h,k,-1);
d = indCor(1);

* 상관 분포에서 다시 표본 값을 검색합니다.
loop(i, sv_h(i) = getSampleVal(h) );
loop(i, sv_k(i) = getSampleVal(k) );

sv_h, sv_k 표시;

결과 출력은 다음 값을 보여줍니다.sv_k원하는 상관관계에 따라 재정렬됩니다.

---- 25 PARAMETER sv_h 핸들 h에 대한 샘플 값

i01 2.079, i02 6.454, i03 4.437, i04 2.747, i05 5.339, i06 4.059, i07 6.311, i08 7.512, i09 8.280, i10 3.380, i11 4.596, i12 5.752

---- 핸들 k에 대한 25개 매개변수 sv_k 샘플 값

i01 5.509, i02 3.021, i03 7.550, i04 6.002, i05 4.227, i06 0.704, i07 3.890, i08 9.474, i09 5.084, i10 4.592, i11 3.311, i12 6.442

---- 35 PARAMETER sv_h 핸들 h에 대한 샘플 값

i01 2.079, i02 6.454, i03 4.437, i04 2.747, i05 5.339, i06 4.059, i07 6.311, i08 7.512, i09 8.280, i10 3.380, i11 4.596, i12 5.752

---- 핸들 k에 대한 35개의 PARAMETER sv_k 샘플 값

i01 7.550, i02 3.021, i03 9.474, i04 6.442, i05 4.592, i06 0.704, i07 3.890, i08 6.002, i09 3.311, i10 5.084, i11 4.227, i12 5.509

뮤텍스 라이브러리

뮤텍스 라이브러리를 사용하면 프로세스 수준으로 작업할 수 있습니다.뮤텍스- 여러 프로세스를 동기화하는 데 사용할 수 있는 프로그램 개체입니다. 예를 들어, 뮤텍스를 사용하여 조정할 수 있습니다.상호 배타적프로세스 간에 공유되는 리소스에 액세스하여 여러 프로세스가 동시에 공유 리소스에 액세스하는 것을 방지합니다. 뮤텍스 개체는 고유한 이름으로 생성되며 한 번에 하나의 프로세스에서만 획득하거나 잠글 수 있습니다. 각 프로세스는 공유 리소스에 액세스하는 코드를 실행하기 전에 뮤텍스 개체에 대한 잠금(즉, 소유권)을 획득하기를 기다립니다. 공유 리소스에 액세스한 후 프로세스는 뮤텍스 개체를 해제하거나 잠금 해제하고 뮤텍스를 기다리는 다른 프로세스는 잠금을 획득하고 실행을 계속할 수 있습니다.

뮤텍스 라이브러리는 GAMS 프로그램을 동시에 실행할 때 공유 리소스에 대한 동시 액세스와 그에 따른 오류 및 설명하기 어려운 동작을 방지하는 데 사용될 수 있습니다. 이러한 동작은 이상하거나 놀라운 것이 아닙니다. GAMS에는 프로그램을 비동기적으로 생성하는 일부 언어 기능도 있습니다(예:비동기 실행), 이러한 동시 GAMS 프로그램은 종종 파일을 공유합니다. 스칼라를 포함하는 GDX 파일을 작성하는 공통 코드를 동시에 실행하는 두 개의 GAMS 프로그램 A와 B가 있는 다음 예를 고려하십시오.X:

스칼라 x;
반복하다
  Execute_load 'x.gdx', x;
  x = x + 1;
  Execute_unload 'x.gdx', x;
x > 100까지;

코드의 올바른 실행을 보장하기 위해 우리는 프로그램 A와 B가 GDX 파일에 상호 배타적으로 접근할 수 있도록 보장하고 싶습니다. 또한 로드-증가-언로드 시퀀스가 ​​원자적으로 발생하기를 원합니다(즉, 이 시퀀스 동안 다른 프로세스는 GDX 파일을 읽거나 쓰지 않습니다). 피망 슬롯 함수 라이브러리mtxcc이 작업 및 유사한 작업을 수행하기 위한 몇 가지 기능을 제공합니다.

  • 생성(x): ID를 사용하여 뮤텍스를 생성합니다.X시스템에서. 반품0성공 시 및UNDF오류가 발생한 경우.
  • 잠금(x): ID를 사용하여 뮤텍스를 획득하거나 잠그도록 요청X: 뮤텍스를 사용할 수 있으면 즉시 반환하고, 그렇지 않으면 뮤텍스를 사용할 수 있을 때까지 기다립니다. 반품0성공 시 및UNDF오류가 발생한 경우. 이 호출에서 대기 중인 모든 프로세스는 뮤텍스가 잠금 해제되지 않으면 영원히 대기합니다.
  • 잠금 해제(x): 이전에 id로 잠긴 뮤텍스를 잠금 해제하거나 해제합니다.X. 반품0성공 시 및UNDF오류가 발생한 경우. 프로세스가 잠금 획득을 기다리고 있는 경우X, 그 중 한 명이 잠금을 획득하게 됩니다. 잠금은 잠금 해제 프로세스에 의해 유지되어야 합니다. 그렇지 않으면 동작이 정의되지 않습니다.
  • TryLock(x): 좋아요잠금, 그러나 뮤텍스를 사용할 수 없으면 반환1기다리는 대신 즉시.
  • TimedLock(x,y): 좋아요잠금, 하지만 영원히 기다리지 말고 돌아가세요1기다림에 실패한 후y밀리초.
  • 삭제(x): ID가 있는 뮤텍스를 지웁니다.X시스템에서. 반품0성공 시 및UNDF오류가 발생한 경우. 프로세스는 이를 지우기 위해 뮤텍스를 소유할 필요가 없습니다. 뮤텍스가 삭제되고 잠금 해제를 기다리는 프로세스가 대기열에 남아 있는 경우 해당 프로세스는 영원히 대기합니다.

앞의 예를 계속해서, 우리는 피망 슬롯를 만들어야 합니다잠금그리고잠금 해제사용 가능하므로 루프 본문 전체를 묶어서 보호하는 데 사용할 수 있습니다.잠금/잠금 해제전화.

$funcLibIn mtxlib mtxcclib
기능 잠금 / mtxlib.Lock /
         잠금 해제 / mtxlib.Unlock /;
스칼라 x;
반복하다
  abort$lock(12345) '뮤텍스 잠금 문제';
  Execute_load 'x.gdx', x;
  x = x + 1;
  Execute_unload 'x.gdx', x;
  abort$unlock(12345) '뮤텍스 잠금 해제 문제';
x > 100까지;

뮤텍스를 사용하기 전에 먼저 만들어야 합니다. 또한 두 프로그램이 모두 완료되면 프로그램 끝에서 명명된 뮤텍스가 지워졌는지 확인해야 합니다. 그렇지 않으면 명명된 뮤텍스가 시스템에 수집되어 리소스(구현에 따라 메모리 또는 디스크)를 소비합니다. 명명된 뮤텍스 삭제를 잊어버릴 수 있거나 뮤텍스에 대한 잠금을 유지하는 동안 프로그램이 종료되거나 다른 동시 시스템이 동일한 ID를 사용하기 때문에 다음 전체 예와 같이 고유한 뮤텍스 이름을 찾아 한 번 생성한 후 마지막에 지우는 것이 좋습니다.

* 고유한 뮤텍스 ID 생성
$eval mtxID round(frac(jnow)*24*60*60*1000)

$onEcho > x.gms
$funcLibIn mtxlib mtxcclib
기능 잠금 / mtxlib.Lock /
         잠금 해제 / mtxlib.Unlock /;
스칼라 x;
반복하다
  abort$lock(%mtxID%) '뮤텍스 잠금 문제';
  Execute_load 'x.gdx', x;
  x = x + 1;
  put_utility 'log' / '프로그램 %prgID%가 x를 ' x:0:0으로 늘렸습니다.
  Execute_unload 'x.gdx', x;
  abort$unlock(%mtxID%) '뮤텍스 잠금 해제 문제';
x >= 100이 될 때까지;
$offEcho
* x.gdx 초기화
스칼라 x /1/;
$gdxOut x.gdx
$언로드 x
$gdx아웃

$onEcho > create.gms
$funcLibIn mtxlib mtxcclib
피망 슬롯 생성 / mtxlib.Create /;
abort$create(%mtxID%) '뮤텍스 생성 문제';
$offEcho
* 뮤텍스 생성
$call.checkErrorLevel gams create.gms lo=2

* A와 B를 비동기적으로 생성
$call.async 'gams x.gms --prgID=A fileStem=A'
$eval jhA JobHandle
$call.async 'gams x.gms --prgID=B fileStem=B'
$eval jhB 작업 핸들

* 두 작업이 모두 돌아올 때까지 기다리십시오.
$set statA 0
$세트 통계B 0
$라벨 l1
$평가 x 수면(1)
$if not %statA% == 2 $eval statA JobStatus(%jhA%)
$%statB%가 아닌 경우 == 2 $eval statB JobStatus(%jhB%)
$%statA%%statB%가 아닌 경우 == 22 $goto l1

$onEcho > erasing.gms
$funcLibIn mtxlib mtxcclib
기능 삭제 / mtxlib.Delete /;
abort$delete(%mtxID%) '뮤텍스 삭제 문제';
$offEcho
* 뮤텍스 지우기
$call.checkErrorLevel gams era.gms lo=2

로그는 어떤 프로그램이 업데이트되었는지 나타냅니다.X그리고 GDX 파일x.gdx어떤 단계에서:

프로그램 B가 x를 20으로 증가시켰습니다.
    프로그램 B는 x를 21로 늘렸습니다.
    프로그램 A는 x를 22로 늘렸습니다.
    프로그램 A는 x를 23으로 늘렸습니다.

모델다이스그리드그리고asyncincbi더 현실적인 용도를 보여주세요mtxcc도서관.

나만의 라이브러리 구축

이 섹션에서는 사용자 정의 피망 슬롯 함수 라이브러리 생성에 대해 설명합니다. 이러한 라이브러리를 구현하기 전에 소스 코드와 테스트 모델을 사용할 수 있는 예제 라이브러리를 연구하는 것이 좋습니다. 이 라이브러리는 아래에서 연구됩니다.

주의
피망 슬롯 함수 라이브러리를 구축하려면 일반 프로그래밍 언어(예: C/C++, Fortran 등)에 대한 지식이 필요하며 동적으로 링크된 라이브러리를 구축하기 위한 컴파일러 및 링커 처리 경험이 필요합니다. 어떤 상황에서는 더 간단한 것을 사용하는 것이 더 쉬울 수도 있습니다.GAMS 매크로또는batinclude 파일자신만의 기능을 정의합니다.
참고
피망 슬롯 함수는 20개의 스칼라 인수로 제한되며 스칼라 값을 반환합니다.

피망 슬롯 함수 라이브러리는 사양 부분과 입력 지점에서 정의된 함수를 평가하기 위한 다수의 콜백으로 구성됩니다.

사양 부분은 콜백으로 구현됩니다.쿼리라이브러리. 라이브러리 자체, 사용 가능한 피망 슬롯, 해당 인수, 내생 분류 등에 대한 정보를 GAMS 실행 시스템에 반환합니다. 이 콜백에 대한 C, Delphi 또는 Fortran 소스 코드는 Python 도우미 스크립트를 사용하여 자동으로 생성될 수 있습니다.ql.py. 스크립트가 사양 파일을 처리합니다.*.spec, 첫 번째 인수로 지정됩니다. 이 파일의 형식은 파일에 설명되어 있습니다.tri.spec. 둘 다ql.py그리고tri.spec다음을 통해 얻을 수 있는 GAMS 테스트 라이브러리의 삼각 피망 슬롯 라이브러리 예제 소스에 포함되어 있습니다.

$ testlib trilib01
$ 압축 해제 trisource.zip

피망 슬롯 함수가 GAMS 모델 방정식 내에서 사용되는 경우 함수 값 평가 콜백 옆에 모든 항목에 대한 1차 및 2차 도함수를 계산하는 콜백도 포함됩니다.내생적 인수입력 지점에 제공되어야 합니다. 때로는 이것이 불편할 수도 있습니다. GAMS는 입력 점에 가까운 점에서 피망 슬롯 값을 사용하여 유한 차분을 사용하여 파생 값을 추정할 수 있다는 점을 관찰하세요. 그러나 이 방법은 분석적 도피망 슬롯만큼 정확하지 않고 여러 번의 피망 슬롯 평가가 필요하므로 편의성에는 대가가 따릅니다. 속성최대 파생상품피망 슬롯 사양에서 이 피망 슬롯가 제공할 가장 높은 파생 상품을 GAMS에 알립니다. 고차 파생 상품의 경우 GAMS는 유한 차이를 사용하여 파생 상품 값을 근사화합니다. 그러나 더 나은 대안은 피망 슬롯 평가를 구현할 때 자동 미분을 사용하는 경우가 많습니다. 이는 다음에서 설명됩니다.CPP 라이브러리 예, 섹션 참조자동 미분자세한 내용은.

GAMS는 다음을 통해 피망 슬롯 함수에 대한 파생어 구현을 확인하는 몇 가지 지원을 제공합니다.피망 슬롯 접미사 grad, gradn, 헤스그리고헤센. 이러한 함수 접미사는 내부 및 피망 슬롯 기능에 대해 정의됩니다. 예를 들어, 피망 슬롯 함수의 경우userfunc, 사용자가 구현한 그래디언트 평가는 다음과 같이 호출될 수 있습니다.userfunc.grad. 또한 유한 차분에 의한 그래디언트의 근사치는 다음을 호출하여 사용할 수 있습니다.userfunc.gradn. 이 두 호출의 결과를 비교하면 그라데이션 구현을 확인하는 데 도움이 될 수 있습니다. 헤세 행렬과 피망 슬롯 접미사에도 동일한 원칙이 적용됩니다..헤스그리고.hessn. GAMS 옵션FD델타그리고FDOpt은 유한 차분 계산에 영향을 미치는 데 사용될 수 있습니다. 자세한 내용은 모델을 참조하세요.[DERIVTST]GAMS 모델 라이브러리에 있습니다.

예: 삼각피망 슬롯 라이브러리

삼각 함수 라이브러리는 피망 슬롯 함수 라이브러리를 코딩하고 구축하는 방법의 예 역할을 합니다. 라이브러리는 바이너리 형식으로 GAMS 배포판에 포함되어 있습니다. 또한 C, Delphi 및 Fortran의 소스 코드는 모델의 포함 파일에서 사용할 수 있습니다.[TRILIB01], [TRILIB02]그리고[TRILIB03]각각. 라이브러리는 다음과 같은 피망 슬롯 함수를 구현합니다.

기능설명끝. 분류.
세트모드(모드) 모드를 전체적으로 설정합니다. 가능한 값은 다음과 같습니다.0라디안 및1학위용. 선택적 인수로 덮어쓸 수 있습니다.모드피망 슬롯에서코사인그리고사인. 없음
코사인(x[,MODE]) 인수의 코사인을 반환합니다.X. 인수에 유의하세요.모드선택사항, 기본 설정:모드 = 0. NLP
사인(x[,MODE]) 인수의 사인을 반환합니다.X. 인수에 유의하세요.모드선택사항, 기본 설정:모드 = 0. NLP
파이 \(\pi=3.141593...\)의 값모든

이 피망 슬롯 함수 라이브러리의 C 구현은 파일에서 찾을 수 있습니다.tricclib.c그리고tricclibql.c. API 사양 파일과 함께extrfunc.h, 이 파일에는 GAMS 피망 슬롯 함수 라이브러리에서 구현해야 하는 콜백이 문서화되어 있습니다. 파일tricclibql.c다음을 구현합니다쿼리라이브러리콜백: 라이브러리 자체와 라이브러리가 구현하는 피망 슬롯 함수에 대한 정보를 제공합니다. 예를 들어, 함수코사인내생 필수 첫 번째 인수가 있으며 외생 선택적 두 번째 인수는에서 사용할 수 있습니다.쿼리라이브러리콜백. 파일tricclibql.c(또한 Delphi 및 Fortran90에 상응하는 항목tridclibql.inc그리고triifortlibql.f90)이 스크립트에 의해 생성되었습니다.ql.py사양 파일 처리를 통해tri.spec.

예: CPP 라이브러리

CPP 라이브러리는 C++를 사용하여 "무료"로 그래디언트와 헤세 행렬을 얻는 방법의 예이자 다변량 정규 분포를 기반으로 하는 피망 슬롯의 소스 역할을 합니다. The library is available in compiled form and as C++ source. 테스트 라이브러리 모델[CPPLIB00]모델을 작성하는 동안 C++ 소스에서 공유 라이브러리를 구축하고 몇 가지 기본 테스트를 수행하는 프로세스를 연습합니다.[CPPLIB01], [CPPLIB02], [CPPLIB03], [CPPLIB04][CPPLIB05]배포판과 함께 제공되는 CPP 라이브러리 피망 슬롯 항목에 대한 보다 철저한 테스트입니다. 이러한 기능은 다음 표에 나열 및 설명되어 있습니다. 통계의 언어 규칙을 준수하면서,PDF"확률 밀도 피망 슬롯"의 약어이며CDF'누적 분포 피망 슬롯'의 약어입니다.

기능설명끝. 분류.
pdfUVN(x) 일변량 정규분포 PDF, 참조수학세계또는R NLP
cdfUVN(x) 일변량 정규 분포의 CDF, 참조수학세계또는R NLP
pdfBVN(x,y,r) 이변량 정규 분포 PDF, 참조수학세계또는R NLP
cdfBVN(x,y,r) 이변량 정규 분포의 CDF, 참조수학세계또는R NLP
pdfTVN(x,y,z,r21,r31,r32) 삼변량 정규분포 PDF, 참조수학세계또는R NLP

자동 미분

종종 함께 사용하기 위해 피망 슬롯 함수가 생성됩니다.내생적 인수. 이러한 경우 피망 슬롯 값 자체 외에도 이러한 인수에 대한 1차 및 2차 도피망 슬롯를 제공해야 합니다. 이러한 도피망 슬롯를 계산하는 한 가지 방법은 자동 미분 기술을 사용하는 것입니다(위키피디아의 기사자세한 내용은).

C++를 사용하면 일반적인 산술 연산자(할당, 덧셈, 곱셈 등)를 오버로드하여 피망 슬롯 전용 소스 코드를 거의 또는 전혀 변경하지 않고도 자동 미분이 발생하도록 할 수 있습니다. 이는 CPP 라이브러리에서 파생 상품을 계산하는 데 사용되는 기술입니다. 테스트 라이브러리 모델을 관찰하세요.[CPPLIB00]CPP 라이브러리의 모든 소스 코드가 포함되어 있으며 이 소스에서 라이브러리를 빌드하는 데 필요한 단계를 보여줍니다. 소스는 자동 차별화 프로세스가 어떻게 작동하는지에 대한 자체 문서입니다.

다변량 정규분포

위 표에 표시된 것처럼 CPP 라이브러리는 일변량, 이변량 및 삼변량 표준 정규 분포에 대한 PDF 및 CDF를 구현합니다. 내장 피망 슬롯는 20개의 인수로 제한되므로 표준 정규(평균 0, 표준 편차 1)를 사용합니다. 일변량 사례에 대한 피망 슬롯는 편리한 예로 포함되었으며 피망 슬롯와 (거의) 동일한 결과를 제공해야 합니다.pdf일반그리고cdf일반에서확률적 라이브러리. 다변량 사례의 경우 구현은 다음의 TVPACK을 기반으로 합니다.앨런 겐츠, 도피망 슬롯를 적절하게 계산할 수 있도록 일부 수정되었습니다. 우리는 공분산 행렬이 아닌 상관 계수를 인수로 사용하는 피망 슬롯를 구현하기로 결정했습니다. 공분산 행렬에서 상관 계수로의 변환은 간단합니다. 다음R코드는 이 변환을 설명합니다. 여기 패키지mnormtGenz와 유사한 코드를 사용하여 다변량 CDF를 계산하는 데 사용됩니다.

# 평균 mu 및 분산-공분산 행렬 S1로 시작
x <- c(1.0,3.0,3.0)
mu <- c(0.0,1.0,-1.0)
S1 <- 행렬(c(1.0,1,1.5, 1,4,1.5, 1.5,1.5,9),3,3)
v1 <- pmnorm(x=x, 평균=mu, varcov=S1)
# 3개의 상관 계수를 사용하여 표준 정규로 변환
R <- cov2cor(S1)
sd <- sqrt(diag(S1))
xn <-(x-mu) / sd
v2 <- pmnorm(x=xn, 평균=0, varcov=R)

이변량의 경우 하나의 상관 계수가 있음에 유의하세요.R. CDF 구현은 기계 정밀도에 비해 정확하지 않으며 정확도가 14자리 또는 15자리입니다. 삼변량의 경우에는 3개의 상관 계수, 즉 하위 삼각형의 대각선을 벗어난 3개의 요소가 포함됩니다.R위. CDF의 정확도는 입력에 따라 달라집니다. 상관관계가 거의 0일 때 더 높고 조건수가 낮을 때 더 높습니다.R증가합니다. 일반적으로 달성할 수 있는 정확도는 \(10^-11\)뿐입니다. 두 다변량 경우 모두 상관 행렬이 퇴화되는 지점이나 그 근처에서 평가하지 않는 것이 좋습니다. 거의 퇴화된 지점에서는 분포 및 밀도 피망 슬롯의 정확성이 저하됩니다. 상관 행렬이 퇴화됨에 따라 분포도 퇴화됩니다.

비고: 상태 저장 라이브러리

GAMS 내장 피망 슬롯는무국적, 사용자가 구현할 수 있음상태 저장피망 슬롯 함수, 즉 일부 메모리가 있는 함수. 상태 저장 피망 슬롯 기능을 달성하는 방법에는 두 가지가 있습니다.

  1. 라이브러리 초기화(LibInit): 초기화 시 피망 슬롯 라이브러리는 제공된 피망 슬롯를 평가하는 데 필요한 일부 데이터를 읽습니다. 예는 다음과 같습니다.조각별 다항식 라이브러리.
  2. 이전 피망 슬롯 호출: 연속적인 피망 슬롯 호출의 실행을 변경하는 피망 슬롯 호출. 예를 들면 다음과 같습니다.설정모드에서삼각 피망 슬롯 라이브러리.
주의
함수 평가 호출로 피망 슬롯 함수 라이브러리의 상태를 변경하는 것은 문제가 됩니다. 왜냐하면 GAMS 시스템의 다른 부분이 잠재적으로 함수 라이브러리의 다른 인스턴스를 사용하기 때문입니다.

예를 들어 다음 피망 슬롯를 고려해보세요.설정모드삼각피망 슬롯 라이브러리다음을 통해 호출됨설정모드(1)solv 문 앞에. 옵션이 아닌 경우solvelink이 5로 설정되면 솔버는 피망 슬롯 라이브러리의 새 인스턴스를 사용하여 별도의 프로세스에서 실행되므로 기본값을 사용합니다.모드, 이는 0입니다. 게다가 만일solvelink이 0으로 설정되면 GAMS 프로세스는 해결 문을 실행하기 위해 종료되고 해결 후 새 GAMS 프로세스를 다시 시작합니다. 다시 시작된 GAMS 프로세스는 값에 대한 메모리가 없는 피망 슬롯 함수 라이브러리의 새로운 인스턴스를 로드합니다.모드solve 문 이전부터. 이 문제는 GAMS 테스트 라이브러리 모델에서 설명됩니다.[TRILIB04].

피망 슬롯 함수와 피망 슬롯 방정식

피망 슬롯 함수 외에도 GAMS는 GAMS에 추가 수학적 함수를 포함할 수 있는 또 다른 기능인 피망 슬롯 방정식을 제공합니다. 이 방정식은 다음과 같이 표시됩니다.수식 유형 =x=. 모델 인스턴스에 대한 실행 가능한 솔루션은 모든 내부 및 피망 슬롯 방정식을 충족해야 합니다. 피망 슬롯 방정식은 장에서 소개되고 논의됩니다.피망 슬롯 방정식.

피망 슬롯 함수와 유사하게 피망 슬롯 방정식을 평가하는 루틴을 제공하는 것은 사용자의 책임입니다. 또한 두 기능 모두 특히 비선형 모델과 관련이 있습니다.

외재 함수 및 피망 슬롯 방정식의 일부 특성에 대한 개요가 다음 표에 나와 있습니다.

특성피망 슬롯 기능피망 슬롯 방정식
최대 인수 수20 제한 없음
문에서 사용 가능아니요
디버깅 지원아니요
헤시안을 솔버로 반환아니요

피망 슬롯 함수와 피망 슬롯 방정식을 사용하여 방정식 \( z = \int_x_1^x_2 x\, dx \)가 어떻게 공식화될 수 있는지 보여주는 다음 예를 고려하십시오.

* 피망 슬롯 함수 사용
e1..적분x(x1,x2) =e= z;

* 피망 슬롯 방정식 사용
e1.. 1*x1 + 2*x2 + 3*z =x= 1;

피망 슬롯에 주목하세요적분x는 사용자 정의 피망 슬롯 함수로 가정되며 아마도 \( \textttintegralx(x_1,x_2) = \frac12(x_2^2-x_1^2)\)로 구현됩니다.

또한 피망 슬롯 방정식의 정수 1부터 3까지가 피망 슬롯 모듈 내부의 피망 슬롯 함수에 사용되는 변수의 인덱스에 매핑된다는 점에 유의하세요. 피망 슬롯 방정식의 오른쪽은 피망 슬롯 방정식 번호를 나타냅니다. 사용자 정의 피망 슬롯 방정식은 \((x_1,x_2,z)\mapsto \int_x_1^x_2 x\, dx - z\) 함수를 구현한다고 가정합니다.

문장에서 피망 슬롯 함수를 사용하는 간단한 예로서, 변수 수준을 설정하는 다음 할당을 고려하십시오.y\((\int_0^2 x\, dx)^2\) 값으로:

y.l = sqr(적분x(0,2));