본문 바로가기

MATLAB

MATLAB 기본

1.2.2.3 배열의 연산 및 조작
여기에서 주의할 것은 벡터 x에 대한 수식 값을 계산하기 위해서는 수식f(x)가 배열 연산으로 정의되어야 된다는 점이다.
  예를 들어서 y=x³-3x²-0.2x 의 경우에 X가 x=[0  0.1  ...  0.9   1]로 이루어진 1×11 의 행 벡터라고 하고 모든 x의 요소에 대해 y 값을 계산해보자.
  먼저 x를 콜론을 사용하여 1×11의 행 벡터로 만든다.
     >> x=0:0.1:1;
  다음으로 y의 수식을 입력한다. 
     >> y=x^3-3*x^2-0.2*x;
     ??? Error using ==>^
     Matrix must bo square.

  계산이 되지않고 오류가 발생하였다. 그 이유는 입력 데이터인 x가 벡터이기 때문이다. 즉, x^3을 계산하는데 x가 벡터이기 때문에 오류가 발생하므로 x^3을 배열 연산을 사용한 x.^3으로 바꾸면 x 벡터의 요소에 따라 x^3을 계산해 주므로 x의 각 요소에 해당하는 y 값을 계산할 수 있다. 물론 x^2의 경우도 마찬가지이다.
                                        y=x.^3=[0³   0.1³   ...   0.9³   1³]
  따라서 수식 y를 배열 연산을 사용하여 다음과 같이 바꾸면 오류없이 y를 계산 할 수 있다.
    >>y=x.^3-3*x.^2-0.2*x;   

p.100
8.기본적인 수학 함수 및 삼각 함수, 쌍곡선 함수
                 -기본적인 수학함수-
    abs(x)     x의 절대값을 계산한다.
    sqrt(x)     x의 근호값을 계산한다.
    round(x)  x를 가까운 정수로 반올림하여 반환한다.
    fix(x)       x를 0쪽으로 가까운 정수로 반올림하여 반환한다.
    floor(x)    x를 -∞쪽으로 가까운 정수로 반올림하여 반환한다.
    ceil(x)     x를 ∞쪽으로 가까운 정수로 반올림하여 반환한다.
    sign(x)    x가 0보다 적으면 -1, 0과 같으면 0, 
    rem(x,y)   x/y의 나머지를 계산한다.
    exp(x)     exponential(x)를 계산한다

p.109
1.3.2.1  2차원 그래픽을 그리는 절차
(5)  축의 한계값, Grid line등을 설정한다
  MATLAB에서 축의 한계 값은 그래프에 그릴 데이터의 크기에 맞도록 자동으로 조정된다. 만약 자동으로 설정된 축의 한계값을 바꾸고 싶을때는 axis를 사용한다. 또한 그래픽 객체에 격자(grid)를 그리거나 지우고 싶으면 grid on/off를 사용한다.
    >>axis([1,5,-0.5,0])
    >>grid on

p.128 
1.3.2.5 축의 한계값 및 축의 Tick Mark의 조정
  축의 최대·최소값은 기본적으로 데이터의 최대·최소값에 따른다. 이러한 축의 범위를 바꾸고 싶으면 axis를 사용하면 된다.
                       axis(v)
  v는 v=[x축의 최소값, x축의 최대값, y축의 최소값, y축의 최대값]의 행 벡터이다.

 p.251 
1.4.3 MATRAB에서 제어의 흐름
  일반적으로는 C와 MATLAB 프로그램에서 제어문이 하는 작업이나 기능은 같다고 볼 수 있다. 한가지의 차이는 C언어에서는 각 제어문이 가지는 영역을 {}을 사용하여 구분하나 MATLAB에서는  end가 사용된다는 점이다. 즉, if, while, for, switch문의 끝에는 각각의 end가 반드시 사용되어 그 제어문의 끝임을 명시해 주어야만 된다.

p.266-267
1.4.3.4 for문과 콜론을 사용한 벡터와의 관계
  두 번째 예제로 x가 1 에서 100 까지일 때 y=sin(x)exp(-0.5x)의 값을 계산하는 문제의 경우에 for문을 사용하면 다음과 같다.
    >>n=1
    >>for(x=1:0.1:10)
          y(n)=sin(x)*exp(-0.5*x);
          n=n+1;
     end
  이 경우에도 다음과 같이 콜론을 사용한 벡터를 이용하면 계산할 수 있다.
    >>x=1:0.1:10;
    >>y=sin(x).*exp(-0.5*x);
  왜, 이와같은 내용을 언급할까? 그 이유는 계산 속도 때문이다. MATLAB에서 for나 while과 같은 루프는 그 계산 속도가 상당히 느린 단점이 있다. 물론 프로그래밍 측면에서는 for나 while과 같은 루프를 사용하는 것이 지금까지의 다른 언어와 그 구조가 같으므로 coding을 하는데 더 쉽고 이해하기에도 좋지만 MATLAB을 사용해서 만들려는 여러분의 프로그램에서 계산속도가 문제가 된다면 가급적이면 for나 while과 같은 루프로 되어있는 부분을 위의 예제와 같이 콜론을 사용한 벡터로 바꿔보라고 하고싶다. 보통 for나 while과 같은 반복 루프를 사용하는 경우가 콜론을 사용한 벡터를 사용하는 경우보다 10배 이상 느리다고 알려져있다.
  만약 for나 while과 같은 루프를 콜론을 사용한 벡터로 바꾸지 못하는 경우 for나 while을 그대로 사용하되 계산 결과가 저장될 변수를 미리 초기화하여 값을 미리 할당시키는 방법을 사용한다. 
  예를 들어서 위의 y를 계산하는 예제에 있어서 최종 y의 크기는 1×91이다. 따라서 미리 크기가 1×91이고 값이 모두 0인 y를 for문 앞에서 만들어 놓는다. 
    >>n=1;
    >>y=zeros(1,91);         %y를 크기가 1×91로 설정
    >>for(x=1:0.1:1.0)
          y(n)=sin(x)*exp(-0.5*x);
          n=n+1
     end

p.275
1.4.4.2 함수로써의 M-file의 사용
  먼저 n개의 입력(input1. input2,...., input n)을 받아서 m개의 출력(output1, output2, ...., output m)을 보내는 함수의 경우에는 M-file의 시작부분이 다음과 같은 형태의 함수 선언으로 시작되어야 한다.
   function[output1, output2, ...., output m] = function name(input1. input2,...., input n)

p.279
  Tip - M -file의 함수 명 (function name)
  M-file을 함수로 사용하는 경우에는 M-file의 함수명과 M-file의 파일 이름이 꼭 같을 필요는 없다.(그러나 MATLAB 4.2 버전까지는 같아야 했음) 그 이유는 Workspace에서 실행되는 M-file의 이름은 함수명이 아니라 M-file의 파일이름이기 때문이다.
  예를 들어서 함수가 function y=f1(x)이고 이 함수가 저장된 M-file의 파일명이 func1.m이라고 하자. 이 M-file을 실행하기 위해서는 Workspace에서 함수의 이름인 f1이 아닌 M-file의 파일이름인 func1을 입력해야 된다. 그러나 함수의 이름과 M-file의 파일 이름은 서로 같게 하는것이 M-file을 유지하고 관리하는데 편리하기 때문에 가급적이면 함수 명과 파일 명을 같게 하도록 하자.

츨처 : http://hyostory.tistory.com/24