Matlab/Simulink

전지현·2024년 7월 14일

MATLAB

목록 보기
1/4

매트랩을 처음 써보는 나..

회사에서 가이드 주신 걸 바탕으로 혼공을 해보았다.

Simulink에는 크게

  • State
  • Flow graph
  • Truth table

정도가 있고
각각이 안에서 어떻게 작동하는지는 다 이해됨.

if, for문을 블록화한 로직이라고 생각하면 될 듯.

MATLAB 프로그래밍

매트랩은 계산기다.

매트랩은 계산기다.

  • 매트랩은 다음줄로 넘어가면 다음 줄로 인식함. 한 줄인거를 알려주기 위해 … 을 사용. … 으로 한 줄을 여러 줄로 사용 가능

  • 문자열 ‘ ‘

  • 매트랩에서 경로 관리 매우 중요. 경로에서 명령어? 변수들을 찾기 때문

  • 플러그인=툴박스(프레임워크 같은 개념)

  • embedded coder는 matlab, simulink coder 가 있어야만 그 위에서 작동

  • MATLAB - simulink - statefolw

  • 확장자 .m

  • 경로 상에서 edit 파일명.m 하면 원래 있는 파일이라면 open, 원래 없다면 새로 생성됨.

  • fileparts 는 파일 경로를 쪼개주는 함수

  • 함수와 동일한 이름으로 변수 생성하지 말 것 (i, j, char, size 등 ) / 매트랩은 복소수,허수를 허용하기 때문에 i 쓰면 안됨.

  • f1 누르면 도움말 볼 수 있다.

  • 변수 이름이 함수 이름보다 우선시된다. (변수 선언하면 그 값으로 선언된다)

  • 매트랩의 두 가지 함수 호출 방식

    • function syntax ex) which(’help’)
    • command syntax ex) which help
  • a = 123

    • disp (a) ⇒ 123
    • disp a ⇒ a == disp ‘a’
  • undefined function or variable

    • 이름이 잘못 됐거나 경로가 잘못됐을 때
    • 경로 기반으로 동작하기 때문에 해당 경로에 내가 찾고자 하는 게 있어야 함.

Operator and special characters

  • 행렬곱 할 때 . 붙여주면 요소별 곱셉.

  • 1:2:10 ⇒ 1부터 10까지 2씩 증가하며 나열

  • [1:2:10]’

    • 1
    • 3
    • 5
    • 7
    • 9
    • ‘ 는 전치 연산. 행이 열로 바뀜.
  • short circuit 방식 (&&)

  • 세미콜론의 행의 끝을 나타냄.

  • ‘ ‘ ⇒ 문자형 배열 생성/ “ “ ⇒ string 생성

  • [1 1 1; 2 2 2; 3 3 3]

    • 1 1 1
    • 2 2 2
    • 3 3 3
    • ; 이 행을 구분해주는 역할을 함.
  • 행렬 연산 시 행렬 사이즈가 다르면 매트랩은 자동으로 맞춰주려고 함. (안되면 에러 발생)

  • 스칼라 - 벡터 - 배열

  • Inf: 무한대 NaN: 숫자가 아님. (NaN은 NaN 빼고 모든 숫자와 다름)

  • 비트연산

    • ‘2A’, ‘101010’
    • bin2dec, hex2dec, dec2bin, dec2hex (변환해주는 함수)
  • cast: 변수의 데이터형을 변경

  • typecast: 변수의 비트를 변경하지 않고 데이터형을 변경


  • if문(switch문) 괄호 생략 가능. 그냥 if a <30
  • case문 사용 시 case 옆에 문자열도 가능.
  • for문 for n = 2 : 6
  • while문은 없음.

정규식

  • 문자열에서 특정 패턴 찾고 싶을 때,
  • 텍스트에서 패턴과 일치하는 단어 그룹을 검색하는데 사용
  • ex) pattern = ‘k(ilo)?m(eters)?(/|)?’;
  • ~~ 한 패턴이 있는 걸 다 찾아줘
  • 어떤 문장에서 이 정규식을 만족하는 단어를 다 찾아줘.
  • regexp
    • +, *, ?, /

