다항식 생성
Scilab에서 다항식을 생성하는 함수는 poly() 이다. 예를 들면
>> f = poly( [1 2 3], 'x', 'c') // ‘coeff’f =21 + 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^3f =2 31 - 3x + 3x - x>> g = 1+s+s^2g =23 - 3x + x>> h = g/fh =23 - 3x + x----------------------2 31 - 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---------21 + 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)21 + s + sans(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 + zz - 1 0----- ----- -- 1 + z - 1 + z 1z 0 - 1----- - ------ 1 + z 1 - 1 + z |
부분분수 전개는 pfss 함수이다. 예를 들어서 분수식 3/(s3-1)을 부분분수전개하려면 다음과 같이 하면 된다.
>>pfss(3/(%s^3-1))ans =ans(1)- 2 - s---------21 + s + sans(2)1------ 1 + s |
'프로그래밍언어.Lib > Scilab' 카테고리의 다른 글
싸이랩(scialb)의 for 반복문 (0) | 2015.07.20 |
---|---|
싸이랩(scialb)의 조건 검사 if ~ elseif ~ else ~ end (0) | 2015.07.18 |
싸이랩(scialb)의 tlist 와 mlist (0) | 2015.07.18 |
싸이랩(scialb)의 튜플(tuple) (0) | 2015.06.19 |
싸이랩(scialb)의 구조체(struct) (0) | 2015.06.19 |