A=matrix(c(1,2,3,4,5,6,7,8,1),3);A
det(A); dim(A); min(dim(A))
A1=solve(A)
round(A%*,4)
#pivot1 : 한 행에 실수배
p1=function(AA,ii,aa){
AA[ii,]=aa*AA[ii,]
return(AA)
}
p1(A,2,10)
#pivot2
p2=function(AA,ii1,ii2) {
tmptmp=AA[ii1,]
AA[ii1,]=AA[ii2,]
AA[ii2,]=tmptmp
return(AA)
}
p2(A,3,1)
#pivot3
p3=function(AA,aa,ii1,ii2) {
AA[ii2,]=aa*AA[ii1,]+AA[ii2,]
return(AA)
}
p3(A,-2,1,2)
#######################################
gg=function(AAA){
ll=1:(dim(AAA)[1])
flag=0
for(ii in 1:(min(dim(AAA)))){
aaa=AAA[ii-flag,ii]
if(round(aaa,8)==0){
ii3=ll[abs(round(AAA[,ii],8))>0 & ll>ii-flag]
if(length(ii3)!=0){
AAA=p2(AAA,ii-flag,max(ii3))
# print(paste("if.",ii,", flag=",flag))</div><div style="margin: 0px; padding: 0px; color: rgb(64, 64, 64); font-family: gulim, sans-serif; font-size: 13px; line-height: 22.1px;"># print(AAA)
aaa=AAA[ii-flag,ii]
AAA=p1(AAA,ii-flag,1/aaa)
# print(paste("for.",ii))
# print(AAA)
for(ii2 in (ii-flag+1):(dim(AAA)[1])){
aaa=-AAA[ii2,ii]
AAA=p3(AAA,aaa,ii-flag,ii2)
# print(paste("for.",ii,"-",ii2))
# print(AAA)
}
}else{
flag=flag+1
}
}else{
AAA=p1(AAA,ii-flag,1/aaa)
# print(paste("for.",ii))
# print(AAA)
if((ii-flag)!=min(dim(AAA))){
for(ii2 in (ii-flag+1):(dim(AAA)[1])){
aaa=-AAA[ii2,ii]
AAA=p3(AAA,aaa,ii-flag,ii2)
# print(paste("for.",ii,"-",ii2))
# print(AAA)
}
}
}
}
return(AAA)
}
#######################################
위와 같은 행렬을 입력하면 역삼각행렬을 출력하는 gg() 함수를 만들었는데요.
gg(A)=A* 라고 명명한다면
B** = A* x A의역행렬 이라 할때
B** 를 구하는 함수를 만들고 싶습니다.
어떻게 해야 좋을까요
댓글 0