레이블이 매트랩인 게시물을 표시합니다. 모든 게시물 표시
레이블이 매트랩인 게시물을 표시합니다. 모든 게시물 표시

2010년 5월 22일 토요일

[Matlab] 메트릭스 역순으로 바꾸기

한 메트릭스를 역순으로 바꾸는데는 2가지 방법이 있다, 세로 역순과 가로 역순이다.
이 두가지에 대해서 각각 함수가 존제한다.

1.세로 역순
a = flipud(b);

예를 들어서 b = [1,2,3;2,7,6]이라면 a는 [2,7,6;1,2,3]이 된다. 말그대로 세로 역순이 된다.


2.가로 역순
a = fliplr(b);
예를 들어서 b = [1,2,3;2,7,6]이라면 a는 [3,2,1;6,7,2]가 된다. 말그대로 가로 역순이 된다.




2010년 4월 3일 토요일

[Matlab] - 소수를 정수로 바꾸기!

Matlab에서는 '소수 -> 정수' 로 바꾸는데는 네가지 명령어가 쓰인다.


1. n = ceil(x)
  소수점 뒤에 숫자를 무조건 올린다.
  예:
      ceil(3.9) = 4
      ceil(1.4) = 2
      ceil(2.001) = 3
      ceil(-3.9) = -3
      ceil(-3.1) = -3
   

2. n = floor(x)
    소수점 뒤에 숫자를 무조건 내린다.
    예:
        floor(3.8) = 3
        floor(3.01) = 3
        floor(4.9999) = 4
        floor(-1.2) = -2
        floor(-2.9) = -3

3. n = fix(x)
     x위아래 정수중에서 0에 가까운 정수를 택한다
     예
         fix(3.3) = 3
         fix(4.99) = 4
         fix(-1.2) = -1
         fix(-8.999) = -8

4. n = round(x)
     반올림을 한다
     예:
          round(3.5) = 4
          round(9.1) = 9
          round(-1.1) = -1
          round(-2.6) = -3

2010년 2월 19일 금요일

[Matlab] - 매트랩 랜덤함수

매트랩은 랜덤함수가 많은 편인대... help를 쳐봐도 머가먼지 알수가...

그래서 쓸때마다 하나하나 정리를ㅋㅋㅋ 앞으로는 내 블로그를 보면 어떤 랜덤함수를 쓰면 좋을지 알수가ㅋㅋㅋ


1. rand(m,n)

우선 rand(m,n)제일 간단한거

만들어지는 랜덤수의 범위는 [0,1]이고 m*n개만큼 만든다

랜덤수는 평균분포(Uniformly Distributed)에 의해서 만들어진다( X ~ U(0,1) )

즉 rand(3,4)를 실행하면 랜덤수 12개를 만든다.

하나 만들구 싶으면 rand(1,1)실행하면 되구ㅋㅋㅋ

 


2.randn(m,n)

mean = 0, variation은 1인 normal distribution 을 따르는 랜덤수를 뽑는다. 즉 X~N(0,1),그렇다 정규분포다!

그럼 X~N(mean, "standard deviation"^2) 은 어떻게 구할까?

그냥 x = mean + "standard deviation" * randn(m,n);

이렇게 구하면 된다



3.randperm(k)

이 함수는 1~k까지의 정수를 랜덤하게 배열해준다

만약에 1~k중에 임의m게의 숫자를 중복되지 않게 뽑고 싶다면 randperm(k)를 하고 그 결과의 1에서 m까지 값을 쓰면 된다.

2010년 2월 5일 금요일

[Matlab] - 각종 Matrix 만들기

이번 글에서는 매트랩에서 함수로 만들수 있는 각종 Matrix에대해서 소개하려 합니다.

1.  A = zeros(n,m)
    말 그대로 모든 element가 0인 매트릭스를 만듭니다.
    참고로 A = zeros(n) 과 A = zeros(n,n)의 결과는 같습니다.


2.  A = ones(n,m)
     말 그대로 모든 element가 1인 매트릭스를 만듭니다.
     참고로 A = ones(n) 과 A = ones(n,n)의 결과는 같습니다.


3.  A = eye(n)
     이 함수는 왼쪽 위부터 오른쪽 밑까지만 1이고 나머지는 다 0인 n*n Matrix를 만들어 줍니다.
     즉 A = eye(3) 의 결과는
     A = 1 0 0
           0 1 0
           0 0 1
     이 되는거죠.



오늘은 여기까지 하고 나중에 더 소개해보도록 하겠습니다.~^^

[Matlab] - 다항식 계산 함수들

우선 설명해야 하는건:
매트랩에서 다항식(1차)을 표시할때는 계수만 표시함으로서 끝낼수 있는데
얘를 들어서 p = [1,7,9,8,3]; 이라면 p가 표시하고 있는 다항식은
y = f(x) = 1*x^4 + 7*x^3 + 9*x^2 + 8*x^1 + 3;
이 된다.

