주요 콘텐츠

Stateflow에서의 벡터와 행렬에 대한 연산

R2026b

Simulink® 모델의 Stateflow® 차트에는 벡터와 행렬로 계산하는 데 사용하는 구문을 정의하는 동작 언어 속성이 있습니다. 동작 언어 속성은 다음과 같습니다.

  • MATLAB®을 동작 언어로 사용합니다.

  • C를 동작 언어로 사용합니다.

자세한 내용은 동작 언어 구문으로서 MATLAB과 C의 차이점 항목을 참조하십시오.

인덱싱 표기법

벡터 및 행렬 요소에 액세스하는 방식은 차트의 동작 언어에 따라 다릅니다.

MATLAB을 동작 언어로 사용하는 차트는 괄호와 함께 1부터 시작하는 인덱싱을 사용합니다. 다차원 배열의 경우, 단일 괄호 쌍 안에 인덱스를 쉼표로 구분합니다(예: M(i,j)).

C를 동작 언어로 사용하는 차트는 대괄호와 함께 0부터 시작하는 인덱싱을 사용합니다. 다차원 배열의 경우, 각 차원 인덱스를 각각의 대괄호 쌍으로 묶습니다(예: M[i][j]).

예

MATLAB을 동작 언어로 사용

C를 동작 언어로 사용
벡터 V의 첫 번째 요소V(1)V[0]
벡터 V의 i번째 요소V(i)V[i-1]
행렬 M의 4행, 5열에 있는 요소M(4,5)M[3][4]
행렬 M의 i행, j열에 있는 요소M(i,j)M[i-1][j-1]

이항 연산

벡터와 행렬에 대한 이항 연산은 표준 우선 순위 규칙(1 = 가장 높음, 3 = 가장 낮음)을 따릅니다. 연산자의 우선 순위가 같으면 왼쪽에서 오른쪽으로 평가됩니다.

모든 이항 연산자는 요소별 연산을 수행하지만, 한 가지 예외가 있습니다. 즉, MATLAB을 동작 언어로 사용하는 차트에서는 *, /, \ 연산자가 대신 행렬 연산을 수행합니다.

곱셈 및 나눗셈 연산(우선 순위 1)

연산

MATLAB을 동작 언어로 사용

C를 동작 언어로 사용

a * b

행렬 곱셈.

요소별 곱셈. 행렬 곱셈을 하려면 MATLAB 함수에서 * 연산을 사용하십시오.

a .* b

요소별 곱셈.

지원되지 않음. 연산 a * b를 사용하십시오.

a / b

행렬 오른쪽 나눗셈.

요소별 오른쪽 나눗셈. 행렬 오른쪽 나눗셈을 하려면 MATLAB 함수에서 / 연산을 사용하십시오.

a ./ b

요소별 오른쪽 나눗셈.

지원되지 않음. 연산 a / b를 사용하십시오.

a \ b

행렬 왼쪽 나눗셈.

지원되지 않음. MATLAB 함수에서 \ 연산을 사용하십시오.

a .\ b

요소별 왼쪽 나눗셈.

지원되지 않음. MATLAB 함수에서 .\ 연산을 사용하십시오.

C를 동작 언어로 사용하는 차트에서 연산 *와 /는 요소별 곱셈과 요소별 나눗셈을 수행합니다. C 차트에서 표준 행렬 곱셈과 표준 행렬 나눗셈을 수행하려면 MATLAB 함수를 사용하십시오.

정사각 행렬 u1과 u2에서 다음과 같은 연산을 수행하려 한다고 가정하겠습니다.

  • 표준 행렬 곱 y1 = u1 * u2를 계산합니다.

  • 방정식 u1 * y2 = u2를 풉니다.

  • 방정식 y3 * u1 = u2를 풉니다.

C 차트에서 이러한 계산을 완료하려면 다음 코드를 실행하는 MATLAB 함수를 추가합니다.

function [y1, y2, y3] = my_matrix_ops(u1, u2)
%#codegen

y1 = u1 * u2;  % matrix multiplication
y2 = u1 \ u2;  % matrix division from the right
y3 = u1 / u2;  % matrix division from the left
함수를 호출하기 전에, 데이터 속성 설정하기에 설명된 대로 입력 데이터와 출력 데이터에 대한 속성을 지정합니다.

MATLAB을 동작 언어로 사용하는 차트에서 연산 *, /, \는 표준 행렬 곱셈과 표준 행렬 나눗셈을 수행합니다. 이러한 연산은 상태 동작과 천이 동작에서 직접 사용할 수 있습니다.

덧셈 및 뺄셈 연산(우선 순위 2)

연산

MATLAB을 동작 언어로 사용

C를 동작 언어로 사용

a + b

덧셈.

덧셈.

a - b

뺄셈.

뺄셈.

비교 연산(우선 순위 3)

연산

MATLAB을 동작 언어로 사용

C를 동작 언어로 사용

a == b

비교, 같음.

비교, 같음.

a ~= b

비교, 같지 않음.

비교, 같지 않음.

a != b

