北太天元科学计算与系统仿真软件 | v4.1 | 20250527 |
新增面向对象编程功能:
Dependent:从属属性
Constant:常量属性
支持如下属性特性
支持定义属性 get 和 set 方法
新增对持久变量的支持
try - catch 新增一个用法,现在可以不写 catch
块的内容,含义为执行 try
的内容,如果出错就忽略剩余内容,继续执行后面的语句。
try b = sin('a'); % 运行到此处出错,会执行第 5 行的内容 b = 1; end disp('hello');
函数名 | 函数说明 |
evalc | 对字符串表达式求值,并捕捉表达式输出结果 |
properties | 获取类的属性名 |
methods | 类方法名称 |
superclasses | 超类名称 |
isprop | 确定属性是否由对象定义 |
ismethod | 确定对象是否具有指定的方法 |
tcpclient | 创建与 TCP/IP 服务器的 TCP/IP 客户端连接 |
tcpclientfind | 查找 TCP/IP 连接 |
echotcpip | 启动或停止 TCP/IP 回显服务器 |
tcpserver | 创建 TCP/IP 服务器 |
tcpserverfind | 查找 TCP/IP 服务器 |
echoudp | udp 回显服务器 |
udpportfind | 查找所有 udp 连接 |
udpport | 创建 udp 连接 |
xlsread | 读取电子表格文件 |
textscan | 从文本文件或字符串读取格式化数据 |
h5read | 从 HDF5 数据集读取数据 |
qz | 广义特征值的广义舒尔 (QZ) 分解 |
ordqz | 在 QZ 分解中将特征值重新排序 |
注:更详细的函数使用说明请参考帮助文档。
支持香港手机号码注册登陆
新增数据类型timetable 在工作区的展示
支持类属性在工作区的修改及高亮
支持以编程方式开发 App。
函数 | 描述 |
uifigure | 创建用于设计 App 的图窗 |
uiprogressdlg | 创建进度对话框 |
uialert | 显示警报对话框 |
uiaxes | 为 App 中的绘图创建 UI 坐标区 |
uiopen | 打开文件选择对话框并将选定的文件加载到工作区中 |
uimenu | 创建菜单或菜单项 |
uitable | 创建表用户界面组件 |
uilablel | 创建标签组件 |
uibutton | 创建普通按钮 |
uidropdown | 创建下拉组件 |
uilistbox | 创建列表框组件 |
uieditfield | 创建文本或数值编辑字段组件 |
uigetdir | 打开文件夹选择对话框 |
函数 | 描述 |
detectdrift | 基于置换检验检测基准数据与目标数据间的分布漂移 |
histfit | 具有分布拟合的直方图 |
mle | 最大似然估计 |
makedist | 创建概率分布对象 |
fitdist | 对数据进行概率分布对象拟合 |
probplot | 绘制概率图 |
qqplot | Quantile-quantile图 |
proflik | 概率分布的轮廓似然函数 |
runstest | 随机性检验 |
hmcSampler | 哈密尔顿蒙特卡洛采样器 |
BinomialDistribution | 二项分布 |
MultinomialDistribution | 多项分布 |
NegativeBinomialDistribution | 负二项分布 |
PoissonDistribution | 泊松分布 |
BetaDistribution | beta 分布 |
BirnbaumSaundersDistribution | 伯恩鲍姆-桑德斯分布 |
BurrDistribution | 伯尔 XII 型分布 |
ExponentialDistribution | 指数分布 |
ExtremeValueDistribution | 极值分布 |
GammaDistribution | gamma 分布 |
GeneralizedExtremeValueDistribution | 广义极值分布 |
GeneralizedParetoDistribution | 广义帕累托分布 |
paretotails | 帕累托分布 |
HalfNormalDistribution | 半正态分布 |
InverseGaussianDistribution | 逆高斯分布 |
KernelDistribution | 核分布 |
LogisticDistribution | 逻辑分布 |
LoglogisticDistribution | 对数逻辑分布 |
LognormalDistribution | 对数正态分布 |
LoguniformDistribution | 对数均匀分布 |
NakagamiDistribution | Nakagami 分布 |
NormalDistribution | 正态分布 |
PiecewiseLinearDistribution | 分段线性分布 |
RayleighDistribution | 瑞利分布 |
RicianDistribution | 莱斯分布 |
StableDistribution | 稳定分布 |
tLocationScaleDistribution | t 位置尺度分布 |
TriangularDistribution | 三角分布 |
UniformDistribution | 均匀分布(连续) |
WeibullDistribution | 威布尔分布 |
新增函数
函数 | 描述 |
mopso | 多目标粒子群算法 |
vega | 向量化遗传算法 |
函数新增算法
函数 | 新增功能 |
gamultiobj | 新增NSGA MOGA算法 |
函数 | 描述 |
icare | 连续时间代数Riccati方程的隐式求解器 |
idare | 离散时间代数Riccati方程的隐式求解器 |
lyap | 求解离散时间李雅普诺夫方程 |
lqg | 线性二次高斯控制设计 |
lqgreg | 构建线性二次高斯调节器 |
lqi | 线性二次积分控制 |
lqr | 线性二次调节器设计 |
kalman | 卡尔曼滤波 |
h2syn | h2控制器综合 |
新增如下功能:
锁定的试验平均值或事件相关电位数据处理及可视化
对单通道事件相关数据的多个epoch进行时间/频率分析
导入Neuroscan文件的辅助功能函数
模块 | 分类 | 功能 |
sFunction | userDefinedFuncs | 支持用户通过level-1 m或c模板实现自定义模块功能 |
模块 | 分类 | 功能 |
Generate Run Script | AerospaceToolbox\Flightgear | 生成FlightGear运行脚本模块 |
Pack net_fdm Packet for FlightGear | AerospaceToolbox\Flightgear | 生成FlightGear的net_fdm数据包 |
Receive net_ctrl Packet from FlightGear | AerospaceToolbox\Flightgear | 从FlightGear接收net_ctrl数据 |
Send net_fdm Packet to FlightGear | AerospaceToolbox\Flightgear | 将net_fdm数据包传输到目标IP地址和端口的FlightGear中 |
Simulation Pace | AerospaceToolbox\Flightgear | 设置仿真速率 |
Unpack net_ctrl Packet from FlightGear | AerospaceToolbox\Flightgear | 解码从FlighGear接收到的net_ctrl数据包 |
WGS84 Gravity Model | AerospaceToolbox\Flightgear | 实现1984年世界大地测量系统(WGS84)地球重力的表示 |
6DOF (Euler Angles) | AerospaceToolbox\Flightgear | 实现六自由度运动方程的欧拉角表示 |
6DOF ECEF (Quaternion) | AerospaceToolbox\Flightgear | 在地心地固(ECEF)坐标系中实现六自由度运动方程的四元数表示 |
6DOF Wind (Quaternion) | AerospaceToolbox\Flightgear | 实现相对于风轴的六自由度运动方程的四元数表示 |
6DOF Wind (Wind Angles) | AerospaceToolbox\Flightgear | 实现六自由度运动方程的风向角表示 |
1D Controller A(v) B(v) C(v) D(v) | AerospaceToolbox\Flightgear | 实现基于一个调度参数的增益调度状态空间控制器 |
1D Observer Form A(v) B(v) C(v) F(v) H(v) | AerospaceToolbox\Flightgear | 实现基于一个调度参数的增益调度状态空间控制器(以观测器形式) |
2D Controller A(v) B(v) C(v) D(v) | AerospaceToolbox\Flightgear | 实现基于两个调度参数的增益调度状态空间控制器 |
Attitude Profile (Geographic Pointing) | AerospaceToolbox\Flightgear | 计算最短四元数旋转 |
ECI Position to AER | AerospaceToolbox\Flightgear | 将地心惯性(ECI)坐标转换为方位角坐标 |
ECI Position to LLA | AerospaceToolbox\Flightgear | 将地心惯性(ECI)坐标转换为大地纬度、经度和高度(LLA)坐标 |
Geodetic to Geocentric Latitude | AerospaceToolbox\Flightgear | 使用大地纬度和椭球高度将大地纬度转换为地心纬度和从行星中心到重心的任意半径 |
LLA to ECI Position | AerospaceToolbox\Flightgear | 将大地纬度、经度、高度(LLA)坐标转换为地心惯性(ECI)坐标 |
支持基础状态建模:
支持状态定义:状态名称、状态入口、执行和退出的关键字(en、du、ex、entry、during、exit)
状态转移功能:动作、条件、时间事件;支持逻辑运算和函数调用
变量区功能:支持输入、输出、局部变量;
时间事件函数:before、after、at、every、temporalCount、elapsed、count、duration;
状态、事件关键字检查和语法检查
支持m语法
函数 | 描述 |
AILoadChat | 加载历史的对话信息 |
AIInit | 该函数根据用户指定的参数初始化人工智能设置。 |
AIChat | 使用智能问答系统对用户的提问进行回答。 |
AISetParams | 修改模型的参数 |
⽀持创建 python 根对象、⽀持调⽤python函数、⽀持disp(变量名)展⽰详细信息、⽀持在当前环境安装python包、⽀持设置和切换指定的python虚拟环境。
函数 | 描述 |
pipcmd | 使用 pip 在当前环境进行Python包管理 |
pyenv | 查看Python环境 |
pyroot | 获取 Python 插件根对象用于调用 Python 函数 |
函数 | 描述 |
sym | 函数创建符号变量或表达式 |
syms | 函数创建多个符号变量或表达式 |
simplify | 函数简化符号表达式 |
taylor | 求表达式的泰勒级数 |
limit | 符号表达式的极限 |
int | 求不定积分或定积分 |
symdiff | 求表达式的导数或偏导数 |
函数名 | 函数说明 |
bctree | 图的块割点树 |
allpaths | 用于计算图中从指定源节点到目标节点的所有路径 |
minspantree | 用于计算无向图的最小生成树 |
hascycles | 用于检测给定图是否包含回路 |
allcycles | 用于提取图中所有回路 |
cyclebasis | 用于提取图的基本圈 |
graphneighbors | 返回图节点的相邻节点 |
predecessors | 获取指定节点的前继节点 |
successors | 获取指定节点的后继节点 |
try
catch
使用方式更灵活,关键字后不必接逗号即可正常使用。catch
语句不接逗号时,具体行为如下:
紧跟着一个变量名,那么该变量名将会被识别为异常对象
其他情形,那么该语句会被识别为普通的可执行语句,不生成表示异常的对象(在之前的版本中,这样使用会出错或报告警告)
global
被实现为关键字,在旧版本中它是内置函数。语法为:
global var1 var2 ...
因此,
global('var1')
这类语法将不再支持。除以上修改外,全局变量的使用机制未做更改。
规范函数定义语法。在之前的天元中,函数定义语句的入参和出参可以为任意表达式。例如:
function myfun(a(1), b, c.d) end
现在解释器增加如下规范:
输入参数:只能是变量名或 ~
(占位符)
输出参数:只能是变量名
语法检查变得更严格,变量名不符合规则会报错。
改进命令语法对逗号的处理。旧版命令语法中,逗号 ,
被无条件视为是一句命令语法的结束,现在做出如下调整:
逗号前左右括号数量相等,那么视为语句结束
逗号前左右括号数量不等,那么视为文本参数
括号不区分种类,例如 (]
也视为括号数量相等
举例:
disp a(1,2) % 输出 a(1,2),之前的版本会报错括号不匹配 disp a,b % 输出 a,然后输出 b 的内容 disp a)(,) % 语法错误,最后面的 ) 没有对应的 (
在 M 函数中使用静态的方式扫描变量名(和代码执行顺序无关),符号被识别为变量后(例如出现在赋值语句左侧,或是作为函数的输入/输出参数), 不可作为函数调用。例如如下代码,旧版软件会正常执行,新版软件会先将 sin
识别为变量,进而导致 a = sin(1)
执行出错。
function myfun a = sin(1); sin = 1; end
备注:
M 脚本、命令行语句不会进行静态扫描,仍然遵循顺序执行逻辑,函数与变量可以自由切换
静态扫描不会处理隐式创建的变量,例如 eval
函数,load
载入的变量
如果后续使用 clear
清除与函数名同名的变量,那么变量会被还原为函数
匿名函数现在支持使用 nargin
nargout
短路逻辑运算&&
||
支持输入为 char 类型的数据
北太天元软件关闭时会自动卸载所有插件,这样所有插件的 bxPluginFini
函数会被自动触发
函数名 | 优化内容 |
eval, evalin | 当输入是字面量时,优化了反复调用的执行效率 |
str2func | 支持将静态成员函数转化为句柄,例如 str2func('myclass.sf') |
svd | 支持指定以列向量的形式返回奇异值 |
svds | 支持 double 数据类型 |
datetime | 支持 'ConvertFrom' 参数 |
三角函数 | 支持稀疏矩阵 |
cellfun, structfun | 支持 datetime 数据类型 |
sum | 支持稀疏矩阵 |
xor, &, | | 支持稀疏矩阵 |
isequaln | 支持稀疏矩阵 |
cast | 支持稀疏矩阵 |
double | 支持稀疏矩阵 |
dot | 支持高维数组 |
conj | 支持处理逻辑数组 |
rand, randn, randi | 支持 'like' 参数 |
bicg, bicgstab, bicgstabl, cgs, gmres | 增加对非方阵、非列向量等非法类型的验证判断 |
cumsum, cumprod | 实现溢出加法、溢出乘法 |
注:更详细的函数使用说明请参考帮助文档。
输入框和文本搜索框优化,增加统一样式的右键菜单
优化tooltips显示
优化窗口阴影显示
函数 | 描述 |
randg | 支持 'like' 参数 |
以下函数使用面向对象方法重构
函数 | 描述 |
dss | 描述性ss的模型 |
pid | pid控制器 |
pidstd | 标准结构的pid控制器 |
filt | DSP格式的离散传递函数 |
rss | 随机连续传递函数 |
drss | 随机离散传递函数 |
sparss | 解析状态空间模型 |
sparssdata | 提取状态空间模型参数 |
step | 阶跃响应 |
impulse | 脉冲响应 |
lsim | 给定输入的系统响应 |
isct | 判断模型是否连续 |
isdt | 判断系统是否离散 |
isempty | 判断系统是否为空 |
isfinite | 判断系统参数为无穷 |
isproper | 判断模型是否合理 |
isreal | 判断模型参数是否为实数 |
issiso | 判断系统是否为单输入单输出 |
isstable | 判断系统是否稳定 |
isstatic | 判断系统是静态还是动态 |
order | 模型阶次 |
ndims | 模型维度 |
size | 模型输入和输出维度 |
bodemag | bode幅值图 |
norm | 模型范数 |
damp | 模型阻尼和固有频率 |
pzmap | 极点和零点图 |
piddata | PID控制器参数 |
stepinfo | 阶跃信息 |
lsiminfo | 仿真信息 |
ctrb | 计算可控性矩阵 |
ctrbf | 可控性梯形形式 |
get | 获取模型属性值 |
obsv | 计算可观测性矩阵 |
obsvf | 可观测性梯形形式 |
pole | 系统极点 |
set | 设置模型属性值 |
ss | 创建状态空间模型 |
ssdata | 获取状态空间模型数据 |
tf | 创建传递函数模型 |
tfdata | 获取传递函数模型数据 |
zero | 系统零点 |
zpk | 创建零极点增益模型 |
zpkdata | 获取零极点增益模型数据 |
支持包含matlab function和虚拟子系统的simulink模型导入真元。
支持model-exchange模型导入(fmi协议1.0/2.0/3.0)。
新增co-simulation模型导入的fmi协议1.0/3.0支持。
完善了.poscar文件类型光子晶体的种类。
取下标/赋值
修复了 a(1) = b(2)
不会输出到命令行的问题
现在对于取下标语句,只能指定 1 个输出,使用两个以上输出会报错,例如 [x, y] = A(1)
当 A
是一个变量时会报错
解决了一个 {end}
在嵌套结构中会报错的问题
面向对象
解决了某些情况下超类构造函数重复调用或没有调用的问题
取值为枚举值的各特性现在可以使用字符向量指定,例如 Access = 'public'
类定义文件中的局部函数现在可以访问类的私有/保护成员
修复在子类重写方法后,在父类无法调用该方法的问题
修复了在其他类内调用类 A 的构造函数,类 A 超类的 protected
构造函数无法调用的问题
矩阵构造与运算
解决了 ~
^
等符号在使用空格分隔的矩阵数组时解析错误的问题
函数句柄/匿名函数
解决了一个将具名函数句柄赋值给另一普通函数名后,生成语法不正确的问题。举例:
cos = @sin; a = cos;
这里
cos
是内置函数,之前的版本将
a = cos
识别成了函数调用(实际应为变量赋值)
解决了匿名函数体没有用到参数时,输入实参不足会报错的问题。例如:
fh = @(x) 1; fh() % 返回 1,旧版会提示输入参数不足
修复了匿名函数转字符串可能会有额外括号的问题
解决了静态方法取函数句柄时,输出参数未被正确设置的问题
函数名 | 修复内容 |
dot | 修复输入空矩阵时闪退的问题 |
tensorprod | 修复传入 all 参数时,返回值类型有误的问题 |
quadgk | 修复变量范围相等时无法计算的问题 |
orth | 修复非法输入时报错不准的问题 |
interp1q | 修复输入稀疏矩阵时异常报错的问题 |
xlsread | 修复无法正确读取 xlsx 文件中日期单元格的问题 |
fscanf | 修复以 %c 形式读取时闪退,且不支持指定读取宽度的问题 |
bitand | 修复未指定 assumedtype 时结果错误的问题 |
bitshift | 修复指定位数超过数据位数时存在结果错误的问题 |
bitset | 修复输入数组存在空时返回维度错误的问题;修复指定位数为标志位时存在结果错误的问题 |
bitget | 修复指定位数超过 int32 时存在结果错误的问题 |
readmatrix | 修复读取单列或单行 xls 文件时返回为空,无法跳过空行空列和标题行的问题 |
timetable | 修复只指定行时间时报错的问题 |
ismissing | 修复输入字符串数组中含有 nan 时,计算错误的问题 |
regexp | 修复输入空字符串时闪退的问题 |
insertBefore | 修复未处理空字符向量的问题 |
strcat | 修复不能处理空数组的问题 |
strrep | 修复不支持参数指定为空字符串的问题 |
strsplit | 修复不能处理空输入的问题 |
deblank | 修复不能处理以 '\0' 结尾字符串的问题 |
extractAfter | 修复第二个参数不能指定为空输入的问题 |
replaceBetween | 修复开始文本模式和终止文本模式不能同时指定为空的问题 |
any | 修复输入空稀疏矩阵时计算不正确的问题 |
writematrix | 修复不能正确处理制表符的问题 |
并置 | 修复 char 和复数并置未报错,与小数并置结果有误的问题 |
注:更详细的函数使用说明请参考帮助文档。
模块 | 分类 | 功能 |
integratorLimited | continuous | 修复外部x0不起效导致计算错误的问题 |
integratorWraped | continuous | 修复外部x0不起效导致计算错误的问题 |
内核
常量属性默认值不能使用其它常量属性的值,会闪退