eigvec01.gms : 고유벡터 유틸리티 테스트

설명

고유벡터 예.

기고자: Erwin Kalvelagen, 2008년 10월.

소형 모델 유형 :크레이지 슬롯


카테고리 : 크레이지 슬롯 테스트 라이브러리


메인 파일 : eigvec01.gms

$title 고유 벡터 유틸리티 테스트 (EIGVEC01,SEQ=410)

$onText

고유벡터 예.

기고자: Erwin Kalvelagen, 2008년 10월.

옥타브:1> a = [1 2 4 7 11; 2 3 5 8 12; 4 5 6 9 13; 7 8 9 10 14; 11 12 13 14 15]
a =

   1 2 4 7 11
   2 3 5 8 12
   4 5 6 9 13
   7 8 9 10 14
  11 12 13 14 15

옥타브:2> eig(a)
답변 =

   -8.464425
   -1.116317
   -0.512109
   -0.027481
   45.120332

옥타브:3> [e1,e2] = eig(a)
e1 =

e2 =

   -8.46442 0.00000 0.00000 0.00000 0.00000
    0.00000 -1.11632 0.00000 0.00000 0.00000
    0.00000 0.00000 -0.51211 0.00000 0.00000
    0.00000 0.00000 0.00000 -0.02748 0.00000
    0.00000 0.00000 0.00000 0.00000 45.12033

$offText

내가 /i1*i5/로 설정;
별칭(i,j);

테이블 a(i,j)
      i1 i2 i3 i4 i5
나는1 1 2 4 7 11
나는2 2 3 5 8 12
i3 4 5 6 9 13
i4 7 8 9 10 14
i5 11 12 13 14 15

;

예상되는 테이블(i,*)
           발 i1 i2 i3 i4 i5
i1 -8.464425 0.5550905 -0.2642556 0.2892854 0.6748602 0.2879604
i2 -1.116317 0.4820641 -0.2581518 0.2196341 -0.7349311 0.3355726
i3 -0.512109 0.2865066 0.2159261 -0.8437897 0.0411896 0.3970041
i4 -0.027481 -0.0992784 0.7711236 0.3943678 0.0055409 0.4898525
i5 45.120332 -0.6062562 -0.4714561 -0.0238286 0.0520829 0.6378888
;

매개변수 eval(i) '고유값';
매개변수 evec(i,j) '고유벡터';

Execute_unload 'a.gdx', i, a;
ExecuteTool.checkErrorLevel 'linalg.eigenVector 및 평가판 -gdxin=a.gdx -gdxout=b.gdx';
Execute_load 'b.gdx', eval, evec;
evec(i,j)$(evec('i1','i1')<0) = -evec(i,j);
abort$(sum(i$(abs(eval(i)-expected(i,'val'))>1e-4),1)) '잘못된 고유값', eval, 예상;
abort$(sum((i,j)$(abs(evec(i,j)-expected(i,j))>1e-4),1)) '잘못된 고유벡터', evec, 예상;

옵션 클리어=eval, 클리어=evec;
ExecuteTool.checkErrorLevel 'linalg.eigenVector 및 평가판';
evec(i,j)$(evec('i1','i1')<0) = -evec(i,j);
abort$(sum(i$(abs(eval(i)-expected(i,'val'))>1e-4),1)) '잘못된 고유값', eval, 예상;
abort$(sum((i,j)$(abs(evec(i,j)-expected(i,j))>1e-4),1)) '잘못된 고유벡터', evec, 예상;
*
* A의 아래쪽 삼각형 부분만 사용됨
*
테이블 a2(i,j)
      i1 i2 i3 i4 i5
나는1 1
i2 2 3
나는3 4 5 6
i4 7 8 9 10
i5 11 12 13 14 15

;

Execute_unload 'a.gdx', i, a2;
ExecuteTool.checkErrorLevel 'linalg.eigenVector 및 a2 평가 evec -gdxin=a.gdx -gdxout=b.gdx';
Execute_load 'b.gdx', eval, evec;
evec(i,j)$(evec('i1','i1')<0) = -evec(i,j);
abort$(sum(i$(abs(eval(i)-expected(i,'val'))>1e-4),1)) '잘못된 고유값', eval, 예상;
abort$(sum((i,j)$(abs(evec(i,j)-expected(i,j))>1e-4),1)) '잘못된 고유벡터', evec, 예상;

옵션 클리어=eval, 클리어=evec;
ExecuteTool.checkErrorLevel 'linalg.eigenVector i a2 eval evec';
evec(i,j)$(evec('i1','i1')<0) = -evec(i,j);
abort$(sum(i$(abs(eval(i)-expected(i,'val'))>1e-4),1)) '잘못된 고유값', eval, 예상;
abort$(sum((i,j)$(abs(evec(i,j)-expected(i,j))>1e-4),1)) '잘못된 고유벡터', evec, 예상;

*
* A의 위쪽 삼각형 부분만 사용됨
*
매개변수 a3(i,j); a3(i,j) = a2(j,i)

Execute_unload 'a.gdx', i, a3;
ExecuteTool.checkErrorLevel 'linalg.eigenVector i a3 eval evec -gdxin=a.gdx -gdxout=b.gdx';
Execute_load 'b.gdx', eval, evec;
evec(i,j)$(evec('i1','i1')<0) = -evec(i,j);
abort$(sum(i$(abs(eval(i)-expected(i,'val'))>1e-4),1)) '잘못된 고유값', eval, 예상;
abort$(sum((i,j)$(abs(evec(i,j)-expected(i,j))>1e-4),1)) '잘못된 고유벡터', evec, 예상;

옵션 클리어=eval, 클리어=evec;
ExecuteTool.checkErrorLevel 'linalg.eigenVector i a3 eval evec';
evec(i,j)$(evec('i1','i1')<0) = -evec(i,j);
abort$(sum(i$(abs(eval(i)-expected(i,'val'))>1e-4),1)) '잘못된 고유값', eval, 예상;
abort$(sum((i,j)$(abs(evec(i,j)-expected(i,j))>1e-4),1)) '잘못된 고유벡터', evec, 예상됨;