그럼 이걸 이해한다 하고 뒤의 함수들을 설명하겠다.


1.    y = ployval(p,x);
       말그대로 y = f(x)를 구한다. 얘를 들어 p = [1,3,10]이고 x=3일때 y = polyval(p,x)를 실행시킨다면
       y = 1*3^2 + 3*3^1 + 10 = 28
       이 된다.


2.    y = roots(p);
       이 함수는 방정식 y = f(x) = 0 의 근을 구한다. 근이 여러게 있으면 모든근을 다 구하고(솔직히 모든 근          을 다 구할수 있다고 생각하지는 않지만...이걸로 모든근을 다 구할수 있으면 어떤방정식이든 다 풀수          있다는 얘기인데...상식적으로 모든 방정식을 다 푼다는건 불가능한 얘기 아닌가!) 복소수 근이 있다면          복소수근도 구한다.


3.    poly2str(p,'x');
        말 그대로 다항식 p를 써준다. 얘를 들어 p = [1,3,10]이고 poly2str(p,'x')를 실행시키면
        x^2 + 3 x + 10
        가 나온다.


4.     q = polyder(p);
         다항식 미분함수이다. 당연히 결과도 하나의 다항식이어야 한다. 얘를 들어 p = [1,3,10]이고 이 식을 미분한다면(즉 q = polyder(p) 를 실행한다면)
         q = [2,3]
         이 나온다. (당연히 1*x^2 + 3*x + 10 을 미분하면 2*x + 3 이 나온다)








2009년 11월 23일 월요일

[Matlab] - 매트릭스 괄호의 사용법

오늘은 매트랩에서 매트릭스 연산에서의 괄호의 사용법을 간단히 소개해볼까한다.
쓰이는 괄호는 () 과 [] 가 있다.

우선 ():
a(3) 은 a매트릭스의 3번째 숫자를 뜻한다.
즉 만약 a = [3,5,6,8,9]이면 a(3) = 6이다.

그럼 a(i,j)가 i번째 행 j번째 열에있는 숫자를 뜻하는것.


다음은 []:
우선 a[1,3]이런식은 존재하지 않는다.[]라는 괄호자체가 매트릭스를 뜻하기 때문이다.
[1,3,4;4,5,6]머 이런게 그냥 매트릭스다.
,는 같은 행에 있는 숫자 사이에 쓰고 ;는 열을 나누어줄때 쓴다.


그리고 애석하게도 {}는 매트릭스 연산에서는 쓰이지 않는다.

2009년 9월 28일 월요일

[Matlab] - 이진수 함수

머 그냥 인터넷에서 찾으면 쉽게 찾을수 있지만...

메트랩에서 10진수를 2진수로 바꾸려면
b = dec2bin(d)
를 쓰면 되고 반대로 하려면
d = bin2dec(b)
이렇게 하면 된다.

이렇게 해서 얻어낸 b는 string이다(아마 아스키 코드였던거 같다)
즉 b(1) = '0' 이면
t = b(1) + 1 - 1
이라는 명령을 실행하면
t = 48
이라고 나온다.(결국엔 C랑 별반 다를게 없었군...)

그리고 쓰기 불편한게...b(1)은 첫번쩨 자리가 아니라 제일 높은 자리이다. 제일 낮은 자리는 string b의 제일 마지막에 있다....(제기랄) 그럼 제일 마지막 자리는 어떻게 찾아야 할까?
b(numel(b))
가 제일 마지막 자리다.
numel(b)
가 b의 자릿수를 구하는 함수인것이다.

그럼 이정도만 알면 2진수는 문제 없겠지?ㅋ

[Matlab] - 오류 Subscript indices must either be real positive integers or logicals 해결방법

오늘 매트랩으로 프로그래밍 하다가

Subscript indices must either be real positive integers or logicals

라는 오류가 떴다...

 

어떻게 해도 해결이 안되는...

 

구글형님께 물어보니....

이 오류는 매트릭스 처리할때 m(i,j)에서 i나 j가 1이상의 숫자가 아닌경우에 생긴다고 한다.

그니까 m(0,0)을 치면 이 오류가 뜨게 되는거!

 

근대 난 이 경우가 아니었는대...

알고보니까 나는 zeros(m) (여기서 m은 매트릭스)라는 어이없는실수를 범하고 말았다...ㅡㅡ;;;;

 

근대 원래 이런 실수를 하면

Size vector must be a row vector with real elements.

이 애러가 떠야하는건대... 여러 함수들을 걸쳐쓰는 바람에 다른 이상한 애러 매시지가 뜬거 같다...음...

 

해결방법은 좀 귀찮아도

zeros(size(m,1),size(m,2)로 쓰는거!ㅋㅋ

 

역시...매트랩도 아주 완전하지는 못한건가...

 

앞으론 이런실수는 절대! 하지 말아야지ㅋ