fnsqrec2.gms : sqrec 내장의 정확성 테스트

설명

sqrec(x,S) = 1/x if x >= S
             1/S - r/S^2 + r^2/s^3 그렇지 않으면 r = x - S
S >= 1e-10의 경우 기본값 S = 1e-10입니다.

기고자: Steve, 2017년 3월

소형 모델 유형 :슬롯 사이트 추천


카테고리 : 슬롯 사이트 추천 테스트 라이브러리


메인 파일 : fnsqrec2.gms 포함: fnset_xy.inc[htmlfntest_xy.inc[html]

$title 'sqrec 내장의 정확성 테스트' (FNSQREC2,SEQ=726)

$onText
sqrec(x,S) = 1/x x >= S인 경우
             1/S - r/S^2 + r^2/s^3 그렇지 않으면 r = x - S
S >= 1e-10의 경우 기본값 S = 1e-10입니다.

기고자: Steve, 2017년 3월
$offText

$include fnset_xy.inc

담당자 = 8e-16;
세트
  티/
    t1 * t6,
    t11 * t16
    t21 * t26
  /
  torig(t) '평활화되지 않은 입력'
  ;

테이블 데이터(T,V)
        x y f_ fx_ fxx_ rc_ ec_
t1 1 1e-10
t2 1e-6 1e-10
t3 1e-9 1e-10
t4 1e-20 1e-10
t5 EPS 1e-10
t6 -1e+2 1e-10

t11 1 1e-5
t12 1e-3 1e-5
t13 1e-4 1e-5
t14 1e-99 1e-5
t15 EPS 1e-5
t16 -1e+20 1e-5

t21 4000 2000
t22 2001 2000
t23 2000 2000
t24 1999.999 2000
t25 EPS 2000
t26 -1e20 2000
;

스칼라
  아르, 로스
  ;
* 중단점에서 정확하게 테스트하는 데 문제가 있습니다. 두 번째 파생 항목이 0이어야 합니다.
* 아니면 매끄러운 부분에서 가져왔나요?
루프T$[data(T,'x') = 데이터(T,'y')],
  데이터(T,'x') = (1+3e-16) * 데이터(T,'x');
;
torig(t) = [data(T,'x') > data(T,'y')];

루프torig(T),
  data(T, 'f_') = 1 / data(T,'x');
  data(T, 'fx_') = -data(T,'f_') / data(T,'x');
  data(T,'fxx_') = -2 * data(T,'fx_') / data(T,'x');
;
루프t$[torig(t) 아님],
  r = 데이터(t,'x') - 데이터(t,'y');
  ros = r / data(t,'y');
  data(t, 'f_') = ( (ros - 1) * ros + 1) / data(t,'y');
  data(t, 'fx_') = (2*ros-1) / data(t,'y') / data(t,'y');
  data(t,'fxx_') = (2/data(t,'y')) / data(t,'y') / data(t,'y');
;

루프 T,
  data(T,'fxy_') = data(T,'fxy_');

  data(T, 'f') = sqrec.value( data(T,'x'),data(T,'y'));
  data(T, 'fx') = sqrec.grad(1: data(T,'x'),data(T,'y'));
  data(T, 'fy') = sqrec.grad(2: data(T,'x'),data(T,'y'));
  data(T,'fxx') = sqrec.hess(1:1:data(T,'x'),data(T,'y'));
  data(T,'fxy') = sqrec.hess(1:2:data(T,'x'),data(T,'y'));
  data(T,'fyx') = sqrec.hess(2:1:data(T,'x'),data(T,'y'));
  data(T,'fyy') = sqrec.hess(2:2:data(T,'x'),data(T,'y'));
  data(T, 'rc') = mathlastrc;
  data(T, 'ec') = mathlastec;
;

데이터 표시;

$include fntest_xy.inc