7.3 선형연립방정식. Gauss 소거법

71 days 전, namy0727 작성

7.3 선형연립방정식. Gauss 소거법

 

예제 1 기하학적 해석, 해의 존재성과 유일성

$x$, $y$를 미지수로 갖는 두 개의 방정식

(a) 유일한 해를 갖는 경우

x,y = var('x,y') eq1 = x + y == 1 eq2 = 2*x - y == 0 r=solve([eq1,eq2],x,y ) show(eq1) show(eq2) show(r) 
       


경우 (a)의 그림

x,y = var('x,y') L1(x,y) = x + y - 1 P1=implicit_plot(L1, (-1/2,2), (-1/2,2),color='red', axes=true, plot_points=500) L2(x,y) = 2*x - y P2=implicit_plot(L2, (-1/2,2), (-1/2,2), axes=true, plot_points=500) P1+P2 
       

(b) 무한히 많은 해를 갖는 경우

x,y = var('x,y') eq1 = x + y == 1 eq2 = 2*x + 2*y == 2 r=solve([eq1,eq2],x,y ) show(eq1) show(eq2) show(r) 
       


경우 (b)의 그림

x,y = var('x,y') L1(x,y) = x + y - 1 P1=implicit_plot(L1, (-1/2,2), (-1/2,2),color='red', axes=true, plot_points=500) L2(x,y) = 2*x + 2*y - 2 P2=implicit_plot(L2, (-1/2,2), (-1/2,2), axes=true, plot_points=500) P1+P2 
       

(c) 해가 없는 경우

x,y = var('x,y') eq1 = x + y == 1 eq2 = x + y == 0 r=solve([eq1,eq2],x,y ) show(eq1) show(eq2) show(r) 
       


경우 (c)의 그림

x,y = var('x,y') L1(x,y) = x + y - 1 P1=implicit_plot(L1, (-1/2,2), (-1/2,2),color='red', axes=true, plot_points=500) L2(x,y) = x + y P2=implicit_plot(L2, (-1/2,2), (-1/2,2), axes=true, plot_points=500) P1+P2 
       

예제 2 Gauss 소거법

선형연립방정식

x,y,z = var('x,y,z') eq1 = x - y + z == 0 eq2 = -x + y - z == 0 eq3 = 10*y + 25*z == 90 eq4 = 20*x + 10*y == 80 show(eq1) show(eq2) show(eq3) show(eq4) r=solve([eq1,eq2,eq3,eq4],x,y,z) show(r) 
       




Gauss 소거법에 의한 해

0단계. 첨가행렬 만들기

A= matrix([[1,-1,1],[-1,1,-1],[0,10,25],[20,10,0]]) b=vector([0,0,90,80]) Ab=A.augment(b) #Augmented matrix print "[A:b] = " show(Ab) 
       
[A:b] = 
[A:b] = 

1단계. 첫 번째 행의 주축 아래를 $0$으로 만든다.

$$R_2 + R_1$$

$$ R_4 + (-20)R_1$$ 

Ab.add_multiple_of_row(1,0,1) Ab.add_multiple_of_row(3,0,-20) show(Ab) 
       

계산의 편의를 위해 2행과 3행, 3행과 4행의 순서를 교환한다.

$$ R_2 \leftrightarrow R_3$$

$$ R_3 \leftrightarrow R_4$$

Ab.swap_rows(1,2) Ab.swap_rows(2,3) show(Ab) 
       

2단계. 두 번째 행의 주축 아래를 $0$으로 만든다.

$$ R_3 + (-3)R_2$$ 

Ab.add_multiple_of_row(2,1,-3) show(Ab) 
       

후치환. 위삼각행렬 형태(행사다리꼴)가 되면 방정식으로 돌아가서 마지막 방정식에서 첫 번째 방정식까지 아래로부터 계산한다.

R=Ab[0:3,0:3] print "R=" show(R) c=Ab[0:3,3] print "c=" show(c) x=R.solve_right(c) print "x=" show(x) 
       
R=

c=

x=
R=

c=

x=

예제 3 해를 무한히 많이 갖는 경우에 대한 Gauss 소거법

