fmtf

Statistics + Control & Dynamics 중심의 Octave 학습 예제

ex-pkg/fmtf.m

코드 인덱스로 돌아가기

카테고리

Package Drill

학습 소스 그룹

코드 길이

62

lines

작성자

-

날짜 정보 없음

패키지

none

pkg load 기준

함수 시그니처

function [formatted_str, var_list] = fmtf(fmt_str)

전체 코드

전체 코드를 복사해서 Octave에서 바로 실행할 수 있습니다.

function [formatted_str, var_list] = fmtf(fmt_str)
    % fmtf 함수는 Python의 f-string과 유사하게 중괄호 {변수:형식}을 사용하여
    % 문자열 내에서 변수를 치환하는 함수입니다.
    %
    % 입력:
    % fmt_str - 포맷팅할 문자열 (예: "Value: {value:.2f}")
    %
    % 출력:
    % formatted_str - 포맷팅된 결과 문자열
    % var_list - 치환된 변수 목록
    %
    % 사용 예시:
    %   name = "Alice";
    %   age = 30;
    %   [formatted_str, var_list] = fmtf("Name: {name}, Age: {age}\n");
    %   disp(formatted_str);
    %   disp(var_list);
    %

    % 중괄호 안의 변수명과 형식을 추출 (정규 표현식 사용)
    tokens = regexp(fmt_str, "\\{([^{}:]+)(?::([^{}]+))?\\}", "tokens");
    var_list = cellfun(@(x) x{1}, tokens, "UniformOutput", false); % 변수 목록 저장
    
    for i = 1:length(tokens)
        var_name = tokens{i}{1};  % 변수명
        format_spec = "";
        
        if length(tokens{i}) > 1 && ~isempty(tokens{i}{2})
            format_spec = tokens{i}{2};  % 형식 지정자
        end
        
        % 호출된 환경에서 변수 값을 가져오기
        try
            var_value = evalin("caller", var_name);
        catch
            error("Undefined variable: %s", var_name);
        end
        
        % 값이 숫자일 경우 지정된 형식 적용
        if isnumeric(var_value)
            if ~isempty(format_spec)
                var_value_str = ["%" format_spec];
            else
                var_value_str = "%d";
            end
        else
            var_value_str = "%s";
        end
        
        % 원본 문자열에서 `{변수:형식}`을 해당 포맷 문자열로 치환
        match_pattern = ["{" var_name "(:[^}]*)?}"];
        fmt_str = regexprep(fmt_str, match_pattern, var_value_str, "once");
    end
    
    formatted_str = fmt_str;
    
    % 원본 문자열의 끝에 개행 문자가 있었다면 유지
    if endsWith(fmt_str, "\n")
        formatted_str = [formatted_str "\n"];
    end
end

코드 해설

목적

Statistics + Control & Dynamics 중심의 Octave 학습 예제

입력

  • 파라미터: fmt_str

출력

  • 반환값: formatted_str
  • 반환값: var_list
  • 콘솔 텍스트 출력

실행 흐름

  1. 입력
  2. 출력
  3. formatted_str - 포맷팅된 결과 문자열

핵심 함수/주제

dispisemptylengthcellfunendsWitherrorevalinisnumeric

실습 과제

  • 같은 연산을 내장 함수와 사용자 함수 두 방식으로 계산해 오차를 비교해보세요.
  • 질량/감쇠/강성 또는 전달함수 계수를 바꿔 응답 변화를 확인해보세요.
  • 핵심 함수 disp의 인자를 한 가지 바꿔 결과 변화를 기록해보세요.

학습 팁

같은 카테고리의 다른 코드