Stateflow에서의 벡터와 행렬에 대한 연산
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를 동작 언어로 사용 |
|---|---|---|
| 행렬 곱셈. | 요소별 곱셈. 행렬 곱셈을 하려면 MATLAB 함수에서 |
| 요소별 곱셈. | 지원되지 않음. 연산 |
| 행렬 오른쪽 나눗셈. | 요소별 오른쪽 나눗셈. 행렬 오른쪽 나눗셈을 하려면 MATLAB 함수에서 |
| 요소별 오른쪽 나눗셈. | 지원되지 않음. 연산 |
| 행렬 왼쪽 나눗셈. | 지원되지 않음. MATLAB 함수에서 |
| 요소별 왼쪽 나눗셈. | 지원되지 않음. 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를 동작 언어로 사용 |
|---|---|---|
| 덧셈. | 덧셈. |
| 뺄셈. | 뺄셈. |
비교 연산(우선 순위 3)
연산 | MATLAB을 동작 언어로 사용 | C를 동작 언어로 사용 |
|---|---|---|
| 비교, 같음. | 비교, 같음. |
| 비교, 같지 않음. | 비교, 같지 않음. |
| 지원되지 않음. 연산 | 비교, 같지 않음. |
| 지원되지 않음. 연산 | 비교, 같지 않음. |
단항 연산 및 동작
단항 연산은 단일 값에 적용되며 이항 연산과 다르게 동작합니다. 단항 연산의 특징은 다음과 같습니다.
이항 연산자보다 우선 순위가 높습니다.
우측 결합입니다. 즉, 차트가 오른쪽에서 왼쪽으로 연산을 실행합니다.
요소별 연산을 수행합니다.
연산 | MATLAB을 동작 언어로 사용 | C를 동작 언어로 사용 |
|---|---|---|
| 논리 NOT. 비트별 NOT을 사용하려면 |
자세한 내용은 비트별 연산 항목과 C 언어 비트 연산 사용 항목을 참조하십시오. |
| 지원되지 않음. 연산 | 논리 NOT. |
| 음수. | 음수. |
| 지원되지 않음. | 벡터 또는 행렬의 모든 요소를 증가시킵니다. |
| 지원되지 않음. | 벡터 또는 행렬의 모든 요소를 감소시킵니다. |
대입 연산
대입 연산은 변수에 값을 저장합니다. C를 동작 언어로 사용하는 차트는 산술 연산을 대입 연산과 결합하는 복합 대입 연산자를 지원합니다.
연산 | MATLAB을 동작 언어로 사용 | C를 동작 언어로 사용 |
|---|---|---|
| 단순 대입. | 단순 대입. |
| 지원되지 않음. 표현식 |
|
| 지원되지 않음. 표현식 |
|
| 지원되지 않음. 표현식 |
|
| 지원되지 않음. 표현식 |
|
값을 행렬의 개별 요소에 대입하기
차트의 동작 언어에 적합한 인덱싱 구문을 사용하여 벡터 또는 행렬의 개별 요소에 값을 대입할 수 있습니다.
| 예 | 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의 각 요소가 스칼라 출력값 |
| 벡터 또는 행렬 | 벡터 또는 행렬 | 요소별 연산
|
여러 개의 출력값을 갖는 함수의 경우, 출력값과 입력값이 모두 벡터 또는 행렬이 아닌 한 동일한 규칙이 적용됩니다. 크기가 다르면 차트는 크기 불일치 오류를 생성하며 스칼라 확장을 수행하지 않습니다.
고정 크기 행렬만 스칼라 확장을 지원합니다.
MATLAB을 동작 언어로 사용하는 차트는 스칼라 확장을 지원하지 않습니다.