Main Content

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

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

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

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

자세한 내용은 Differences Between MATLAB and C as Action Language Syntax 항목을 참조하십시오.

인덱싱 표기법

MATLAB을 동작 언어로 사용하는 차트에서는 괄호로 구분된, 1부터 시작하는 인덱싱을 사용하여 벡터 또는 행렬의 요소를 참조합니다. 여러 차원에 대한 인덱스는 쉼표로 구분합니다.

C를 동작 언어로 사용하는 차트에서는 대괄호로 구분된, 0부터 시작하는 인덱싱을 사용하여 벡터 또는 행렬의 요소를 참조합니다. 여러 차원에 대한 인덱스는 각각 대괄호 한 쌍으로 묶습니다.

MATLAB을 동작 언어로 사용

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

이항 연산

다음 표는 벡터 피연산자와 행렬 피연산자에 대한 모든 이항 연산의 해석을 우선 순위(1 = 가장 높음, 3 = 가장 낮음)에 따라 요약한 것입니다. 이항 연산은 좌측 결합이므로 어떤 표현식에서든 우선 순위가 같은 연산자는 왼쪽에서 오른쪽으로 평가되어야 합니다. MATLAB을 동작 언어로 사용하는 차트에서의 행렬 곱셈과 행렬 나눗셈을 제외하고, 모든 이항 연산자는 요소별 연산을 수행합니다.

연산

우선 수위

MATLAB을 동작 언어로 사용

C를 동작 언어로 사용

a * b

1

행렬 곱셈.

요소별 곱셈. 행렬 곱셈을 하려면 MATLAB 함수에서 * 연산을 사용하십시오. MATLAB 함수를 사용하여 행렬 연산 수행하기 항목을 참조하십시오.

a .* b

1

요소별 곱셈.

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

a / b

1

행렬 오른쪽 나눗셈.

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

a ./ b

1

요소별 오른쪽 나눗셈.

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

a \ b

1

행렬 왼쪽 나눗셈.

지원되지 않음. MATLAB 함수에서 \ 연산을 사용하십시오. MATLAB 함수를 사용하여 행렬 연산 수행하기 항목을 참조하십시오.

a .\ b

1

요소별 왼쪽 나눗셈.

지원되지 않음. MATLAB 함수에서 .\ 연산을 사용하십시오. MATLAB 함수를 사용하여 행렬 연산 수행하기 항목을 참조하십시오.

a + b

2

덧셈.

덧셈.

a - b

2

뺄셈.

뺄셈.

a == b

3

비교, 같음.

비교, 같음.

a ~= b

3

비교, 같지 않음.

비교, 같지 않음.

a != b

3

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

비교, 같지 않음.

a <> b

3

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

비교, 같지 않음.

단항 연산 및 동작

다음 표는 벡터 피연산자와 행렬 피연산자에 대한 모든 단항 연산 및 동작의 해석을 요약한 것입니다. 단항 연산의 특징은 다음과 같습니다.

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

  • 우측 결합이므로 어떤 표현식에서든 연산자는 오른쪽에서 왼쪽으로 평가되어야 합니다.

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

MATLAB을 동작 언어로 사용

C를 동작 언어로 사용

~a

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

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

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

자세한 내용은 Bitwise Operations 항목과 Enable C-bit operations 항목을 참조하십시오.

!a

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

논리 NOT.

-a

음수.

음수.

a++

지원되지 않음.

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

a--

지원되지 않음.

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

대입 연산

다음 표는 벡터 피연산자와 행렬 피연산자에 대한 대입 연산의 해석을 요약한 것입니다.

연산

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 함수 모두에 적용됩니다. 함수 f의 모든 형식 인수를 스칼라로 정의한다고 가정하겠습니다. 다음 표는 함수 호출 y = f(u)에 대한 스칼라 확장 규칙을 설명합니다.

출력값 y입력값 u결과
스칼라스칼라스칼라 확장이 발생하지 않습니다.
스칼라벡터 또는 행렬차트가 크기 불일치 오류를 생성합니다.
벡터 또는 행렬스칼라

차트가 스칼라 확장을 사용하여 f(u)의 스칼라 출력값을 y의 각 요소에 대입합니다.

y[i][j] = f(u)

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

차트가 스칼라 확장을 사용하여 u의 각 요소에 대한 출력값을 계산하고 이를 y의 대응되는 요소에 대입합니다.

y[i][j] = f(u[i][j])
yu의 크기가 동일하지 않으면 차트는 크기 불일치 오류를 생성합니다.

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

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

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

MATLAB 함수를 사용하여 행렬 연산 수행하기

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

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

  • 표준 행렬 곱 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
함수를 호출하기 전에, Set Data Properties에 설명된 대로 입력 데이터와 출력 데이터에 대한 속성을 지정합니다.

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

관련 항목