2015년 7월 18일 토요일

싸이랩(scialb)의 다항식

다항식 생성

 Scilab에서 다항식을 생성하는 함수는 poly() 이다. 예를 들면

>> f = poly( [1 2 3], 'x', 'c') // ‘coeff’
f  =
              2  
   1 + 2x + 3x  
>> g = poly( [1 2 3], 't', 'r') // ‘roots’
g  =
               2   3  
 - 6 + 11t - 6t + t  

위의 예에서 보듯이 poly()함수의 첫 번째 인자는 행벡터이고 두 번째 인자는 다항식 표기에 쓰이는 기호이고 세 번째 인자는 벡터의 요소가 계수(coefficients)인가 근(roots)인가를 지정하는 문자열이다. 세 번째 인자의 기본값은 ‘r’ 이므로 생략하면 이것으로 자동으로 지정된다.

다항식의 기호식(symbolic) 연산

 Scilab에서 특이한 것은 다항식으로 한 번 정의되면 그 변수는 일종의 기호식(symbolic equation)같이 취급되어 기호식 연산을 할 수 있다는 것이다. (아마 기본 연산자가 다르게 동작하도록  오버로딩 되어있는 듯하다.) 예를 들어서

>> s = poly([1 -1],'x','c') // 변수 s는 기호식으로 취급됨
s  =
   1 - x  

>> f = s^3
f  =
              2   3  
   1 - 3x + 3x - x  
>> g = 1+s+s^2
g  =
             2  
   3 - 3x + x  

>> h = g/f
h  =
               2    
     3 - 3x + x      
   ----------------------    
              2   3  
   1 - 3x + 3x - x  

위의 예에서 보듯이 s=x-1 이라는 다항식으로 s가 정의된 이후에는 사칙연산이 다항식에 대한 것으로 바뀌어서 적용이 된다. 변수 h 는 분수식으로 정의되었다.

 단순하게 x를 기호로 설정하려면 다음과 같이 하면 된다.

>> x = poly(0,’x’)

이후에는 변수 x는 다른 객체로 재설정 하지 않는다면 기호로 취급된다. 예를 들어서 분수식 x.(x2+x+1) 를 입력하고 싶다면 그대로 입력하면 된다.

>> k = x/(x^2+x+1)
k  =
        x      
   ---------  
            2  
   1 + x + x  

이렇게 정의된 k 역시 기호식으로 취급된다.

 Scilab의 내부 변수 중에 %s와 %z (소문자이다)가 있는데 이것은 이미 기호식으로 미리 정의가 되어 있는 것이다. 즉 %s=poly(0,’s’), %z=poly(0,’z’) 와 같이 미리 정의 되어 있는 기호이다. Scilab자체가 제어 이론의 구현에서 출발했으므로 전달함수를 표기하는 두 변수 s (연속치 계통의 경우) 와 z (이산치 계통의 경우)를 미리 기호식으로 사용할 수 있도록 설정해 놓은 것으로 짐작된다. 이 두 기호 이외의 다른 기호를 사용하려면 일일이 poly()함수를 사용하여 지정해 주어야 한다.

다항식과 분수식에 관련된 함수들

 다음 표에 다항식과 분수식에 관련된 중요한 함수들과 그 기능을 정리하였다.

[표 1] 다항식 관련 함수들
함수명
기능
roots
다항식의 해를 구한다.
factors
다항식을 인수분해한다.
simp
분수식에 공통분모가 있다면 약분한다.
simp_mode(%t)
simp_mode(%f)
분수식을 자동으로 약분한다.
분수식을 자동으로 약분하지 않는다.
pfss
분수식을 부분 분수 전개한다.
inv
역행렬 계산
det
행렬식 계산

예를 들어서 다항식 s3-1 을  인수분해하려면 다음과 같이 하면 된다.

>> factors(%s^3-1)
  ans  =
    ans(1)
           2  
  1 + s + s  
   ans(2)
   - 1 + s

또한 [1/z 1 1; 1 1 z; 1 z 1] 이라는 3x3행렬의 역행렬을 구하려면 다음과 같이 하면 된다.

       >>inv([1/%z 1 1; 1 1 %z; 1 %z 1])
          ans  =
                  2                      
           - z - z       z         z    
             -----     -----     -----  
           - 1 + z   - 1 + z   - 1 + z  
                              
               z       - 1       0      
             -----     -----     -      
           - 1 + z   - 1 + z     1      
                              
               z       0         - 1    
             -----     -         -----  
           - 1 + z     1       - 1 + z

부분분수 전개는 pfss 함수이다. 예를 들어서 분수식 3/(s3-1)을 부분분수전개하려면 다음과 같이 하면 된다.

         >>pfss(3/(%s^3-1))
          ans  =
                 ans(1)
              - 2 - s    
             ---------  
                      2  
             1 + s + s  
       ans(2)
                1    
             -----  
           - 1 + s   


댓글 없음:

댓글 쓰기