설명
이 예는 루프 및 동적 정의의 사용을 보여줍니다. Gaussian Elimination을 사용한 기본 변환의 집합 전체 피벗 선택.
소형 모델 유형 :슬롯 나라
카테고리 : 슬롯 나라 모델 라이브러리
메인 파일 : gauss.gms
$title 완전 피벗을 사용한 행렬 반전(GAUSS,SEQ=71)
$onText
이 예에서는 루프 및 동적 정의의 사용을 보여줍니다.
Gaussian Elimination을 사용한 기본 변환의 집합
전체 피벗 선택.
슬롯 나라 Development Corporation, 공식화 및 언어 예제.
키워드: 행렬 반전, 가우스 제거, 전체 피벗팅
$offText
세트
i '행 레이블' / 행-1 * 행-3 /
j '열 레이블' / col-1 * col-3 /;
별칭 (i,ip), (j,jp);
테이블 a(i,j) '원래 행렬'
열-1 열-2 열-3
행-1 1 2 3
행-2 1 3 4
행-3 1 4 3;
매개변수
b(j,i) 'a의 역수'
bp(i,j) 'a의 역순열 및 전치'
pair(i,j) '피벗 시퀀스 및 순열'
순위 '행렬 a의 순위'
adet '행렬 a의 행렬식의 절대값'
피브
큰
톨;
세트
r(i) '피벗 행 후보'
npr(i) '비 피벗 행'
s(j) '피벗 열 후보'
nps(j) '비 피벗 열';
r(i) = 그렇습니다;
s(j) = 그렇습니다;
bp(i,j) = a(i,j);
순위 = 0;
아데트 = 1;
톨 = 1e-5;
루프(j,
big = smax((r,s), abs(bp(r,s)));
big$(큰 < 톨) = 0;
npr(i) = 예;
nps(jp) = 예;
루프((r,s)$(큰 및 큰 = abs(bp(r,s))),
순위 = 순위 + 1;
쌍(r,s) = 순위;
piv = 1/bp(r,s);
큰 = 0;
adet = adet/piv;
npr(r) = 아니오;
nps(들) = 아니요;
bp(r,nps) = bp(r,nps)*piv;
bp(npr,nps) = bp(npr,nps) - bp(r,nps)*bp(npr,s);
bp(npr,s) = -bp(npr,s)*piv;
bp(r, s) = piv;
);
r(r) = npr(r);
s(들) = nps(들);
);
b(j,i) = sum((ip,jp)$(pair(i,jp) 및 pair(ip,j)), bp(ip,jp));
adet = 절대(adet);
a, 순위, adet, 쌍, bp, b를 표시합니다.
매개변수
ir(i,ip) 'a 곱하기 b'
ic(j,jp) 'b 곱하기 a';
ir(i,ip) = sum(j, a(i,j)*b(j,ip));
ic(j,jp) = 합계(i, b(j,i)*a(i,jp));
ir, ic를 표시합니다.