설명
이것은 상태 저장 함수 라이브러리의 문제를 보여줍니다. 무료 슬롯 및 솔버 프로세스의 컨텍스트. 계산을 위한 trilib 기본 모드는 라디안(모드=0)입니다. 는 SetTriMode 함수를 사용하여 다음의 인수를 해석할 수 있습니다. 코사인 및 사인에 대한 후속 함수 호출(모드=1) 라디안 대신(모드=0). SetTriMod 함수는 다음을 반환합니다. 이전 모드 값. 기여자: Michael Bussieck
소형 모델 유형 :무료 슬롯
카테고리 : 무료 슬롯 테스트 라이브러리
메인 파일 : trilib04.gms 포함: compilec.inc[html] precomp.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이 되어야 합니다.';