본문 바로가기

Others

쓰기좋은 Matlab 함수

728x90
반응형

자동화 계의 절대적 함수 eval

matlab 명령어를 문자열로 만들어 eval함수에 넣는다면, 그 명령어를 eval을 사용한 위치에서 실행시킬 수 있다.

예를들어 a=b+1;을 실행시키는것을

a=0;
b=1;
str="a=b+1";
eval(str)

로 실행시킬 수 있다. 

예를들어 loop에서 변수이름을 바꾸면서 loop를 반복하고 싶을 때 loop를 돌리면서 문자열을 수정하면서 명령어를 만들어 eval에 넣는다면 그대로 실행이된다.

for File_index=1:1:length(folder)

        str=folder(File_index).name;
        str_new=str(1:strfind(str,'.')-1);
        
        eval("D"+str_new+"_x=data(:,1);");
        %eval("D"+str_new+"_y=-sqrt(data(:,2).^2-data(:,3).^2);");
        eval("D"+str_new+"_y=data(:,2);");
        save_data=[save_data + " D"+str_new+"_x"+ " D"+str_new+"_y" ];
end


eval("save "+save_data);

이게 별거 아닌것처럼 보여도 deep한 프로그래밍 없이 matlab 프로그램에 엄청난 자유도를 준다.

 

Bug를 만들어내지 않는 불멸의 입출력 함수 fgetl

 for File_index=1:1:length(folder)
           try
                data = load(folder(File_index).name);
           catch
                disp('something strange is in file head');

                data=0;
    
                fileID=fopen(folder(File_index).name);
                file_index=1;
                file_check=0;

                while 1
                     tline = fgetl(fileID);

                     if ~ischar(tline), break, end
    
                     if file_check<jump_num
                     else
                         S_data=split(tline);
                         data(file_index,1:array_legth)=str2double(S_data);
                         file_index=file_index+1;
                     end
                     file_check=file_check+1;
                 end
                 fclose(fileID);
           end
        str=folder(File_index).name;
        str_new=str(1:strfind(str,'.')-1);
        
        eval("D"+str_new+"_x=data(:,1);");
        %eval("D"+str_new+"_y=-sqrt(data(:,2).^2-data(:,3).^2);");
        eval("D"+str_new+"_y=data(:,2);");
        save_data=[save_data + " D"+str_new+"_x"+ " D"+str_new+"_y" ];
        end
end
반응형

'Others' 카테고리의 다른 글

라즈베리파이 - python3 환경 구축  (0) 2019.10.19
블로그에 공식 쓰기  (0) 2019.05.20
까먹기 쉬운 python 함수  (0) 2019.05.14
Mac에 최적화된 사항  (0) 2019.05.12
Lock in measurement  (2) 2018.10.24