설명
양의 정부호 대칭 행렬의 콜레스키 분해 A=LL'을 찾습니다. A 외부 프로그램을 통해 기여자: Erwin Kalvelagen, 암스테르담 최적화
소형 모델 유형 :무료 슬롯 게임
카테고리 : 무료 슬롯 게임 테스트 라이브러리
메인 파일 : choles01.gms
$title 테스트 cholesky 유틸리티(CHOLES01,SEQ=411)
$onText
양의 정부호 대칭 행렬의 촐레스키 분해 A=LL'을 구합니다.
A 외부 프로그램을 통해
기여자: Erwin Kalvelagen, 암스테르담 최적화
$offText
i / i1*i5 / 설정;
별칭(i,j,n);
테이블 a(i,j) '원래 행렬'
i1 i2 i3 i4 i5
나는1 64 48 24 8 8
i2 48 72 42 54 36
i3 24 42 89 107 95
i4 8 54 107 210 186
i5 8 36 95 186 187
;
스칼라 rc;
매개변수 L(i,j) '콜레스키 인자';
Execute_unload 'a.gdx', i, a;
ExecuteTool.checkErrorLevel 'linalg.cholesky i a L -gdxin=a.gdx -gdxout=b.gdx';
Execute_load 'b.gdx', L;
* Cholesky 인수분해가 올바른지 확인
매개변수 a_, adiff;
a_(i,j) = sum(n, L(i,n)*L(j,n));
adiff(i,j) = round(a(i,j) - a_(i,j),1e-6);
옵션 adiff:8:0:1;
중단$카드(adiff) adiff;
옵션 클리어=L;
ExecuteTool.checkErrorLevel 'linalg.cholesky i a L';
* Cholesky 인수분해가 올바른지 확인
a_(i,j) = sum(n, L(i,n)*L(j,n));
adiff(i,j) = round(a(i,j) - a_(i,j),1e-6);
옵션 adiff:8:0:1;
중단$카드(adiff) adiff;
*
* A의 아래쪽 삼각형 부분만 사용됨
*
테이블 a2(i,j) '원래 행렬'
i1 i2 i3 i4 i5
i1 64
나는2 48 72
i3 24 42 89
i4 8 54 107 210
i5 8 36 95 186 187
;
매개변수 L2(i,j) '콜레스키 인자';
Execute_unload 'a.gdx', i, a2;
ExecuteTool.checkErrorLevel 'linalg.cholesky i a2 L2 -gdxin=a.gdx -gdxout=b.gdx';
Execute_load 'b.gdx', L2;
* Cholesky 인수분해가 올바른지 확인
매개변수 a2_, a2diff;
a2_(i,j) = sum(n, L2(i,n)*L2(j,n));
a2diff(i,j)$(ord(j)<=ord(i)) = round(a2(i,j) - a2_(i,j),1e-6);
옵션 a2diff:8:0:1;
중단$카드(a2diff) a2diff;
옵션 클리어=L2;
ExecuteTool.checkErrorLevel 'linalg.cholesky i a2 L2';
* Cholesky 인수분해가 올바른지 확인
a2_(i,j) = sum(n, L2(i,n)*L2(j,n));
a2diff(i,j)$(ord(j)<=ord(i)) = round(a2(i,j) - a2_(i,j),1e-6);
옵션 a2diff:8:0:1;
중단$카드(a2diff) a2diff;
*
* A의 위쪽 삼각형 부분만 사용됨
*
매개변수 a3(i,j); a3(i,j) = a2(j,i)
매개변수 L3(i,j) '콜레스키 인자';
Execute_unload 'a.gdx', i, a3;
ExecuteTool.checkErrorLevel 'linalg.cholesky i a3 L3 -gdxin=a.gdx -gdxout=b.gdx';
Execute_load 'b.gdx', L3;
* Cholesky 인수분해가 올바른지 확인
매개변수 a3_, a3diff;
a3_(i,j) = 합계(n, L3(n,i)*L3(n,j));
a3diff(i,j)$(ord(j)>=ord(i)) = round(a3(i,j) - a3_(i,j),1e-6);
옵션 a3diff:8:0:1;
중단$카드(a3diff) a3,a3_,a3diff;
옵션 클리어=L3;
ExecuteTool.checkErrorLevel 'linalg.cholesky i a3 L3';
* Cholesky 인수분해가 올바른지 확인
a3_(i,j) = 합계(n, L3(n,i)*L3(n,j));
a3diff(i,j)$(ord(j)>=ord(i)) = round(a3(i,j) - a3_(i,j),1e-6);
옵션 a3diff:8:0:1;
중단$카드(a3diff) a3diff;