지원되지 않음. 연산 a ~= b를 사용하십시오.

비교, 같지 않음.

a <> b

지원되지 않음. 연산 a ~= b를 사용하십시오.

비교, 같지 않음.

단항 연산 및 동작

단항 연산은 단일 값에 적용되며 이항 연산과 다르게 동작합니다. 단항 연산의 특징은 다음과 같습니다.

  • 이항 연산자보다 우선 순위가 높습니다.

  • 우측 결합입니다. 즉, 차트가 오른쪽에서 왼쪽으로 연산을 실행합니다.

  • 요소별 연산을 수행합니다.

연산

MATLAB을 동작 언어로 사용

C를 동작 언어로 사용

~a

논리 NOT. 비트별 NOT을 사용하려면 bitcmp 함수를 사용하십시오.

  • 비트별 NOT(디폴트 값). C 언어 비트 연산 사용 차트 속성을 선택하여 이 연산을 활성화합니다.

  • 논리 NOT. C 언어 비트 연산 사용 차트 속성을 선택 해제하여 이 연산을 활성화합니다.

자세한 내용은 비트별 연산 항목과 C 언어 비트 연산 사용 항목을 참조하십시오.

!a

지원되지 않음. 연산 ~a를 사용하십시오.

논리 NOT.

-a

음수.

음수.

a++

지원되지 않음.

벡터 또는 행렬의 모든 요소를 증가시킵니다. a = a+1과 동일합니다.

a--

지원되지 않음.

벡터 또는 행렬의 모든 요소를 감소시킵니다. a = a-1과 동일합니다.

대입 연산

대입 연산은 변수에 값을 저장합니다. C를 동작 언어로 사용하는 차트는 산술 연산을 대입 연산과 결합하는 복합 대입 연산자를 지원합니다.

연산

MATLAB을 동작 언어로 사용

C를 동작 언어로 사용

a = b

단순 대입.

단순 대입.

a += b

지원되지 않음. 표현식 a = a+b를 사용하십시오.

a = a+b와 동일합니다.

a -= b

지원되지 않음. 표현식 a = a-b를 사용하십시오.

a = a-b와 동일합니다.

a *= b

지원되지 않음. 표현식 a = a*b를 사용하십시오.

a = a*b와 동일합니다.

a /= b

지원되지 않음. 표현식 a = a/b를 사용하십시오.

a = a/b와 동일합니다.

값을 행렬의 개별 요소에 대입하기

차트의 동작 언어에 적합한 인덱싱 구문을 사용하여 벡터 또는 행렬의 개별 요소에 값을 대입할 수 있습니다.

예

MATLAB을 동작 언어로 사용

C를 동작 언어로 사용
값 10을 벡터 V의 첫 번째 요소에 대입합니다.V(1) = 10;V[0] = 10;
값 77을 행렬 M의 2행, 9열에 있는 요소에 대입합니다.M(2,9) = 77;M[1][8] = 77;

값을 모든 요소에 대입하기

MATLAB을 동작 언어로 사용하는 차트에서는 단일 동작을 사용하여 벡터 또는 행렬의 모든 요소를 지정할 수 있습니다. 예를 들어 다음 동작은 2×3 행렬 A의 각 요소를 다른 값에 대입합니다.

A = [1 2 3; 4 5 6];

C를 동작 언어로 사용하는 차트에서는 스칼라 확장을 사용하여 벡터 또는 행렬의 모든 요소를 동일한 값으로 설정할 수 있습니다. 스칼라 확장은 스칼라 데이터를 변환하여 벡터 데이터 또는 행렬 데이터의 차원과 일치시킵니다. 예를 들어 다음 동작은 행렬 A의 모든 요소를 10으로 설정합니다.

A = 10;

스칼라 확장은 스칼라 값을 벡터 또는 행렬 차원에 맞게 자동으로 변환합니다. 이는 그래픽 함수, 진리표 함수, MATLAB 함수, Simulink 함수에 적용됩니다.

스칼라 형식 인수를 갖는 함수 y = f(u)의 경우 연산 결과는 다음과 같습니다.

출력값 y입력값 u결과
스칼라스칼라스칼라 확장 없음.
스칼라벡터 또는 행렬크기 불일치 오류.
벡터 또는 행렬스칼라

y의 각 요소가 스칼라 출력값 y[i][j] = f(u)를 받습니다.

벡터 또는 행렬벡터 또는 행렬

요소별 연산 y[i][j] = f(u[i][j]).

y와 u의 크기가 다를 경우 크기 불일치 오류가 발생합니다.

여러 개의 출력값을 갖는 함수의 경우, 출력값과 입력값이 모두 벡터 또는 행렬이 아닌 한 동일한 규칙이 적용됩니다. 이 경우 차트는 크기 불일치 오류를 생성하며 스칼라 확장을 수행하지 않습니다.

고정 크기 행렬만 스칼라 확장을 지원합니다.

MATLAB을 동작 언어로 사용하는 차트는 스칼라 확장을 지원하지 않습니다.

참고 항목

도움말 항목