Classes (Data types)

  • 실제 모델 운영 시 클래스는 사용할 일 없음.

  • 매트랩에는 17개의 기본 클래스가 있음.

  • 이 클래스는 각각 행렬 혹은 배열 형식

  • logica,l string, char, numeric, table, cell, struct, function handle …

  • 정수, 소수 다 포함된 연산 결과는 항상 정수형을 결과로 생성.

    • 소수 → round → integer
    • int16 + double = int16
    • NaN은 0으로 변환됨.
    • uint8 + int8 연산하면 에러 남. 정수형끼리도 타입 맞춰줘야 함.
    • 정수형 산술 연산은 같은 클래스의 정수나 double형과 연산 가능
  • 부동소수점: double, single

  • 최상위(부호), 지수부, 소수부(가수부)

  • 바이어스 (bias) 개념.. 잘 이해 안됨.

  • Exponent bias

  • double + int (uint) = int, uint

  • single + double, single, char, logical = single

  • single + int (uint) = 에러

  • whos x : 타입 확인 가능

  • class (x) : 클래스명 확인

  • isa(x, ‘integer’) : 정수인지 확인

  • format long 하면 소수점 4자리보다 더 뒤에까지 확인할 수 있다.

  • A(:) → A의 모든 것. 열 벡터

    • A(:, 1) : 1열의 모든 행
    • A(2, :) : 2행의 모든 열
  • any(A(:)) : true가 하나라도 있으면 true 반환 (↔ all (전부 true여야 true)

String

  • C++, java에서의 string 개념과 같다. 객체

  • char. ⇒ 문자형 벡터

  • string = [”abc” “abcd”] =⇒ “abc” “abcd”

  • char = [’abc’ ‘abcd’] = ‘abcabcd’

  • cell은 아무거나 집어넣을 수 있음.

  • missing

    • s = string(””) =⇒ “”
    • m = string(missing) =⇒
  • str = { “ “, “ “, “ “}

    • str(3,4) = “Mir” % 배열 바깥에 새 문자열 할당
    • str(2, 2)(1:3) % 2,2원소에 1~3 string을 가져옴 (substring), 수정도 가능
  • sprintf

  • str2double, (형변환가능)

  • 문자열 비교

    • string은 == 가능
    • 일반 벡터는 compare함수 사용
  • clear: 창 깨끗해짐

  • clc: 깨끗해지고 맨 위로 커서 올라감

구조체

  • 구조체 선언할 필요 없이 그냥 쓰면 된다.
    • ss
    • ss. a = 1
    • aa.c = “123”
    • 필드삭제: rmfield(ss, ‘d’)
    • 필드네임확인: filedname(ss)
  • Nested structure
    • 구조체 안 구조체

Cell Arrays

  • 동적으로 사용 가능하다.
  • cell 타입은 아무 타입이나 넣을 수 있는 배열
  • mycell (1) ⇒ { [1] }
  • mycell {1} ⇒ 1
    • void 포인터 느낌. dereferencing
  • Multilevel Indexing

Function Handles

  • 함수를 다른 함수에 전달할 때
  • 모든 함수는 파일로 만들어져야 함. 실행함수 하나 당 파일 하나
  • 파일 안 만들고 싶으면 익명 함수 만들어서 사용 가능
  • @함수명
  • 파일명 = 함수명(맨 앞에 나와있는 함수(=메인함수)랑 파일명이랑 똑같아야 한다)
  • 파일이름으로 찾아서 실행한다. 따라서 맨 첫번째 함수랑 파일명이랑 같아야 한다.

Dictionary (key, value)

  • hashmap 같은 역할
  • key 주면 value 리턴

Map Container

  • key, value
  • 없는 key 호출 시 에러 발생, try-catch 로 핸들링해줘야 함

Valid combination

  • double + single = single

  • 행렬이 다른 요소면 같은 타입으로 맞춰주려 한다

  • 서로 다른 정수형을 결합하면 가장 왼쪽 요소 데이터형으로 만들어진다.!

Object

  • handle객체 = c++의 reference
    • 참조하기 때문에. 바뀌면 얘도 바뀜

Datatype 끝.

Script

  • m-script, script에서 변수 만들면 workspace에 변수 만들어짐.
  • section: %% 하면 섹션 구분 생김.
  • 섹션 선택해서 선택한 섹션만 섹션별로 실행시킬 수 있음.

Function

  • MATLAB은 파일 이름으로 호출
  • function workspace 별도 생성
    • function이 살아 있는 동안

Global 변수

  • 전역 변수, 별개의 공간에 잡힘
  • global 변수명

Types of functions

Arguments

  • nargin, nargout
    • 함수의 입출력 개수를 확인할 수 있음
    • c에서 void main( argc, argv )처럼 . 가변인자
  • varargin
    • 셀 타입. 가변 개수 입력 받을 수 있음.
  • varargout
    • 셀 타입. 가변 개수 출력

Debugging

  • 출력해보기

  • (변수는 ; 떼고 출력해보기)

  • run to here (=이 지점까지 실행된 상태)

    • continue, step 으로 다음단계 확인 가능 / step in
  • Break point ⇒ 클릭해주고 런 하면 해당 지점에서 멈춤

  • set conditional breakpoint ⇒ 조건 걸어놓고 조건에 맞으면 중단.

  • Pause on error 체크해두면 에러난 부분에 커서가 멈춰 있음.

Error handling

  • try-catch 문
try
	error
catch e
	disp (e);
end
  • warning( ‘off’, 경고 id) ⇒ 특정 경고 메세지 안 뜨게 하기
    • 경고 id는 w = warnin(’query’, ‘ ‘) 해서 알 수 있다.

0개의 댓글