SymPy基础计算
介绍SymPy的一些基本方法
介绍SymPy的一些基本方法
广义不等式使用符号
如果
与之相对的是极小元。如果
用集合符号可以描述最小元和极小元。元素
元素
当
,导出的偏序关系就是 上一般的序,此时,极小和最小的概念是一致的。
例:考虑锥
,其导出的是关于 上的不等式。可以给出关于极小元、最小元的集合描述。此时广义不等式 的含义是 在 的右方、上方。 是集合 的极小元,表示 中其他所有点都在其右方、上方。 为集合 的极小元,说明 中没有任何一个点在 的左方、下方。可以参考下图, 和 分别是其所在多边形的最小元、极小元
我们称一个锥
补充:偏序关系,
,如果关系 是自反、反对称、传递的,那么 是 上的偏序关系, 可以用 表示。例如小于等于关系就是 上的偏序关系
正常锥
当
时,偏序关系 就是通常意义上的 ,相应的,严格偏序关系 与 上的 对应。因此,广义不等式包含了 上的不等式,这是广义不等式的一种特殊情况
相应的严格广义不等式
以上这些性质从定义和正常锥、凸锥的知识很容易推出
wire
在Verilog中,wire
可以看作一个导线(或则任意位宽的总线),需要注意的几点是:
wire
可以用于将实例化时的输入输出端口连接到电路的其他地方wire
类型必须被其他东西驱动而不能用于储存其他数据wire
类型在always@
块中不能作为=
和<=
的左值wire
是assign
语句的左值唯一合法的类型wire
只能用于组合逻辑电路reg
reg
和wire
比较类似,但是能够储存信息,类似寄存器,需要注意的几点是:
reg
可以在实例化模块时连接其输入reg
不可以再实例化模块时连接其输出reg
可以在声明模块时作为其输出reg
不可以在声明模块时作为其输入reg
类型时always@
块中作为=
,<=
左值的唯一合法类型reg
不能作为assign
语句的左值reg
类型可以创建寄存器,以用于类似于always@(posedge)
的块reg
可以描述组合逻辑也可以描述时序逻辑reg
和wire
的共性always@
块中=
,<=
的右值以及assign
的右值本次我们来讨论一类叫线性分式的函数,其比仿射函数更加普遍,而且也是保凸的。
我们定义
透视函数可以理解为,对一个
可以用小孔成像来理解透视函数,如下图的小孔成像,
上方的一系列点透过小孔映射到了 上。原来的点何其对应的像的映射就对应了透视函数。
通过小孔成像的例子,我们可以很直观地理解透视函数的一系列性质。
如果
更加严谨地,我们可以证明线段在透视函数地作用下会被映射为线段。假设
容易知道其中
接着,假设
一个凸集在透视函数下面的原像也是凸的:如果
假设
显然,
从而知道上面需要说明的结论是显然的。
线性分式函数是由透视函数和仿射函数复合而成的。设
则由
可以将线性分式函数表示为:将矩阵
线性分式函数是保凸的。如果
根据前面的结果可以知道线性分式函数的逆映射也是保凸的
一些时序逻辑电路的行为级建模的例子
对于双向移位寄存器74HCT194,其建模时要实现的核心功能在于,
1 | module shift74x194_beh( |
参数n设置位数,Up_down为1/0控制计数器递增/递减
1 | module updowncount #(parameter n=4) |
1 | module D_FF( |
1 | module m10_counter( |
需要注意的是,电路的功能描述和具体的硬件电路结构是无关的,从这个模10计数器的建模中可以看出这一点
以检测连续输入序列
1 | module Mealey_sequence_detector( |
verilog的行为级建模使用关键词initial和always定义的两种结构类型的语句。一个模块的内部可以包含多个initial和always语句块,仿真的时候,这些语句块同时并行执行,直到仿真结束
initial语句块通常用来描述激励信号,仿真时仅执行一次,课本中没有详细介绍。
always语句本身是一个无限循环语句,即不停地循环执行其中地内容。其语法一般如下
1 | always @(敏感信号列表) |
敏感信号分为两种,电平敏感信号和边沿敏感信号
1 | always @(D,S) |
上面是电平敏感信号,当D或S的电平改变的时候,会执行always块中的内容
而边沿敏感信号分别使用posedge和negedge表示上升沿、下降沿
1 | always @(posedge CP,negedge CR) |
表示CP信号上升沿或者CR信号下降沿来的时候执行always语句块中的内容
always块内部的赋值语句分为两种:阻塞型和非阻塞型。其中阻塞型使用"=",非阻塞型使用"<="。
阻塞型赋值的多条语句是逐条进行的,而非阻塞型赋值可以理解为是同时进行的。
门控D锁存器
1 | module D_latch( |
基本D触发器
1 | module DFF( |
带有同步清零功能的D触发器
1 | module sync_rst_DFF( |
在之前的内容中我们讨论了一些凸集。接下来会讨论一些保凸运算,顾名思义,保凸运算会保持集合的凸的性质。研究保凸运算的意义在于,这样我们可以通过一些已知的凸集去构造新的凸集,同时也可以利用这些运算的保凸的性质去确定一些其他集合的凸性。
交集是保凸的,也就是说 ,如果
一个简单的例子是,多面体是半空间和超平面的交集,因此多面体是空的。
一个闭集
与此同时,并集是不具有保凸性质的,容易举出的例子是:一般来说两条直线的并集不是凸集。
如果一个函数
假设
上面的这个结论从几何上是容易解释的:一个点在一个线段上,那么经过
由上面的结论,容易得出类似的:如果
两个简单例子是伸缩和平移。还有例子是,一个凸集向某几个坐标的投影是凸的,即如果
两个集合的和可以定义为:
如果
例如,椭球
是单位Euclid球 在仿射映射 下的像。
使用记号
这可以看成是一个维数为
集合
举个例子,对于
下面的图显示了这个锥的边界
多面体定义为有限个线性等式和不等式的解集。
因此,多面体时有限个半空间和超平面的交集。仿射集合(例如子空间、超平面、直线)、射线、线段、半空间都是多面体。
多面体是凸集。有界的多面体有时也称为多胞形。下图为五个半空间的交集定义的多面体
可以使用紧凑表达式
其中
此处的
例如,非负象限是具有非负分量的点的集合,即
非负象限既是多面体也是锥,因此被称为多面体锥
单纯形是一类重要的多面体。设
这个单纯形的仿射维数为
一些常见的单纯形
1维单纯形是一条线段;2维单纯形是一个三角形;3维单纯形是一个四面体
单位单纯形是由零向量和单位向量
决定的 维单纯形,可以表示为满足下列条件的向量的集合: 𝟙 概率单纯形是由单位向量
决定的 维单纯形,可以表示为满足下列条件的向量的集合 。概率单纯形中的向量对应于含有 𝟙 个元素的集合的概率分布, 可理解为第 个元素的概率
为了用多面体来描述单纯形,采用以下步骤将单纯形的定义式变形:
由单纯形的定义式可知,
可以知道
对于
对式子
从上面两个式子中可以看出当且仅当
这些是
有限集合
这个凸包是一个有界的多面体,但是无法简单地用多面体地定义式来描述(即难以用线性等式和不等式地集合将其表示出来)
凸包的一个扩展表示是
“如何表示多面体”这一问题有一些非常实用的结果,一个简单的例子是定义在