MBD_入门篇_19_Simulink数学运算模块

19.Simulink数学运算模块

19.1 概述

数学运算模块,包含了一些数学运算,比如最常用的加减乘除等。

19.2  Add加法模块

设置加法模块的形状,默认是方形的,推荐使用方形的。

运算符设置。

设置符号为++-,可以理解为本来是0,0+In1+In2-In3.

注意一下输出数据类型,防止溢出。最好根据数据源的实际范围来为输出设置相应的数据类型。

两个uint8相加,超出255,发生溢出。

19.3 Subtract减法模块

减法模块跟加法模块参数设置都一样。用加法模块来表示减法,效果跟直接减法模块一样。

19.4 Product乘法模块

注意一下乘法的方式,一般的数学运算是用默认的点乘的方式即可。如果是两个矩阵做乘法运算,才会去选择用矩阵的乘法。

注意一下输出数据类型,防止溢出。最好根据数据源的实际范围来为输出设置相应的数据类型。如下图的uint8类型的40*9,输出也是uint8的话就会溢出。

19.5 Divide除法模块

除法模块是可以设置运算符的。可以理解为乘法模块初始值等于1,1*第一个输入,结果就等于第一个输入,再除以第二个输入。

可以理解为1/40*400=10

数据类型在多个乘除法的时候,要注意结果的范围。有时候也需要有限数据精度,那应该视情况扩大数据的计算类型,先做乘法,再做除法。

19.5 Sum求和模块

Sum模块和Add加法模块一样,只是形状不一样,多用在传递函数的模型里。

19.6 DotProduct点乘模块

相当于Product的子集。

19.7 绝对值模块

对输入进行绝对值运算。

对于固定点类型,带偏移量的数据类型,要注意,会报错。

19.8 Bias偏移模块

对输入信号进行偏移计算。当然可以使用Add或者Subtract代替。

19.9 Assignment模块

根据Index的值去拿U的值放到输出Y里,Y0是默认值。

Index为1,U是1,赋完值的结果是[1 0 0 0 0]

选择Index的起始是0还是1,从0开始的话元素的Index就是0,1,2,3,4,从1开始的话就是1,2,3,4,5

选择Index为port方式,从输入端去选择Index。

通过Index去赋值其中某几个值。

Size是选择使用Y0的还是选择手动在参数设置里进行输入。

19.10 MinMax模块

可以设置求min或者求max的值,以及设置输入的个数。

我们从一个数组中分别求出最大值和最小值。

输入使用数组,输入Num为1.

Number of input ports设置为3.

求数组的最大最小,对每个Index做比较,求出来最大最小的值。

输入的维度不一致,导致报错。

19.11 FindNonzeroElements模块

查找非零元素,可以自己搭建模块组合去做这个功能生成代码,不使用模型自带的模块。

19.12 MathFunction模块

数学函数模块,包含了一些常用的数学函数,比如exp,log,10^u,ln,square,pow,rem,mod等。

19.13 MatrixConcatenate模块

用来组合向量和矩阵。

单个信号组合成向量。

2个单信号组合成多维数组,维度是1X2.

2个数组组合成一个向量。

组合出2行3列的数组。

组合成2行3列的矩阵,用Reshape模块去转置。

19.14 MinMaxRunningResettable模块

输出所有之前输入的值的最小值(选择min),但是可以被Reset使用Initial Condition的值。max相反。

设置使用min还是max。以及初始的值。

记录所有时刻的最大最小值

19.15 ProductofElements累乘模块

针对输入的每个元素的乘法运算。a方式,是对Number of inputs进行设置,如图,设置完就会显示多个port对应每个运算,跟普通的Product用法一致。

运算结果

b方式,我们设置Number of inputs为*,然后对输入进行搭建,连接。仿真完后看到结果和上面的运算一样。

19.16 ReciprocalSqrt模块

可以选择三种计算,是求根号sqrt,将带符号值进行绝对值运算再求根号signedSqrt,求根号再求倒数rSqrt。

最简单的求根号sqrt,对4进行运算,得出结果2.

对-4进行开根号运算,得出无效值。

signedSqrt的输入值的符号对输出结果是有影响的,输入是什么符号,输出就是什么符号,根号是对输出的绝对值进行运算。

rSqrt先开根号,再求倒数。

19.17 SignedSqrt模块

与ReciprocalSqrt模块倒数平方根模块一样,只是默认选项选择的是带符号的平方根运算。

19.18 Sqrt模块

与ReciprocalSqrt模块倒数平方根模块一样,只是默认选项选择的是带符号的平方根运算。

19.19 Reshape模块

改变矩阵或者向量输入的维度,按照重新设定的方式输出。比如说输入是一个数组,我们可以把输出设置为1维数组,列向量,行向量,M*N矩阵

可以看到数据类型后面的括号()里显示的是5,表示输入和输出一样,是普通类型的数组。

修改为列向量输出后,模块图标发生变化,仿真输出的维度也发生了变化,变成了5X1.