\[\begin{array}{ccccccccc} 3.0 x_1 & + & 2.0 x_2 & + & 2.0 x_3 & - & 5.0 x_4 & = & 8.0 \\ 0.6 x_1 & + & 1.5 x_2 & + & 1.5 x_3 & - & 5.4 x_4 & = & 2.7 \\1.2 x_1 & - & 0.3 x_2 & - & 0.3 x_3 & + & 2.4 x_4 & = & 2.1 \end{array}\]


풀이) $A \mathbf{x} = \mathbf{b}$ 의 행렬식 형태로 쓴다.  그리고 첨가행렬 $[A:\mathbf{b}]$를 만든다. 

RF = RealField(10) A= matrix(RF,[[3.0,2.0,2.0,-5.0],[0.6,1.5,1.5,-5.4],[1.2,-0.3,-0.3,2.4]]) b=vector([8.0,2.7,2.1]) Ab=A.augment(b) #Augmented matrix print "[A:b] = " show(Ab) 
       
[A:b] = 
[A:b] = 

1단계. 첫 번째 행의 주축 아래를 $0$으로 만든다.

$$R_2 - 0.2 R_1$$

$$ R_3 - 0.4 R_1$$ 

Ab.add_multiple_of_row(1,0,-0.2) Ab.add_multiple_of_row(2,0,-0.4) show(Ab) 
       

2단계. 두 번째 행의 주축 아래를 $0$으로 만든다.

$$ R_3 + R_2$$ 

Ab.add_multiple_of_row(2,1,1) show(Ab) 
       

후치환. 위삼각행렬 형태(행사다리꼴)가 되면 방정식으로 돌아가서 마지막 방정식에서 첫 번째 방정식까지 아래로부터 계산한다.

R=Ab[0:3,0:4] print "R=" show(R) c=matrix(RF,3,1,[8,1.1,0]) print "c=" show(c) x=R.solve_right(c) print "x=" show(x) 
       
R=

c=

x=
R=

c=

x=

예제 4 해가 존재하지 않는 경우에 대한 Gauss 소거법

\[\begin{array}{ccccc} 3 x_1 & + & 2 x_2 & + & x_3 & = & 3 \\ 2 x_1 & + & x_2 & + & x_3 & = & 0 \\6 x_1 & + & 2 x_2 & + & 4 x_3 & = & 6 \end{array}\]

 

풀이) $A \mathbf{x} = \mathbf{b}$ 의 행렬식 형태로 쓴다.  그리고 첨가행렬 $[A:\mathbf{b}]$를 만든다. 

A= matrix(QQ,[[3,2,1],[2,1,1],[6,2,4]]) b=vector([3,0,6]) Ab=A.augment(b) #Augmented matrix print "[A:b] = " show(Ab) 
       
[A:b] = 
[A:b] = 

1단계. 첫 번째 행의 주축 아래를 $0$으로 만든다.

$$R_2 - \frac{2}{3}R_1$$

$$ R_3 -2 R_1$$ 

Ab.add_multiple_of_row(1,0,-2/3) Ab.add_multiple_of_row(2,0,-2) show(Ab) 
       

2단계. 두 번째 행의 주축 아래를 $0$으로 만든다.

$$ R_3 - 6 R_2$$ 

Ab.add_multiple_of_row(2,1,-6) show(Ab) 
       

후치환. 위삼각행렬 형태(행사다리꼴)가 되면 방정식으로 돌아가서 마지막 방정식에서 첫 번째 방정식까지 아래로부터 계산한다.

R=Ab[0:3,0:3] print "R=" show(R) c=Ab[0:3,3] print "c=" show(c) x=R.solve_right(c) print "x=" show(x) #No solution 
       
R=

c=

Traceback (click to the left of this block for traceback)
...
ValueError: matrix equation has no solutions
R=

c=

Traceback (most recent call last):    x=R.solve_right(c)
  File "", line 1, in <module>
    
  File "/tmp/tmpHqmmtt/___code___.py", line 9, in <module>
    x=R.solve_right(c)
  File "matrix2.pyx", line 358, in sage.matrix.matrix2.Matrix.solve_right (sage/matrix/matrix2.c:5361)
  File "matrix2.pyx", line 476, in sage.matrix.matrix2.Matrix._solve_right_general (sage/matrix/matrix2.c:6182)
ValueError: matrix equation has no solutions