프로그램을 작성하다 보면 빈행렬(empty matrix)을 생성할 필요가 가끔씩 생긴다. 즉, 요소가 없는 0x0크기의 빈행렬를 생성하려면 다음과 같이 하면 된다.
>> A = [] |
만약 행렬 A가 이전에 어떤 요소들을 가지고 있었다면 빈행렬을 대입하는 순간 그것들은 지워지고 그 요소를 저장하기 위해 할당되었던 메모리는 반환된다.
특수한 행렬을 생성하는 기본적인 함수들은 다음 표와 같다.
[표 1] 특수 행렬을 생성하는 함수들
eye(), eye(r, c), eye(M) | 주대각 요소가 1인 행렬을 생성한다. |
zeros(), zeros(r, c), zeros(M) | 모든 요소가 0인 행렬 생성 |
ones(), ones(r, c), ones(M) | 모든 요소가 1인 행렬 생성 |
linspace(c1, c2 [, n]) | c1부터 c2까지 n개의 등간격 행벡터 생성. (n이 생략되면 기본적으로 100임) c1, c2 : 복소수 가능 |
testmatrix(‘magi’, n) testmatrix(‘frk’, n) testmatrix(‘hilb’, n) | nxn 매직행렬 생성 nxn Franck행렬 생성 nxn Hilbert행렬의 역행렬 생성 |
rand(“seed”), rand(“seed”, s) rand(r, c [ , strKey] ) rand(M [ , strKey] ) | seed값을 얻거나 설정한다. (초기에 s=0임) r x c 크기 혹은 M행렬과 같은 크기의 난수 행렬 생성 strKey : “uniform”, “normal”, “info” |
grand | 더 다양한 옵션으로 난수행렬 생성 |
eye(M)은 M행렬과 같은 차수이고 주대각 요소가 1인 행렬을 생성하며 행렬M이 꼭 정방행렬일 필요는 없다. 주의할 점은 eye(10)이라고 입력하면 10x10 행렬이 생성되는 것이 아니라 1x1행렬이 생성된다는 것이다. (10이라는 숫자가 1x1행렬이기 때문) 그리고 덧셈과 뺄셈에서 사용될 때는 더해지는 행렬과 자동으로 같은 차수의 행렬을 생성한다. ones()와 zeros()도 같은 특성을 가진다.
linspace(c1, c2 [,n])함수는 c1부터 c2까지 등간격으로 n개의 요소를 가지를 행벡터를 생성하는 자주 사용되는 함수이다. 예를 들어서 0부터 2π 까지 100개의 요소를 가지는 행벡터를 생성헤서 vX변수에 대입하려면 다음과 같이 하면 된다.
>> vX = linspace(0, 2*%pi) |
1000개로 개수를 늘리려면 다음과 같이 한다.
>> vX = linspace(0, 2*%pi, 1000) |
한 가지 특이한 것은 c1, c2는 복소수도 가능하다는 것이다. 예를 들어서 c1=1+%i, c2=2+3*%i, n=5라면 간격을 나눌 때 실부부는 실수부끼리, 허수부는 허수부끼리 나눈다. 즉 다음 두 명령은 같은 것이다.
>> linspace(1+%i, 2+3*%i, 5)>> linspace(1, 2, 5) + linspace(1, 3, 5)*%i |
후자 보다는 전자가 더 간단하므로 이것을 사용하면 된다
.
함수 rand()는 난수행렬을 생성시킨다. 이때 균일분포/정규분포를 strKey로 지정할 수 있다.
위 예제에서 histplot()은 히스토그램을 그리는 함수이다.
'프로그래밍언어.Lib > Scilab' 카테고리의 다른 글
싸이랩(scialb)의 문자열 조작 (0) | 2015.06.17 |
---|---|
싸이랩(scialb)의 문자열(string)과 관련 함수 (0) | 2015.06.17 |
싸이랩(scialb)의 행렬 연산 (0) | 2015.06.17 |
싸이랩(scialb)에서 행렬의 인덱싱(indexing) (0) | 2015.06.17 |
싸이랩(scialb)에서 행렬의 생성과 콜론(:) 연산자 (0) | 2015.06.17 |