설명
이 예는 두 개의 야코비안 요소의 사용을 보여줍니다. 상수로 식별되는 외부 방정식에서 파생상품.
소형 모델 유형 :슬롯 머신
카테고리 : 슬롯 머신 테스트 라이브러리
메인 파일 : ex6.gms
$title 외부 방정식 - 예 6(EX6,SEQ=963)
$onText
이 예에서는 두 개의 야코비안 요소를 사용하는 방법을 보여줍니다.
상수로 식별되는 외부 방정식에서
파생 상품.
$offText
변수 x, y, xp, yp, z1, z2, obj;
방정식 setx, sety, defxz1, defxz2, defz1, defz2, deforder, defobj;
setx.. x =e= 0.5 + xp;
세티..y =e= 0.7 + yp;
defxz1.. 1*x + 2*y + 3*z1 =x= 1;
defxz2.. 1*x + 2*y + 4*z2 =x= 2;
defz1.. sin(x) + cos(y) =e= z1;
defz2.. cos(x) - sin(y) =e= z2;
deforder.. z1 =g= z2 + 0.01;
defobj..obj =e= sqr(xp) + sqr(yp);
$ 미리 설정
$ifI %system.filesys%==unix $set pre 'lib'
$ 세트 '64'
$set N ex6
$set cN %pre%%N%c%suf%
$set fN %pre%%N%f%suf%
모델 %N% '슬롯 머신 구현' / setx, sety, defz1, defz2, deforder, defobj /;
model %cN% 'C 파일 이름이 전달된 외부 방정식' / setx, sety, defxz1, defxz2, deforder, defobj /;
옵션 limcol = 0;
$onText
대상과 비교하여 솔루션을 확인하십시오.
$offText
매개변수 보고서(*,*) 솔루션 요약;
스칼라 totdist /0/;
$onEchoV > runme.gms
x.l=0; y.l=0; xp.l=0; yp.l=0; z1.l=0; z2.l=0; obj.l=0;
x.m=0; y.m=0; xp.m=0; yp.m=0; z1.m=0; z2.m=0; obj.m=0;
setx.l=0; sety.l=0; defxz1.l=0; defxz2.l=0; defz1.l=0; defz2.l=0; deforder.l=0; defobj.l=0;
obj를 최소화하는 nlp를 사용하여 %1을(를) 해결하세요.
abort$(%1.solvestat <> 1) '%1 모델 실행에 문제가 있습니다';
보고서('x', '%1') = x.l;
보고서('y', '%1') = y.l;
보고서('obj','%1') = obj.l;
totdist = totdist + abs(x0 - x.l) + abs(y0 - y.l);
$offEcho
$ 확장 '.dll' 설정
$ifI %system.filesys%==unix $set ext '.so'
$ifI %system.platform%==dex $set ext '.dylib'
$ifI %system.platform%==dax $set ext '.dylib'
$ 세트 eq
$ifI %system.filesys%==unix $set eq "'"
$if set runall $set runC '1'
$ifThen nocomp를 설정하지 않음
$ ifI set runC $call 슬롯 머신 complink lo=%슬롯 머신lo% --lang=c --files=ex6c.c --libname=%cN%%ext%
$ 오류 수준 1인 경우 $abort C 라이브러리 컴파일 오류
$endIf
스칼라 x0 / 0.5 /, y0 / 0.7 /;
$ifThenE sameas('%슬롯 머신nlp%','conopt')or(sameas('%슬롯 머신nlp%',''))
$ echo rtzern 1e-15 > conopt.opt
%cN%.optfile = 1;
$endIf
$ batInclude runme %N%
$if set runC $batInclude runme %cN%
보고서 표시;
if ((totdist < 1.0E-6),
"@@@@ #테스트에 통과했습니다."를 표시합니다.
그렇지 않으면
abort totdist, "@@@@ #테스트가 통과되지 않았습니다. 자세한 내용은 ex6.lst를 검사하세요.";
);