trilib04.gms: 상태 저장 함수 라이브러리의 문제를 보여줍니다.

설명

이것은 상태 저장 함수 라이브러리의 문제를 보여줍니다.
무료 슬롯 및 솔버 프로세스의 컨텍스트.

계산을 위한 trilib 기본 모드는 라디안(모드=0)입니다. 는
SetTriMode 함수를 사용하여 다음의 인수를 해석할 수 있습니다.
코사인 및 사인에 대한 후속 함수 호출(모드=1)
라디안 대신(모드=0). SetTriMod 함수는 다음을 반환합니다.
이전 모드 값.

기여자: Michael Bussieck

소형 모델 유형 :무료 슬롯


카테고리 : 무료 슬롯 테스트 라이브러리


메인 파일 : trilib04.gms 포함: compilec.inc[htmlprecomp.inc[html]

$title 상태 저장 함수 라이브러리의 문제를 보여줍니다(TRILIB04,SEQ=552)

$onText
이는 상태 저장 함수 라이브러리의 문제점을 보여줍니다.
무료 슬롯 및 솔버 프로세스의 컨텍스트.

계산을 위한 trilib 기본 모드는 라디안(모드=0)입니다. 는
SetTriMode 함수를 사용하여 다음 인수를 해석할 수 있습니다.
코사인 및 사인에 대한 후속 함수 호출(모드=1)
라디안 대신(모드=0). SetTriMod 함수는 다음을 반환합니다.
이전 모드 값.

기여자: Michael Bussieck
$offText

$ifThen nocomp 설정
* testlib에서 제공하는 사전 컴파일된 라이브러리 사용
$ batInclude precomp.inc tricclib
$else
* 소스 코드에서 라이브러리 컴파일
$ batInclude compilec.inc 트라이
$endIf

함수 mySetTriMode / myLib.SetTriMode /
         myCos / myLib.Cosine /;

변수 x, y; 방정식 e;
e.. x =e= mycos(y);
모델 m /e/;

* 모든 것이 기본값이므로 라디안 단위입니다.
y.fx = 파이/2;
nlp를 사용하여 m min x를 해결합니다.
중단$(abs(x.l-0)>1e-12) 'x<>0';

display$mySetTriMode(1) '이제 각도로 전환하지만solvlink=ChainScript를 수행합니다.';

* 솔버는 별도의 프로세스에서 실행되며 기본 상태(예: 모드=0)의 새로운 함수 라이브러리 인스턴스로 시작합니다.
m.solvelink=%solveLink.chainScript%;
nlp를 사용하여 m min x를 해결합니다.
abort$(abs(x.l-0)>1e-6) 'x.l은 0이 될 것으로 예상됩니다.', x.l;

* 무료 슬롯 해석이 새로운 프로세스로 다시 시작되고 기본 상태 라이브러리 모드가 0이었으므로
abort$(0<>mySetTriMode(1)) '모드는 0이 될 것으로 예상됩니다.';

* 이제 솔버 프로세스가 있지만 무료 슬롯는 메모리 상주 상태를 유지하는solvlink=CallModule과 동일합니다.
m.solvelink=%solveLink.callModule%;
nlp를 사용하여 m min x를 해결합니다.
abort$(abs(x.l-0)>1e-6) 'x.l은 0이 될 것으로 예상됩니다.', x.l;
abort$(1<>mySetTriMode(1)) '모드는 1이어야 합니다.';

* 이제 무료 슬롯에 연결된 솔버 라이브러리가 있는solvlink=LoadLibrary와 동일합니다.
m.solvelink=%solveLink.loadLibrary%;
y.fx=90;
nlp를 사용하여 m min x를 해결합니다.
abort$(abs(x.l-0)>1e-6) 'x.l은 0이 될 것으로 예상됩니다.', x.l;
abort$(1<>mySetTriMode(1)) '모드는 1이 되어야 합니다.';