설명
DLL 테스트 문제 번호 MCP2 -- 조밀한 비선형 시스템
소형 모델 유형 :슬롯 나라
카테고리 : 슬롯 나라 테스트 라이브러리
메인 파일 : exmcp2.gms
$title 외부 방정식 - MCP 2 예(EXMCP2,SEQ=574)
$onText
DLL 테스트 문제 번호 MCP2 - 조밀한 비선형 시스템
$offText
내가 /i1*i8/로 설정;
별칭(i,j);
변수 x(i) 알 수 없음;
방정식 equ(j) 방정식 시스템
equx(j) 외부 방정식이 있는 방정식 시스템;
equ(j)..sqr(x(j)) + sum(i, 0.1 * ord(i) * x(i)) =e= 1;
equx(j)..sum(i, ord(i) * x(i)) =x= ord(j);
매개변수 x0(J) 시작점(슬롯 나라 및 외부 방정식의 경우);
x0(j) = 균일(0,1);
옵션 sysout=on;
x.l(j) = x0(j);
$ 미리 설정
$ifI %system.filesys%==unix $set pre 'lib'
$ 세트 '64'
$세트 N exmcp2
$set cN %pre%%N%c%suf%
$set c_cbN %pre%%N%c_cb%suf%
$set fN %pre%%N%f%suf%
$set f_cbN %pre%%N%f_cb%suf%
모델 %N% '슬롯 나라 구현' / equ /;
model %cN% 'C의 외부 방정식' / equx /;
model %c_cbN% '콜백이 포함된 C의 외부 방정식' / equx /;
model %fN% 'F77의 외부 방정식' / equx /;
model %f_cbN% '콜백이 포함된 F77의 외부 방정식' / equx /;
스칼라 totdist /0/;
매개변수 해(J,*);
* 여기의 모델 치수가 일치하는지 확인하세요.
* 외부 방정식 구현
abort$(card(i) ne 8) " 차원이 일치하지 않습니다. 8과 같아야 합니다!";
$onEchoV > runme.gms
x.l(j) = x0(j);
mcp를 사용하여 %1을(를) 해결하세요.
솔루션(j,"%1") = x.l(j);
totdist = totdist + sum J, abs(x.l(J)-solution(J,'exmcp2'));
$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' set runC_cb '1' set runF '1' set runF_cb '1'
$ifThen nocomp를 설정하지 않음
$ ifI set runC $call 슬롯 나라 complink lo=%슬롯 나라lo% --lang=c --files=exmcp2c.c --libname=%cN%%ext%
$ 오류 수준 1인 경우 $abort C 라이브러리 컴파일 오류
$ ifI set runC_cb $call 슬롯 나라 complink lo=%슬롯 나라lo% --lang=c --files=exmcp2c_cb.c --libname=%c_cbN%%ext%
$ 오류 수준 1인 경우 $abort C 라이브러리 컴파일 오류
$ ifI set runF $call 슬롯 나라 complink lo=%슬롯 나라lo% --lang=fortran90 --files=%eq%"gehelper.f90 exmcp2f.f90"%eq% --libname=%fN%%ext%
$ 오류 수준 1인 경우 $abort Fortran90 라이브러리 컴파일 오류
$ ifI set runF_cb $call 슬롯 나라 complink lo=%슬롯 나라lo% --lang=fortran90 --files=%eq%"gehelper.f90 msg2_f.f90 exmcp2f_cb.f90"%eq% --libname=%f_cbN%%ext%
$ 오류 수준 1인 경우 $abort Fortran90 라이브러리 컴파일 오류
$endIf
$ batInclude runme %N%
$if set runC $batInclude runme %cN%
$if set runC_cb $batInclude runme %c_cbN%
$if set runF $batInclude runme %fN%
$if set runF_cb $batInclude runme %f_cbN%
디스플레이 솔루션;
(totdist < 1.0E-6)인 경우,
"@@@@ #테스트에 통과했습니다."를 표시합니다.
그렇지 않으면
abort totdist, "@@@@ #테스트가 통과되지 않았습니다. 자세한 내용은 exmcp2.lst를 검사하세요.";
;