同样地,修改为行向量以后,如下图

设置为Customize,将输出的维度设置为[2,3],仿真后,输出变成了2X3的矩阵。

输入是2X3矩阵的时候,各种设置的输出情况。

19.20 RoundingFunction模块

舍入函数

舍入输入信号的每个元素

“floor”

朝负无穷方向舍入到最接近的整数值

“ceil”

朝正无穷方向舍入到最接近的整数

“round”

舍入到最接近的整数

“fix”

朝零方向舍入到最接近的整数

选择floor,进行向下取整,对pi进行取整,取完以后变成了3.

设置为ceil是向上取整,直接进1,结果是4

设置为round,取接近的整数的值

fix在负数取整的时候与floor不同,与ceil相同。

19.21 取符号Sign模块

Sign模块的输入为正,则输出1,输入为负,则输出-1,输入为0,则输出0

使用Switch和CompareToConstant模块搭建Sign模块的逻辑

搭建完仿真结果如下

19.22 SineWaveFunction模块

生成代码不使用,仿真可以用来产生输入波形。

产生的波形

19.23 SliderGain滑动增益模块

生成代码不使用,仿真可以用来拖动变换增益效果。可以设置最大和最小的限值,然后在限值中间可以进行滑动设置。

19.24 Squeeze挤压模块

生成代码没有使用过(我个人,如果有使用场景可以在评论区留言告诉我或者是微信联系我)。比如说像2X1X3这样的矩阵改变成2X3的矩阵。

将3X1X2的数据挤压成3X2。

3X3X2的数据不变,直接输出。

19.25 SumOfElements累加模块

对每一个元素进行求和,输出结果。

对一维数组进行累加,得出结果15

对二位数组进行累加,得出结果30

19.26 三角函数模块

对输入进行sin或者其他的函数运算,输出相应的值

在Function里选择运算的函数,比如生活sin,cos,tan等。atan2函数跟atan的区别是,atan2输入是两个值,atan输入是一个值,atan2可以输入象限的信息,但是atan是没有办法的。

近似值逼近方法可以选择CORDIC和Lookup。

查找方法角度的单位,弧度或者是旋转。

波形显示如下,选择数量跟最终的波形有关系,数量越大,越接近原始的值,数量越小,精度损失会比较大。

数量分别选择4后的波形

19.27 取反模块

对输入进行取反后输出。

int8的数据范围是-128~+127,如果我们对-128取反,在int8的数据类型下,我们是没办法得到正确的输出,因为int8的范围取不到+128。-128不勾选Saturate on integer overflow的输出时候,输出还是-128,如果勾选的话,输出是+127

数据类型不够用的时候,考虑对数据类型做扩充。

Simulink里对无符号整形不能进行取反操作,直接报错。

19.28 向量连接模块

Vector Concatenate向量连接模块,参数设置输入个数不讲了,模式有Vector向量,和Multidimensional array多维数组。

选择Vector。把两个单变量,组合成一个数组。

两个1X3的行向量,组合完是一个1X6的行向量。

两个3X1的列向量,组合完是一个6X1的列向量。

当我们选择多维数组模式的时候,模块的外观发生了变化,变成了矩阵连接模块的样子。我们设置为1维,仿真结果如下

设置为2维,我们看到输出结果变成了3X2的数组。

不同数据的组合。

相关推荐

  1. AutoSAR(基础入门10.6-模式管理进阶

    2024-04-21 22:56:06       31 阅读
  2. Pandas实战100例 | 案例 19: 基本数学运算

    2024-04-21 22:56:06       34 阅读

最近更新

  1. Android IdleHandler源码分析

    2024-04-21 22:56:06       0 阅读
  2. docker-1

    docker-1

    2024-04-21 22:56:06      0 阅读
  3. Git批量删除本地h和远程分支说明

    2024-04-21 22:56:06       0 阅读
  4. mvccaa

    2024-04-21 22:56:06       1 阅读
  5. Linux 常用指令详解

    2024-04-21 22:56:06       1 阅读
  6. 第2章 源码编译构建LAMP

    2024-04-21 22:56:06       1 阅读
  7. 数据库doris中的tablet底层解析

    2024-04-21 22:56:06       1 阅读
  8. 使用Python threading模块创建多线程程序

    2024-04-21 22:56:06       1 阅读
  9. 探索数据的奥秘:sklearn中的聚类分析技术

    2024-04-21 22:56:06       1 阅读

热门阅读

  1. CentOS常见的命令用法和示例

    2024-04-21 22:56:06       17 阅读
  2. 使用 hiredis 客户端库封装一个简单的 Redis 类

    2024-04-21 22:56:06       14 阅读
  3. 【QT教程】QT6物联网应用

    2024-04-21 22:56:06       11 阅读
  4. 让css失效的方法

    2024-04-21 22:56:06       12 阅读
  5. 持续集成和持续部署

    2024-04-21 22:56:06       15 阅读
  6. VOJ 扑克牌 题解 01背包dp

    2024-04-21 22:56:06       16 阅读