Wednesday, September 14, 2011

Matlab Tip #1(test)

case 1
    disp('1');
case 2
    disp('2');
otherwise
    disp('other');

 

*** 복소수 전치
a=[1+i, 2+2i; 3+3i, 4+4i]

a` = 1.0000-1.0000i  3.0000-3.0000i
      2.0000-2.0000i  4.0000-4.0000i

a.` = 1.0000+1.0000i  3.0000+3.0000i
       2.0000+2.0000i  4.0000+4.0000i

 


***데이터 저장과 불러오기
% %e, %f, %g 있음, 유효소수점 별로 신경쓰기 싫다면 g가
a=1;
b=0.3;
fprintf('print test : %f  %g\n',a,b);
%fprintf('myfile', '%g', x)

%fopen, fread, fwrite, fseek 등
A=[1 2 3; 4 5 6];
save myData.txt A -ascii  %-ascii 대신 -tabs 옵션 가능
load myData.txt
A=load('myData.txt')

 

***변수에 데이터 입력 받기
a = input('enter a value:');

 

***OS 명령어 실행하기
%명령어 앞에 ! 를 붙여 OS 명령어를 바로 실행시킬 수 있음
!dir
!time

 

***각종 함수들

%절대값
abs(x)
%올림
ceil(x)
%0을 향하여 가장 가까운 정수로 반올림
fix(x)
%내림
floor(x)
%x에 가장 가까운 정수로 반올림
round(x)
%시간과 날짜
t=clock
fprintf(' %02.0f:%02.0f:%02.0f\n', t(4), t(5), t(6) );
%벡터의 누적합
comsum(1:4)
%dd-mmm-yyyy 형태의 날짜 표시
date
%벡터 x의 원소의 개수
length(x)
%벡터x에서 가장 큰 원소, 작은 원소
max(x)
min(x)
%벡터x 원소들의 평균값
mean(x)
%2^x
pow2(x)
%벡터 x원소들의 곱
prod(x)
%0~1 사이의 랜덤한 난수
rand
%사용자 컴퓨터에서 가장 큰 양의 실수, 가장 작은 양의 실수
realmax
realmin
%x를 y로 나누었을 때의 몫, 나머지값
fix(x/y)
rem(x,y)
%x의 부호, -1,0,1이 나옴
sign(x)
%행렬 a의 행과 열의 수
size(a)
%오름차순으로 벡터x의 원소를 정렬
sort(x)
%n차 파스칼 행렬 생성
pascal(n)
%마정방 사각형 생성
magic(10)
%행렬 관련
A'  %A의 전치행렬(transpose)
det  %행렬식(determinant)
eig  %고유값
expm  %행렬 지수,  e^A
inv  %역행렬
svd  %특이치 분해
diag  %대각행렬을 생성하거나 추출
fliplr  %왼쪽에서 오른쪽으로 열을 뒤집음
flipup  %위에서 아래로 행을 뒤집음
rot90  %반시계방향으로 회전시킨다
tril  %삼각형 형태의 아래 부분을 뽑아낸다
triup  %삼각형 형태의 윗부분 뽑아낸다

 


*** 0으로 나눠지는 것 피하기, 무한대로 가는 것 피하기
x=x+(x==0)*eps;   %x=x+(~x)*eps;
y=sin(x)./x;  %x가 0일 때 문제 생김

y=tan(x);
y=y.*(abs(y) < 1e10);

 

*** 연산자 우선순위

1    ()
2    ^ .^ ' .'(pure transpose
3    +(unary plus) -(unary minus) ~(NOT)
4    * / \ .* ./ .\
5    +(addition) -(subtraction)
6    :
7    > < >= <= == ~=
8    &(AND)
9    |(OR)

 

***논리 벡터, 함수
%벡터에서 특정 원소 모두 제거하기
a=a(a>0)  %0보다 큰 원소만 남기고 모두 제거한다
%만약 x의 어떤 원소라도 0이 아니면(참이면) 스칼라 값 1(참)을 내보냄
any(x) 
%만약 x의 모든 원소가 0이 아니면 스칼라 값 1(참)을 내보낸다
all(x) 
%a가 작업공간 상의 변수 명이라면 1을 내보냄
exist('a') 
%벡터 x의 0이 아닌 원소의 첨자를 포함하는 벡터로 돌려줌
find(x) 
a=a(find(a))  %a에서 0인 원소를 모두 제거
find(x>=max(x))  %가장 큰 원소가 하나 이상일 때 그 첨자를 찾는다
%x가 빈 배열(0x0 크기)이면 1, 아니면 0
isempty(x)
%x의 원소가 +Inf, -Inf가 있으면 1, 아니면 0
isinf(x)
%x의 원소 중에서 NaN이 있으면 1, 아니면 0
isnan(x)
x(isnan(x))=[]  %x에서 NaN 제거하기

 

*** menu, GUI
k=0;

while k~=3
    k=menu('click on your option', 'do this', 'do that', 'quit');
    if k==1
        disp('do this...press any key')
        pause
    elseif k==2
        disp('do that... press any key')
        pause
    end
end;

 

*** 보간법 (interpolation)
%interp1은 2차원 데이터의 1차원 보간을, interp2는 3차원 데이터의 2차원 보간을 수행
interp1(x,y,x_new)
interp1(x,y,x_new,'linear')
interp1(x,y,x_new,'spline')

polyfit(x,y,n)

No comments:

Post a Comment