Matlab中支持的向量和矩阵运算

目录

支持的向量和矩阵运算

索引表示法

二元运算

一元运算和动作

赋值操作

使用 MATLAB 函数执行矩阵算术


支持的向量和矩阵运算

        Simulink® 模型中的 Stateflow® 图具有一个动作语言属性,该属性定义对向量和矩阵进行计算时使用的语法。动作语言的属性有:

  •  MATLAB® 作为动作语言。

  •  C 语言作为动作语言。

索引表示法

        在使用 MATLAB 作为动作语言的图中,使用以圆括号为界的从 1 开始的索引来引用向量或矩阵的元素。以逗号分隔不同维度的索引。

        在使用 C 语言作为动作语言的图中,使用以方括号为界的从 0 开始的索引来引用向量或矩阵的元素。将不同维度的索引分别包含在一对方括号中。

示例

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 作为动作语言的图中的矩阵乘法和除法运算符外,所有二元运算符都执行按元素运算。

运算

优先级

MATLAB 作为动作语言

C 作为动作语言

a * b

1

矩阵乘法。

按元素乘法。要进行矩阵乘法运算,请在 MATLAB 函数中使用 * 运算。

a .* b

1

按元素乘法。

不支持。请使用 a * b 运算。

a / b

1

矩阵右除。

按元素右除。要进行矩阵右除,请在 MATLAB 函数中使用 / 运算。

a ./ b

1

按元素右除。

不支持。请使用 a / b 运算。

a \ b

1

矩阵左除。

不支持。请在 MATLAB 函数中使用 \ 运算。

a .\ b

1

按元素左除。

不支持。请在 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(默认值)。通过选中 Enable C-bit operations 图属性启用此运算。

  • 逻辑 NOT。通过清除 Enable C-bit operations 图属性启用此运算。

!a

不支持。请使用 ~a 运算。

逻辑 NOT。

-a

求负。

求负。

a++

不支持。

使向量或矩阵的所有元素递增 1。等效于 a = a+1。

a--

不支持。

使向量或矩阵的所有元素递减 1。等效于 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])
如果 y 和 u 的大小不同,图会生成大小不匹配错误。

        对于具有多个输出的函数,此规则同样适用,但输出和输入均为向量或矩阵时是例外。在这种情况下,图会生成大小不匹配错误,并且不发生标量扩展。

        使用 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 作为动作语言的图中,*/ 和 \ 运算执行标准矩阵乘法和除法。可以在状态和转移动作中直接使用这些运算。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值