주요 콘텐츠

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

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

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

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

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

인덱싱 표기법

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

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

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

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을 동작 언어로 사용하는 차트에서는 *, /, \ 연산자가 대신 행렬 연산을 수행합니다.

곱셈 및 나눗셈 연산(우선 순위 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 함수를 사용하십시오.

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

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]).

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

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

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

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

참고 항목

도움말 항목