설명
이 모델은 1차 및 2차 파생 상품을 테스트하는 방법을 보여줍니다.
(정확한/분석적인) 도함수를 다음과 비교하여 주어진 함수의
유한차에 의해 계산된 도함수.
슬롯 머신는 함수 접미사 .grad/.hess를 통해 (정확한) 파생 상품을 제공합니다.
그리고 함수 접미사 gradn/.hessn을 통한 유한 차분 도함수입니다.
이러한 시설은 내부 및 외부 기능을 위해 작동합니다.
키워드: 슬롯 머신 언어 기능, 정확도 테스트, 분석 파생물,
유한 차이
소형 모델 유형 :슬롯 머신
카테고리 : 슬롯 머신 모델 라이브러리
메인 파일 : derivtst.gms
$title 함수의 도함수를 테스트하는 방법(DERIVTST,SEQ=406)
$onText
이 모델은 1차 및 2차 도함수를 테스트하는 방법을 보여줍니다.
(정확한/분석적인) 도함수를 다음과 비교하여 주어진 함수의
유한차에 의해 계산된 도함수.
슬롯 머신는 함수 접미사 .grad/.hess를 통해 (정확한) 파생 상품을 제공합니다.
그리고 함수 접미사 gradn/.hessn을 통한 유한 차분 도함수입니다.
이러한 시설은 내부 및 외부 기능을 위해 작동합니다.
키워드: 슬롯 머신 언어 기능, 정확도 테스트, 분석 파생물,
유한차
$offText
$샘플 크기를 설정하지 않은 경우 $set 샘플 크기 100
$설정되지 않은 경우 tol $set tol 1e-6
$func를 설정하지 않은 경우 $set func power
세트
s '샘플' / s1*s%sampleSize% /
ai '인수 정보' / lo, up, int, endo /;
* 기능 데이터
$ifThenI %func%==pdfnormal
$ funcLibIn mylib Stodclib
함수 %func% / mylib.%func% /;
$ 인수 설정 sp(s,'a1'),sp(s,'a2'),sp(s,'a3')
'함수 인수' 설정 / a1*a3 /;
테이블 fi(a,ai) '함수 인수 정보'
lo up int 엔도
a1 -10 10 1
a2 -5 5
a3 0.5 1;
$elseIfI %func%==전원
$ 인수 설정 sp(s,'a1'),sp(s,'a2')
'함수 인수' 설정 / a1*a2 /;
테이블 fi(a,ai) '함수 인수 정보'
lo up int 엔도
a1 -100 100 1
a2 -5 5 1;
$else
$ abort '%func%에 대한 함수 데이터가 없습니다.
$endIf
매개변수
sp(s,a) '인수를 위한 샘플 포인트'
grad(s,a) '정확한 기울기'
gradn(s,a) '수치적 기울기'
hess(s,a,a) '정확한 기울기'
hessn(s,a,a) '수치적 기울기';
세트
ae(a) '엔도제노스 인수'
badsp(s) '실행 오류를 유발하는 샘플 포인트';
별칭(ae,aep);
ae(a) = fi(a,'endo');
sp(s,a) =uniformInt(fi(a,'lo'),fi(a,'up'))$(fi(a,'int'))
+ 균일(fi(a,'lo'),fi(a,'up'))$(not fi(a,'int'));
루프(들,
grad (s,ae) = %func%.grad (ae.pos:%args%);
gradn(s,ae) = %func%.gradn(ae.pos:%args%);
hess (s,ae,aep) = %func%.hess (ae.pos:aep.pos:%args%);
hessn(s,ae,aep) = %func%.hessn(ae.pos:aep.pos:%args%);
if(실행오류,
badsp(들) = 예;
exec오류 = 0;
);
);
* 그래디언트와 헤센 비교
csp(s) '비교할 샘플 포인트'를 설정합니다.
매개변수
badargs(s,a) '실행 오류를 유발한 샘플 포인트'
gradError(s,a) '경도 계산 오류'
HessError(s,a,a) '헤세 계산 오류';
csp(들) = 나쁘지 않음sp(들);
badargs(badsp,a) = sp(badsp,a);
$macro 오류(a,b) 절대(a-b)/abs(a+1)
gradError(csp,ae) = 오류(grad(csp,ae),gradn(csp,ae));
hessError(csp,ae,aep) = 오류(hess(csp,ae,aep),hessn(csp,ae,aep));
gradError(csp,ae )$(gradError(csp,ae) < %tol%) = 0;
hessError(csp,ae,aep)$(hessError(csp,ae,aep) < %tol%) = 0;
중단$(카드(badsp) + 카드(gradError) + 카드(hessError)) badargs, gradError, hessError;