달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
2009. 7. 2. 00:33

제약의 철학 개념2009. 7. 2. 00:33


나는 도서관에 가야 공부가 잘 되는 타입이다. 한정된 장소에 칸막이로 한정된 나의 공간. 그리고 공부하지 않고 딴짓을 하고 있기엔 부끄러운 느낌이 드는 곳. 문자보내기 눈치보이고 전화받으려면 굳이 밖으로 나가서 받아야만 하는 수많은 제약을 가진 곳이다. 일정한 제약은 본인이 집중하고 싶은 것에 집중하게 해준다.

배수의 진이라는 말을 들어 보았는가? 심지어 도망갈 곳 조차 없도록 강을 뒤로 하여 전투를 벌이는 것이다. 이러한 제약이 주어진 상황이라면 죽을 힘을 다해 싸우지 않을 수가 없을 것이다.

<절차의 힘>이라는 책에는 독창성을 위해서는 소재를 한정시키는 것이 하나의 방법이라고 하면서 한 가지 예를 보여준다. 미술 작품으로 기억하는데, 같은 집을 표현하더라도 소재를 나무 젓가락으로 한정시켜 이것으로만 집을 지어 보이는 것이다. 작품을 본다면 오히려 소재를 한정시킴으로써 독특한 느낌을 주는 것을 알 수 있다.

CS전공자로서 프로그래밍에서도 이와같은 제약이 큰 힘을 발휘하게 한다. C로 치면, 적절한 type에 대한 제약으로 인해 우리가 실수하였거나 에러가 날 우려가 있는 부분에서 적절히 경고 메세지를 뿌려줄 수 있게 하는 것이다. 제약이 오히려 안전성을 보장해 주는 것이다.

주변 환경이 내 뜻에 맞지 않는다면, 스스로에게 적절한 제약을 주어 보는 것은 어떨까?

:
Posted by Kwang-sung Jun
2009. 7. 1. 19:32

Profiler 삽질예방/Matlab2009. 7. 1. 19:32

프로파일링
profile on

for i=1:100
    out = myfunc(in);
end

profile viewer

함수 호출 횟수와 수행 시간 등을 보여준다.
테스팅에 편리할듯..
:
Posted by Kwang-sung Jun

inline 함수( 단점: 수식 안에 파라미터가 아닌 변수 값을 넣을 수 없다)
그리고 feval의 사용법.

>> il_humps = inline('1./((x-.3).^2+.01) + 1./((x-.9).^ + .04) - 6','x');
>> il_humps
il_humps =
     Inline function:
     il_humps(x) = 1./((x-.3).^2+.01) + 1./((x-.9).^ + .04) - 6

>> il_humps(1)
ans =
   -2.9035

>> y = feval('sin', pi*(0:4)/4)
y =
         0    0.7071    1.0000    0.7071    0.0000

다음은 무명함수와 함수포인터를 사용하는 예제이다.

function tmpfunc()
    clc;
   
    a = 3;
 
    % impossible
    % myfunci = inline('sin(x)+a', 'x');
   
    % 무명함수를 정의하고 그것의 포인터를 넘긴다.
    myfunc = @(x) sin(x)+a;
   
    myfunc3 = @(x, y) x+y; % 인자가 두개인 경우의 예제
    myfunc3(3, 4)
   
    myeval_pointer = @myeval;  %% function pointer.
   
    a=0; % this won't change the function of 'myfunc'
   
    % 아래 함수 세개의 결과는 같다
    fprintf('myeval=%f\n', myeval(myfunc, 3));
    fprintf('feval=%f\n', feval(myfunc, 3));
    fprintf('myeval_pointer=%f\n', myeval_pointer(myfunc, 3));
   
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 함수 포인터를 이용하여 이것을 배열에 넣고 사용하기! 매우 편리하겠지???

    myfunc2 = @(x) sin(x)+a; % now a is 0
    funary = {myfunc, myfunc2};
    funary{1}(3)
    funary{2}(3)
end

function ret = myeval(func, x)
    ret = func(x);
end


:
Posted by Kwang-sung Jun