반응형

http://blog.naver.com/potheymd/50149714027

매트랩 기초 2.3 - 벡터화 (vectorization)

for문은 쉽게 구현할 수 있고 이해하기도 쉽다는 장점이 있지만, 매트렙에서 특정한 작업을 반복하는 데 있어 효율적인 방법은 아니다.

매트랩은 행렬을 대상으로 직접 연산이 가능하기 때문에 벡터화가 훨씬 더 효율적이다.

예를 들어 다음 프로그램을 살펴보자.

j=0;

>> for t = 0: 0.01:40

j=j+1;

y(j)= cos(t);

end

이 프로그램은 4001개의 t값을 생성하고 각 t의 cosine 값을 y벡터에 저장한다.

이 과정을 다음과 같이 벡터화 프로그램으로 변환할 수 있다.

t= 0:0.01:40;

y=cos(t);

벡터화 프로그래밍으로 생성한 y 벡터는 위에서 작성한 일반 프로그래밍 기법보다 효율성이 우수하고 처리 속도도 빠르다.

매트랩 프로그램은 가능한 경우 벡터화를 하는 것이 좋다.



매트랩 기초 2.3 - 메모리할당

매트랩은 배열에 새로운 원소를 할당할 때마다, 배열의 크기를 자동적으로 늘리도록 설계되어있다.

이러한 이유 때문에 만약 루프구조에서 매번 배열의 원소를 하나씩 늘려간다면, 상당한 시간이 소요된다.

예를 들어 다음과 같은 프로그램을 살펴보자.

>> t=0:0.01:5;

for j=1:length(t)

if t(j)>1

y(j)=1/t(j);

else

y(j)=1;

end

end

이 경우 매트랩은 배열 y의 크기는 새로운 값이 대입될 때 마다 바뀌게 된다.

배열의 크기가 매번 변경되면서 메모리 크기도 같이 조정되어야 하므로 당연히 비효율적인 프로그램이 된다.

이런 비효율성을 피하기 위해 아래와 같이 미리 사용하고자 하는 배열의 크기를 정해, 루프가 반복되더라도 메모리 크기가 변하지 않게 해야한다.

>> t=0:0.01:5;

y=ones(length(t),1);

for j=1:length(t)

if t(j)>1

y(j)=1/t(j);

else

y(j)=1;

end

end

반응형

+ Recent posts