# 2026a V26.3 发行说明
发行时间:2026-04-29
更新与修复:
- V26.3.1:此更新修复安装过程中“文件占用”场景的提示,支持自动关闭占用程序并继续安装。
V26.3 版本中,交互式编程环境优化了 IDE、调试、APP Designer、代码生成、AI 插件、M 导入工具、帮助文档等多个模块;科学计算函数库新增了模糊逻辑工具箱,优化了 17 个函数库及若干个函数;科学计算 APP 优化了滤波器设计工具。
# 新增功能
# ★MWORKS AI
推出 MWORKS AI,从“AI 辅助问答”迈向“Agent 自主执行”,不止于问答与建议,AI 可面向目标任务自主拆解,规划方案与执行流程。
# 交互式编程环境
IDE 界面改进
- 新增判断 Julia 运行主脚本,可以判断当前运行的 Julia 主脚本;
- 新增代码检查项,检查部分从 M 兼容代码迁移到 Julia 语言时可能发生的常见错误,如“a(1)”函数调用错误用作数组索引,又如
max([1, 2])函数的错误使用(应替换为max(1, 2)或maximum([1, 2])); - 新增代码检查项,检查用户代码中可能会错误覆盖同元函数库内部类型的变量,提醒用户考虑重命名相关符号;
- 新增
try-finally代码模板,以关键词“tryf”触发,方便用户编写带有 finally 关键词的 try 语句块; - 优化符号重命名功能,无法重命名的符号会弹出相应提示;
- 修改函数“更多操作”菜单的插入文档注释功能,插入的注释格式与
"""三引号触发操作功能保持一致; - 变量编辑器支持撤销还原(Ctrl + Z/Y)操作;
- 性能分析报告页面性能优化,提升 10 倍以上,16MB 大小的文件渲染从 15s 提升到 1s,交互延迟从 22s 提升到 1s;
- 导出的性能分析报告支持跨平台打开,Online 上导出的 profile 文件支持在 Windows 单机版上正常打开。
调试功能改进
- 调试断点的条件表达式输入时进行语法检查;
- 调试控制台自动识别代码块是否输入完成。
APP Designer 功能改进
- ★新增回调函数调试功能;
- 新增状态按钮组组件。
Syslab 代码生成功能改进
信号库新增 1 个精准对标函数(upsample),数学库新增 20 个精准对标函数(interp2(包含 16 个重载的函数)、lscov(2 个重载的函数)、pinv(1 个重载函数)、trapz(1 个重载函数))。
M 导入工具改进
- 支持类文件夹和命名空间;
- ★支持 matpower 开源工具箱;
- 新增 92 个 M 函数,当前 M 函数总数 2169 个。
帮助文档改进
新增 1 个数学统计与优化、1 个图像的综合示例,共提供 309 个综合示例。
# 科学计算函数库
# 功能优化
# 性能优化
| 函数库 | 优化函数 | 优化前/s | 优化后/s | 优化后 / 优化前 | 备注 |
|---|---|---|---|---|---|
| 基础库 | dex2hex | 0.263675 | 0.190761 | 7.23E-01 | 300W |
| 基础库 | isfield | 0.021466 | 0.011263 | 5.25E-01 | 仅优化首次 |
| 基础库 | load | 3.104906 | 1.799875 | 5.80E-01 | 400W .mat(首次) |
| 基础库 | load | 1.788303 | 1.033358 | 5.78E-01 | 400W .jld2(首次) |
| 基础库 | load | 1.478 | 0.686378 | 4.64E-01 | 400W .txt |
| 基础库 | log2 | 0.167958 | 0.022121 | 1.32E-01 | 600W(out=true) |
| 基础库 | eye | 0.017997 | 0.001062 | 5.90E-02 | 1000*1000 UInt32(首次) |
| 基础库 | ty_ceil | 0.122913 | 0.045077 | 3.67E-01 | 600W 转 UInt32(首次) |
| 基础库 | ty_floor | 0.134343 | 0.046826 | 3.49E-01 | 600W 转 UInt32(首次) |
| 基础库 | strncmpi | 0.707298 | 0.06537 | 9.24E-02 | 500W(寻找前 100W) |
| 基础库 | datenum | 0.051435 | 0.004686 | 9.11E-02 | 300W |
| 基础库 | bsxfun | 1.36E-06 | 2.07E-07 | 1.52E-01 | / |
| 基础库 | isduration | 5.56E-04 | 8.40E-09 | 1.51E-05 | 200W |
| 基础库 | fileparts | 11.807 | 3.708 | 3.14E-01 | 400W |
| 基础库 | ty_unique | 111.674156 | 17.695 | 1.58E-01 | 40 亿仿用户数据(byrows) |
| 基础库 | ty_unique | 6.693 | 1.368 | 2.04E-01 | 1000W*9(byrows) |
| 数学库 | sph2cart | 3.6935026 | 1.3078071 | 3.54E-01 | / |
| 数学库 | erfc | 20.4128 | 8.77753 | 4.30E-01 | / |
| 数学库 | erfcinv | 1.6505 | 0.192508 | 1.17E-01 | / |
| 数学库 | full | 0.2987136 | 0.1629795 | 5.46E-01 | / |
| 数学库 | erf | 8.999501 | 3.223409 | 3.58E-01 | / |
| 数学库 | erfinv | 1.008255 | 0.666158 | 6.61E-01 | / |
| 数学库 | erfcx | 31.308055 | 12.221253 | 3.90E-01 | / |
| 数学库 | randperm | 7.6495722 | 1.7679478 | 2.31E-01 | / |
| 数学库 | randpermk | 2.1593018 | 1.4783487 | 6.85E-01 | / |
| 数学库 | griddata | 177.608 | 5.29804 | 2.98E-02 | v4 算法 |
| 数学库 | griddata | 0.855854 | 0.0242006 | 2.83E-02 | 3 维 nearest 算法 |
| 数学库 | filter1 | 1.4105044 | 0.2644221 | 1.87E-01 | / |
| 数学库 | interpn | 1.6314341 | 0.1056597 | 6.48E-02 | / |
| 数学库 | hankel | 1.1087576 | 0.7270297 | 6.56E-01 | / |
| 数学库 | roots | 2.1357222 | 2.0796202 | 9.74E-01 | / |
| 数学库 | interp2 | 0.0245062 | 0.0229204 | 9.35E-01 | linear 算法 |
| 数学库 | conv2 | 24.2288867 | 13.1327805 | 5.42E-01 | / |
| 数学库 | mfft | 6.3222395 | 3.6124964 | 5.71E-01 | / |
| 数学库 | pascal | 0.2115971 | 0.1750196 | 8.27E-01 | / |
| 数学库 | ordeig | 1.7492737 | 0.1284751 | 7.34E-02 | / |
| 数学库 | interp1 | 0.8896676 | 0.3100879 | 3.49E-01 | makima 算法 |
| 曲线拟合库 | prepareCurveData | 0.0365251 | 0.0021475 | 5.88E-02 | prepareCurveData |
| 曲线拟合库 | prepareSurfaceData | 0.0487967 | 0.0035191 | 7.21E-02 | prepareSurfaceData |
| 统计库 | makedist | 0.0420822 | 0.0107802 | 2.56E-01 | makedist |
| 统计库 | range | 13.9954946 | 1.9302933 | 1.38E-01 | range |
| 统计库 | trimmean | 0.8176044 | 1.98E-06 | 2.42E-06 | trimmean |
| 信号库 | resample | 6.96E-02 | 1.87E-02 | 2.69E-01 | 150W |
| 信号库 | upfirdn | 6.95E-02 | 1.77E-02 | 2.55E-01 | 150W |
| 通信库 | qammod | 4.93E-03 | 2.61E-03 | 5.29E-01 | 100w |
| 通信库 | quantiz | 2.90E+00 | 1.29E-02 | 4.45E-03 | 100w |
| 通信库 | eyediagram | 2.30E-01 | 1.17E-01 | 5.10E-01 | / |
| 通信库 | poly2trellis | 5.04E-05 | 1.24E-06 | 2.46E-02 | / |
| 通信库 | vitdec | 1.08E-03 | 7.62E-04 | 7.08E-01 | / |
| 通信库 | comm_ChannelFilter | 4.22E-02 | 1.41E-02 | 3.35E-01 | / |
| 通信库 | oct2dec | 5.11E-03 | 7.54E-04 | 1.47E-01 | / |
| 通信库 | oct2poly | 5.43E-06 | 1.93E-06 | 3.55E-01 | / |
| 通信库 | comm_ViterbiDecoder | 1.94E-05 | 1.54E-05 | 7.94E-01 | / |
| 通信库 | mlseeq | 5.82E-05 | 4.81E-05 | 8.26E-01 | / |
| 通信库 | comm_MLSEEqualizer | 1.11E-04 | 8.38E-05 | 7.56E-01 | / |
| DSP 系统库 | firhalfband | 8.74E-07 | 5.37E-07 | 6.15E-01 | / |
| DSP 系统库 | firceqrip | 6.52E-04 | 1.23E-04 | 1.89E-01 | / |
| DSP 系统库 | firminphase | 8.54E-04 | 8.24E-04 | 9.65E-01 | / |
| 控制系统库 | upsample | 0.119216 | 0.043828 | 3.68E-01 | / |
| 控制系统库 | init | 0.023304 | 0.012124 | 5.20E-01 | / |
| 控制系统库 | sim | 5.388568 | 0.087033 | 1.62E-02 | / |
| 控制系统库 | reduce | 0.391426 | 0.380147 | 9.71E-01 | / |
| 图像处理库 | padarray | 5.90E-04 | 4.50E-04 | 7.63E-01 | constant 算法 |
| 图像处理库 | padarray | 2.47E-03 | 1.92E-03 | 7.77E-01 | circular 算法 |
| 图像处理库 | padarray | 2.70E-03 | 1.98E-03 | 7.33E-01 | symmetric 算法 |
| 图像处理库 | padarray | 2.58E-03 | 2.10E-03 | 8.14E-01 | replicate 算法 |
| 图像处理库 | close | 1.70E-05 | 3.60E-07 | 2.12E-02 | 100w |
| 图像处理库 | open | 4.00E-09 | 3.60E-13 | 9.00E-05 | 100w |
| 机器学习库 | test | 0.0195 | 0.00732 | 3.75E-01 | / |
# 基础工具箱
dec2hex:针对 dec2hex 进行了性能优化;
using TyBase using BenchmarkTools D = repeat([1023 122 14], 1000000, 1); @btime dec2hex(D);大致的执行时间是:
V26.2: 0.26 秒
V26.3: 0.19 秒isfield:针对 isfield 首次运行进行了性能优化;
using TyBase struct MyS x::AbstractArray y::AbstractArray title::AbstractString end x = LinRange(0, 2 * pi, 100) y = sin.(x) title = "y = sin(x)" S = MyS(x, y, title) field = ["x", "y", "z", "title", "error"] @time isfield(S, field);大致的执行时间是:
V26.2: 0.021 秒
V26.3: 0.011 秒load:针对 load 运行 ascii 文件、首次运行 .mat、.jld2 文件进行了性能优化;
加载 ascii 文件:
using TyBase using BenchmarkTools A = repeat( [ 8 7 88 77 ], 1000000, ) filename = "load_test.txt" save(filename, "-ascii"; A); @btime load(filename);大致的执行时间是:
V26.2: 1.48 秒
V26.3: 0.69 秒首次运行加载 .mat 文件:
using TyBase A = repeat( [ 8 7 88 77 ], 1000000, ) filename = "load_test.mat" save(filename, "-mat"; A); @time load(filename);大致的执行时间是:
V26.2: 3.10 秒
V26.3: 1.80 秒首次运行加载 .jld2 文件:
using TyBase A = repeat( [ 8 7 88 77 ], 1000000, ) filename = "load_test.jld2" save(filename, "-jld2"; A); @time load(filename);大致的执行时间是:
V26.2: 1.79 秒
V26.3: 1.03 秒
log2:针对 log2 指定参数 out=true 时进行了性能优化;
using TyBase using BenchmarkTools X = repeat([0 1 2 10 20.5 30.1], 1000000, 1) @btime log2.(X; out=true);大致的执行时间是:
V26.2: 0.17 秒
V26.3: 0.022 秒eye:针对 eye 首次运行且指定类型的场景进行了性能优化;
using TyBase @btime eye(UInt32, 1000, 1000);大致的执行时间是:
V26.2: 0.018 秒
V26.3: 0.0011 秒ty_ceil:针对 ty_ceil 首次运行且指定类型的场景进行了性能优化;
using TyBase X = repeat([0 1.1 2.2 10 20.8 30.6], 1000000, 1) @time ty_ceil(UInt32, X);大致的执行时间是:
V26.2: 0.12 秒
V26.3: 0.045 秒ty_floor:针对 ty_floor 首次运行且指定类型的场景进行了性能优化;
using TyBase X = repeat([0 1.1 2.2 10 20.8 30.6], 1000000, 1) @time ty_floor(UInt32, X);大致的执行时间是:
V26.2: 0.13 秒
V26.3: 0.047 秒strncmpi:针对 strncmpi 进行了性能优化;
using TyBase using BenchmarkTools s1 = repeat(["Jacques", "Jean", "Jeanne", "Jean-Luc", "Julie"], 1000000, 1); s2 = "JEAN"; @btime strncmpi.(s1, s2, 1000000);大致的执行时间是:
V26.2: 0.71 秒
V26.3: 0.065 秒datenum:针对 datenum 进行了性能优化;
using TyBase using BenchmarkTools formatIn = "mm/dd/yy"; t1 = DateTime("09/16/2007", formatIn) t2 = DateTime("05/14/1996", formatIn) t3 = DateTime("11/29/2010", formatIn) t = [t1, t2, t3] t = repeat(t, 1000000, 1) @btime datenum(t);大致的执行时间是:
V26.2: 0.051 秒
V26.3: 0.0047 秒bsxfun:针对 bsxfun 进行了性能优化;
using TyBase using BenchmarkTools fun = (a, b) -> a - exp(b); a = 1:7000; b = repeat(pi * [0 1 / 4 1 / 3 1 / 2 2 / 3 3 / 4 1], 1, 1000); @btime bsxfun(fun, a, b)';大致的执行时间是:
V26.2: 1.36e-6 秒
V26.3: 2.07e-7 秒isduration:针对 isduration 进行了性能优化;
using TyBase using BenchmarkTools t1 = Dates.Date(2014, 03, 16):Dates.Day(1):Dates.Date(2014, 03, 17) t2 = Dates.Date(2014, 03, 20) dt = Dates.CompoundPeriod.(t2 - t1) dt = repeat(dt, 1000000, 1) @btime isduration(dt);大致的执行时间是:
V26.2: 5.56e-4 秒
V26.3: 8.40e-9 秒fileparts:针对 fileparts 进行了性能优化;
using TyBase using BenchmarkTools files1_4 = repeat( [ "H:/user1/Syslab/file1.txt" "H:/user2/Syslab/file2.txt" "H:/user3/Syslab/file3.txt" "H:/user4/Syslab/file4.txt" ], 1000000, 1, ); @btime fileparts(files1_4);大致的执行时间是:
V26.2: 11.81 秒
V26.3: 3.71 秒ty_unique:针对 ty_unique 进行了性能优化;
using TyBase using BenchmarkTools A = repeat([ ], 1000000, 3) x = 3 @btime ty_unique(A; byrows=true, nargout=x);大致的执行时间是:
V26.2: 6.69 秒
V26.3: 1.37 秒此代码是运行在 Windows 11 的 16 核 Intel(R) Core(TM) Ultra 9 185H @ 2.30 GHz 的客户端版本 Syslab,使用 Julia 的 @btime、@time 宏进行计时。
# 数学工具箱
sph2cart:将球面坐标转换为笛卡尔坐标,该函数在将球面坐标转换为笛卡尔坐标场景下性能得到了提升,示例如下;
using TyMath using TyBase rng = MT19937ar(5489) x = randn(rng, 5000, 5000) y = randn(rng, 5000, 5000) z = randn(rng, 5000, 5000) for i in 1:5 theta, rho, Z = sph2cart(x, y, z) end大致的执行时间是:
V26.2: 3.6935026 秒
V26.3: 1.3078071 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
erfc:补余误差函数,该函数在补余误差场景下性能得到了提升,示例如下:
using TyMath using TyBase x = -4:0.000001:6 t = [0.1 5 100] a = 5 k = 2 b = 1 m = 4 u = zeros(3, length(x)) i = 1 tmp = (x .- b) / sqrt(m * k * t[i]) # V26.2 版本使用此代码运行: # for j in 1:100 # Y = erfc.(tmp) # end for j in 1:100 Y = erfc(tmp) end大致的执行时间是:
V26.2: 20.4128 秒
V26.3: 8.77753 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
erfcinv:逆补余误差函数,该函数在逆补余误差函数场景下性能得到了提升,示例如下;
using TyMath using TyBase rng = MT19937ar(5489) x = randi(rng, 1000, 1000) m = randi(rng, 1000, 1000) t = [0.1 5 100] a = 5 k = 2 b = 1 u = zeros(3, length(x)) i = 1 # V26.2 版本使用此代码运行: # for j in 1:100 # Y = erfcinv.((x .- b) / sqrt.(m * k * t[i])) # end for j in 1:100 Y = erfcinv((x .- b) / sqrt.(m * k * t[i])) end大致的执行时间是:
V26.2: 1.6505 秒
V26.3: 0.192508 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
full:将稀疏矩阵转换为满存储,该函数在将稀疏矩阵转换为满存储场景下性能得到了提升,示例如下;
rng = MT19937ar(5489) a = rand(rng, 700, 700) b = rand(rng, 700, 700) y = conv2(a, b, :full);大致的执行时间是:
V26.2: 24.2288867 秒
V26.3: 13.1327805 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
using TyMath using TyBase a = speye(10000); for i in 1:15 full(a) end大致的执行时间是:
V26.2: 0.2987136 秒
V26.3: 0.1629795 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
erf:误差函数,该函数在误差函数场景下性能得到了提升,示例如下:
using TyMath using TyBase x = -4:0.000001:6 t = [0.1 5 100] a = 5 k = 2 b = 1 m = 4 u = zeros(3, length(x)) i = 1 # V26.2 版本使用此代码运行: # for j in 1:100 # Y = erf.((x .- b) / sqrt(m * k * t[i])) # end for j in 1:100 Y = erf((x .- b) / sqrt(m * k * t[i])) end大致的执行时间是:
V26.2: 8.999501 秒
V26.3: 3.223409 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
erfinv:逆误差函数,该函数在逆误差函数场景下性能得到了提升,示例如下;
using TyMath using TyBase x = -4:0.000001:6 t = [0.1 5 100] a = 5 k = 2 b = 1 m = 4 u = zeros(3, length(x)) i = 1 # V26.2 版本使用此代码运行: # for j in 1:100 # Y = erf.((x .- b) / sqrt(m * k * t[i])) # end for j in 1:100 Y = erf((x .- b) / sqrt(m * k * t[i])) end大致的执行时间是:
V26.2: 1.008255 秒
V26.3: 0.666158 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
erfcx:换算补余误差函数,该函数在换算补余误差函数场景下性能得到了提升,示例如下;
using TyMath using TyBase x = -4:0.000001:6 t = [0.1 5 100] a = 5 k = 2 b = 1 m = 4 u = zeros(3, length(x)) i = 1 # # V26.2 版本使用此代码运行: # for j in 1:100 # Y = erfcx.((x .- b) / sqrt(m * k * t[i])) # end for j in 1:100 Y = erfcx((x .- b) / sqrt(m * k * t[i])) end大致的执行时间是:
V26.2: 31.308055 秒
V26.3: 12.221253 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
randperm:随机排列,该函数在随机排列场景下性能得到了提升,示例如下:
using TyMath using TyBase rng = MT19937ar(100) randperm(rng, 50000000);大致的执行时间是:
V26.2: 7.6495722 秒
V26.3: 1.7679478 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
randpermk:整数的随机排列,该函数在整数的随机排列场景下性能得到了提升,示例如下;
using TyMath using TyBase rng = MCG16807(100) randpermk(rng, 100000000, 50000000);大致的执行时间是:
V26.2: 2.1593018 秒
V26.3: 1.4783487 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
griddata:对二维或三维散点数据插值;
使用 nearest 方法进行对三维散点数据插值时,性能得到了提升,示例如下;
rng = MT19937ar(5489) x = 2 * rand(rng, 250) .- 1; y = 2 * rand(rng, 250) .- 1; z = 2 * rand(rng, 250) .- 1; v = x .^ 2 .+ y .^ 3 .- z .^ 4; d = -1:0.01:1; xq, yq = meshgrid2(d, d); zq = zeros(size(xq)); vq = griddata(x, y, z, v, xq, yq, zq, "nearest", "mboundary");大致的执行时间是:
V26.2: 0.855854 秒
V26.3: 0.0242006 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
使用 v4 方法进行对二维散点数据插值时,性能得到了提升,示例如下;
rng = MT19937ar(5489) x = -3 .+ 6 * rand(rng, 5000); y = -3 .+ 6 * rand(rng, 5000); v = sin.(x) .^ 4 .* cos.(y); xq, yq = meshgrid2(-3:0.01:3, -3:0.01:3); griddata(x, y, v, xq, yq, "v4");大致的执行时间是:
V26.2: 177.608 秒
V26.3: 5.29804 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
filter1:1 维数字滤波器,该函数在 1 维数字滤波器场景下性能得到了提升,示例如下;
using TyMath using TyBase rng = MT19937ar(5489) b = 1; a = [1 -0.2]; x = rand(rng, 8000, 8000) y, zf = filter1(b, a, x, [], 2)大致的执行时间是:
V26.2: 1.4105044 秒
V26.3: 0.2644221 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
interpn:ndgrid 格式的一维、二维、三维和 N 维网格数据的插值,使用 cubic 方法进行 ndgrid 格式的一维、二维、三维和 N 维网格数据的插值时,性能得到了提升,示例如下;
using TyMath using TyBase x, y, z, t = ndgrid(-2:1, 1:4, 2:5, 1:5) v = exp.(x .+ y .^ 2) .* sin.(z .* exp(1)) ./ t xq = [-1/4 10 0.7] yq = [2.3 1.2 3.4] zq = [2.4 2.1 2.8] tq = [1.2, 2.6, 2.3] for i in 1:1000 vq = interpn(x, y, z, t, v, xq, yq, zq, tq, "cubic") end大致的执行时间是:
V26.2: 1.6314341 秒
V26.3: 0.1056597 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
hankel:Hankel 矩阵,该函数在 Hankel 矩阵场景下性能得到了提升,示例如下;
using TyMath using TyBase rng = MT19937ar(5489) c = randi(rng, 5000, 5000) for i in 1:30 Y = hankel(c) end大致的执行时间是:
V26.2: 1.1087576 秒
V26.3: 0.7270297 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
roots:多项式根,该函数在多项式根场景下性能得到了提升,示例如下;
using TyMath using TyBase rng = MT19937ar(5489) p = randn(rng, 2000) r = roots(p)大致的执行时间是:
V26.2: 2.1357222 秒
V26.3: 2.0796202 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
interp2:meshgrid 格式的二维网格数据插值,使用 linear 方法进行 meshgrid 格式的二维网格数据插值时,性能得到了提升,示例如下;
using TyMath using TyBase rng = MT19937ar(5489) x, y = meshgrid2(0.05:0.05:100, 0.05:0.05:100); z = cos.(x) .+ sin.(y); a, b = meshgrid2(0.05:0.05:100, 0.05:0.05:100); a = a .+ rand(rng, 2000, 2000) b = b .+ rand(rng, 2000, 2000) c = interp2(x, y, z, a, b, "linear")大致的执行时间是:
V26.2: 0.0245062 秒
V26.3: 0.0229204 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
conv2:二维卷积,该函数在二维卷积场景下性能得到了提升,示例如下;
using TyMath using TyBase rng = MT19937ar(5489) a = rand(rng, 1200, 1200) b = rand(rng, 700, 700) y = conv2(a, b, :valid);大致的执行时间是:
V26.2: 71.0182734 秒
V26.3: 5.1167388 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
mfft:傅里叶变换 (一维、二维、多维),该函数在傅里叶变换 (一维、二维、多维)场景下性能得到了提升,示例如下;
using TyMath using TyBase rng = MT19937ar(5489) x = rand(rng, 471, 471, 471) y = mfft(x,2)大致的执行时间是:
V26.2: 6.3222395 秒
V26.3: 3.6124964 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
pascal:帕斯卡矩阵,该函数在帕斯卡矩阵场景下性能得到了提升,示例如下;
using TyMath using TyBase rng = MT19937ar(5489) c = randi(rng, 1000, 100) Y = pascal.(c, 2)大致的执行时间是:
V26.2: 0.2115971 秒
V26.3: 0.1750196 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
ordeig:拟三角矩阵的特征值,该函数在拟三角矩阵的特征值场景下性能得到了提升,示例如下;
using TyMath using TyBase rng = MT19937ar(5489) X = rand(rng, 2000, 2000) U, T = schur(X) for i in 1:100 E = ordeig(U) end大致的执行时间是:
V26.2: 1.7492737 秒
V26.3: 0.1284751 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
interp1:一维数据插值(表查找),使用 makima 方法进行一维数据插值时,性能得到了提升,示例如下;
using TyMath using TyBase x = 1:1000; y = sin.(x); xi = LinRange(1, 1000, 134217728); yi = interp1(x, y, xi, "makima");大致的执行时间是:
V26.2: 0.8896676 秒
V26.3: 0.3100879 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
# 统计工具箱
makedist:创建概率分布对象,该函数在创建概率分布对象场景下性能得到了提升,示例如下;
using TyMath using TyStatistics for i in 1:30000 pd = makedist("TyMultinomial", [0.1, 0.2, 0.3, 0.4]) end大致的执行时间是:
V26.2: 0.0420822 秒
V26.3: 0.0107802 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
range:取值范围,该函数在取值范围场景下性能得到了提升,示例如下;
using TyMath using TyStatistics rng = MT19937ar(5489) x1 = rand(rng, 5000, 5000) x2 = 2 for i in 1:100 y = range(x1, x2) end大致的执行时间是:
V26.2: 13.9954946 秒
V26.3: 1.9302933 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
trimmean:均值,不包括异常值,该函数在均值,不包括异常值场景下性能得到了提升,示例如下;
using TyMath using TyStatistics X = reshape(1:40000000, (200, 500, 400)) for i in 1:10 trimmean(X, 10, "all") end大致的执行时间是:
V26.2: 0.8176044 秒
V26.3: 1.98e-06 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
# 曲线拟合工具箱
prepareCurveData:为曲线拟合准备数据输入,该函数在为曲线拟合准备数据输入场景下性能得到了提升,示例如下;
using TyMath using TyCurveFitting rng = MT19937ar(5489) x = randn(rng, 1000000) y = randn(rng, 1000000) z = randn(rng, 1000000) for i in 1:5 XOUT, YOUT, WOUT = prepareCurveData(x, y, z; issort=false) end大致的执行时间是:
V26.2: 0.0365251 秒
V26.3: 0.0021475 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
prepareSurfaceData:为曲面拟合准备数据输入,该函数在为曲面拟合准备数据输入场景下性能得到了提升,示例如下;
using TyMath using TyCurveFitting rng = MT19937ar(5489) x = randn(rng, 1000000) y = randn(rng, 1000000) z = randn(rng, 1000000) w = randn(rng, 1000000) for i in 1:5 XOUT, YOUT, ZOUT, WOUT = prepareSurfaceData(x, y, z, w; issort=false) end大致的执行时间是:
V26.2: 0.0487967 秒
V26.3: 0.0035191 秒此代码是运行在 Windows11 的 8 核 Intel(R)Core(TM)i3-13100T@2.5 GHz 测试环境上利用 julia 的 @elapsed、@belapsed 综合得出。
# 信号处理工具箱
resample:信号重采样,优化了滤波算法;
using TySignalProcessing using TyMath rng = MT19937ar(5489) a = rand(rng, 1473024) + rand(rng, 1473024) * im resample(a, 1, 24, 50)大致的执行时间是:
V26.2: 6.96E-02 秒
V26.3: 1.87E-02 秒upfirdn:上采样、应用 FIR 滤波器和下采样,优化内部调用的多相滤波算法;
using TySignalProcessing h = fir1(2424,0.5) x = randn(1473024) upfirdn(x, h, 1, 24)大致的执行时间是:
V26.2: 6.95E-02 秒
V26.3: 1.77E-02 秒此代码是运行在 Windows 11 的 14 核 Intel(R) Core(TM) i7-12800H 的客户端版本 Syslab,使用 Julia @benchmark 宏进行进行计时。
# DSP 系统工具箱
firhalfband:半带 FIR 滤波器设计,优化了内部迭代与逻辑判断;
using TyDSPSystem using TySignalProcessing win = kaiser(41, 2.5) b = firhalfband(40, win);大致的执行时间是:
V26.2: 8.74E-07 秒
V26.3: 5.37E-07 秒firceqrip:约束等波纹 FIR 滤波器,优化了滤波器设计中的内存分配;
using TyDSPSystem x = 30 y = 0.4 z = [0.05 0.03] h = firceqrip(x, y, z);大致的执行时间是:
V26.2: 6.52E-04 秒
V26.3: 1.23E-04 秒firminphase:最小相位 FIR 频谱因子,优化了函数的多重派发和内存分配;
using TyDSPSystem using TySignalProcessing f = [0 0.4 0.8 1] a = [0 1 0] up = [0.02 1.02 0.01] lo = [0 0.98 0] # The zeros ensure nonnegative zero-phase resp. n = 32 b = fircls(n, f, a, up, lo) h = firminphase(b)大致的执行时间是:
V26.2: 8.54E-04 秒
V26.3: 8.24E-04 秒此代码是运行在 Windows 11 的 14 核 Intel(R) Core(TM) i7-12800H 的客户端版本 Syslab,使用 Julia @benchmark 宏进行进行计时。
# 通信工具箱
qammod:产生量化索引和量化输出值,优化了二进制十进制转换中的内存分配;
using TyMath using TyCommunication rng = MT19937ar(1234) M = 64 x = rand(rng, 0:(M - 1), 1000000) y = qammod(x, M; SymOrder="bin")大致的执行时间是:
V26.2: 4.93E-03 秒
V26.3: 2.61E-03 秒quantiz:产生量化索引和量化输出值,优化了量化循环迭代中的内存分配;
using TyMath using TyCommunication rng = MT19937ar(1234) samp = randn(rng, 100000) partition = (-5 + 1e-3):1e-3:5 codebook = -5:1e-3:5 quantiz(samp, partition, codebook)大致的执行时间是:
V26.2: 2.90E+00 秒
V26.3: 1.29E-02 秒eyediagram:生成眼图,优化了眼图的计算部分;
using TyCommunication t = 0:0.01:(2pi) y1 = sin.(t) y2 = 1im * cos.(t) eyediagram(y1 + y2, 50, 3, 3)大致的执行时间是:
V26.2: 2.30E-01 秒
V26.3: 1.17E-01 秒poly2trellis:将卷积码多项式转换为 trellis 描述形式,优化了 trellis 描述循环计算中的内存分配;重做了十进制八进制转换;
using TyCommunication poly2trellis(5, [37 33], 37)大致的执行时间是:
V26.2: 5.04E-05 秒
V26.3: 1.24E-06 秒vitdec:使用维特比算法对二进制数据进行卷积解码,优化了 ACS 算法;
using TyCommunication using TyMath rng = MT19937ar(1234) t = poly2trellis(3, [6 7]) data = rand(rng, 0:1, 7000) codedData, = convenc(data, t) tbdepth = 34 decodedData = vitdec(codedData, t, tbdepth, Val(:trunc), Val(:hard))大致的执行时间是:
V26.2: 1.08E-03 秒
V26.3: 7.62E-04 秒comm_ChannelFilter:对 LTE 2×2 信道进行信道滤波,性能开销主要在内存分配&滤波中,重写了 fir 带延迟线的滤波;
using TyCommunication using TyMath rng = MT19937ar(1234) chanFilter = comm_ChannelFilter(; SampleRate=30.72e6, PathDelays=[0 30 150 310 370 710 1090 1730 2510] * 1e-9 ) Nt = 2 Nr = 2 Ns = 30720 Np = length(chanFilter.PathDelays) M = 256 x = qammod(randi(rng, [0 M-1], Ns, Nt), M) g = complex.(rand(rng, Ns, Np, Nt, Nr), rand(rng, Ns, Np, Nt, Nr)) y = step(chanFilter, x, g)大致的执行时间是:
V26.2: 4.22E-02 秒
V26.3: 1.41E-02 秒oct2dec:将八进制转换为十进制数字,重写了进制转换,不再依赖于字符串解析;
using TyCommunication using TyMath rng = MT19937ar(1234) tmp = [0,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17] a1 = randi(rng, [1,16], 100000) a = tmp[a1] oct2dec(a)大致的执行时间是:
V26.2: 5.11E-03 秒
V26.3: 7.54E-04 秒oct2poly:将八进制数转换为二进制系数,优化了进制转换;
using TyCommunication a = [0:7;10:17;20:27;30:37;40:47;50:57;60:67;70;77;] b = oct2poly(a, "ascending")大致的执行时间是:
V26.2: 5.43E-06 秒
V26.3: 1.93E-06 秒comm_ViterbiDecoder:使用维特比算法解码卷积编码数据,内部 ACS 算法优化;
using TyCommunication using TyMath rng = MT19937ar(1234) t = poly2trellis([4 3], [4 5 17; 7 4 2]) x = randi(rng, [0 1], 100, 1) code = convenc(x, t) tb = 2 vtd = comm_ViterbiDecoder(; ) decoded, = step(vtd, code[1])大致的执行时间是:
V26.2: 1.94E-05 秒
V26.3: 1.54E-05 秒mlseeq:使用最大似然序列估计对线性调制信号进行均衡,内部 ACS 算法优化;
using TyCommunication using TySignalProcessing using TyMath rng = MT19937ar(1234) M = 2 tblen = 10 nsamp = 2 msgLen = 1000 cst = pammod(0:(M-1), M) msgData = randi(rng, [0 M-1], msgLen, 1) msgSym = pammod(msgData, M) msgSymUp = upsample(msgSym, nsamp) chanest = [0.986; 0.845; 0.237; 0.12345 + 0.31im] msgFilt, = filter1(chanest, 1, msgSymUp) msgRx = awgn(rng, msgFilt, 5, "measured") eqSym = mlseeq(msgRx, chanest, cst, tblen, Val(:rst), nsamp)大致的执行时间是:
V26.2: 5.82E-05 秒
V26.3: 4.81E-05 秒comm_MLSEEqualizer:使用最大似然序列估计均衡调制信号,内部 ACS 算法优化;
using TyCommunication using TyMath rng = MT19937ar(1234) chCoeffs = [0.986; 0.845; 0.237; 0.12345 + 0.31im] mlse = comm_MLSEEqualizer( Constellation=pskmod(0:3, 4, pi / 4)); errorRate = comm_ErrorRate() snr = 9 data = randi(rng, [0 3], 100) modSignal = pskmod(data, 4, pi / 4, "gray") chanOutput = awgn(rng, filter1(chCoeffs, 1, modSignal)[1], snr, "measured") eqSignal = step(mlse, chanOutput)大致的执行时间是:
V26.2: 1.11E-04 秒
V26.3: 8.38E-05 秒此代码是运行在 Windows 11 的 14 核 Intel(R) Core(TM) i7-12800H 的客户端版本 Syslab,使用 Julia @benchmark 宏进行进行计时。
# 控制系统工具箱
reduce:针对 reduce 进行了性能优化;
using BenchmarkTools using Random using LinearAlgebra using TyControlSystems using TyRobustControl nx, ny, nu = 30, 5, 4 N = 100 ord = 15 maxerr = 0.01 Random.seed!(42) systems = [rss(nx, ny, nu) for _ in 1:N] begin acc = 0 @inbounds for G in systems Gr, Info = reduce(G, ord; ErrorType="mult", MaxError=maxerr) acc += size(Gr.A, 1) end acc end print("@time: ") @time begin acc = 0 @inbounds for G in systems Gr, Info = reduce(G, ord; ErrorType="mult", MaxError=maxerr) acc += size(Gr.A, 1) end acc end print("@btime: ") @btime begin acc = 0 @inbounds for G in $systems Gr, Info = reduce(G, $ord; ErrorType="mult", MaxError=$maxerr) acc += size(Gr.A, 1) end acc end大致的执行时间是:
V26.2: 0.380147 秒
V26.3: 0.391426 秒upsample:针对 upsample 进行了性能优化;
using BenchmarkTools using Random using LinearAlgebra using TyControlSystems nx, nu, ny = 32, 2, 2 N = 10_000 Ts = 0.1 rng = MersenneTwister(42 + 1000nx + 10N + nu + ny) A = randn(rng, nx, nx) ρ = maximum(abs.(eigvals(A))) A ./= max(1.2 * ρ, 1.0) B = randn(rng, nx, nu) C = randn(rng, ny, nx) D = randn(rng, ny, nu) s0 = ss(A, B, C, D, Ts) systems = Vector{typeof(s0)}(undef, N) systems[1] = s0 for i in 2:N A = randn(rng, nx, nx) ρ = maximum(abs.(eigvals(A))) A ./= max(1.2 * ρ, 1.0) B = randn(rng, nx, nu) C = randn(rng, ny, nx) D = randn(rng, ny, nu) systems[i] = ss(A, B, C, D, Ts) end Ls = rand(rng, 2:8, N) begin acc = 0 @inbounds for i in eachindex(systems) G = upsample(systems[i], Ls[i]) acc += nstates(G) + size(G.B, 2) + size(G.C, 1) end acc end print("@time: ") @time begin acc = 0 @inbounds for i in eachindex(systems) G = upsample(systems[i], Ls[i]) acc += nstates(G) + size(G.B, 2) + size(G.C, 1) end acc end print("@btime: ") @btime begin acc = 0 @inbounds for i in eachindex($systems) G = upsample($systems[i], $Ls[i]) acc += nstates(G) + size(G.B, 2) + size(G.C, 1) end acc end大致的执行时间是:
V26.2: 0.119216 秒
V26.3: 0.043828 秒sim:针对 sim 进行了性能优化;
using BenchmarkTools using Random using TyBase using TySystemIdentification using TyControlSystems using TyControlSystemsCore using TyPlot const TSI = TySystemIdentification load(pkgdir(TySystemIdentification) * "/examples/resources/z1.jl") sys = n4sid(data, 2) opt = TSI.simOptions() try TyPlot.ioff() catch end N = 10_000_000 rng = MersenneTwister(42 + N) u = randn(rng, data.nu, N) sys0 = sys.Ts == 0 ? ss(sys.A, sys.B, sys.C, sys.D) : ss(sys.A, sys.B, sys.C, sys.D, sys.Ts) t = collect((0:(N-1)) .* data.Ts) y = TyControlSystemsCore._lsim(sys0, u, t)[1] y = y .+ 0.01 .* randn(rng, size(y)...) dataN = TSI.iddata(y, u, data.Ts) begin try pic = gcf() clf(pic, "reset") catch end pic = TSI.sim(sys, dataN; fig=true, opt=opt) length(pic.axes) end print("@time: ") @time begin try pic = gcf() clf(pic, "reset") catch end pic = TSI.sim(sys, dataN; fig=true, opt=opt) length(pic.axes) end print("@btime: ") @btime begin try pic = gcf() clf(pic, "reset") catch end pic = TSI.sim($sys, $dataN; fig=true, opt=$opt) length(pic.axes) end大致的执行时间是:
V26.2: 5.388568 秒
V26.3: 0.087033 秒init:针对 init 进行了性能优化;
using BenchmarkTools using Random using LinearAlgebra using TyControlSystems using TySystemIdentification nx, nu, ny = 12, 2, 2 N = 100 Ts = 1.0 rscale = 1e-2 sp = "p" rng = MersenneTwister(42 + 100nx + N) etas = Vector{Idss}(undef, N) Rs = Vector{Vector{Float64}}(undef, N) pars = Vector{Vector{Float64}}(undef, N) for i in 1:N A = randn(rng, nx, nx) ρ = maximum(abs, eigvals(A)) A ./= max(ρ, eps()) A .*= 1.08 B = randn(rng, nx, nu) C = randn(rng, ny, nx) D = zeros(ny, nu) K = 0.2 .* randn(rng, nx, ny) Nv = Matrix{Float64}(I, ny, ny) eta0 = idss(A, B, C, D, K, Ts; NoiseVariance=Nv) par0, _ = getpvec(eta0) par0 = Float64.(vec(par0)) R = fill(rscale, length(par0)) etas[i] = eta0 Rs[i] = R pars[i] = copy(par0) end begin acc = 0 @inbounds for i in eachindex(etas) eta = init(etas[i], Rs[i], pars[i], sp) acc += size(eta.C, 1) end acc end print("@time: ") @time begin acc = 0 @inbounds for i in eachindex(etas) eta = init(etas[i], Rs[i], pars[i], sp) acc += size(eta.C, 1) end acc end print("@btime: ") @btime begin acc = 0 @inbounds for i in eachindex($etas) eta = init($etas[i], $Rs[i], $pars[i], $sp) acc += size(eta.C, 1) end acc end大致的执行时间是:
V26.2: 0.023304 秒
V26.3: 0.012124 秒此代码是运行在 Windows 11 的 16 核 Intel(R) Core(TM) Ultra 9 185H @ 2.30 GHz 的客户端版本 Syslab,使用 Julia 的 @btime、@time 宏进行计时。
# 图像处理工具箱
-
优化了 padarray 函数最常用的 constant pad 算法,函数的执行速度得到提升;
using TyImageProcessing, TyRandom using BenchmarkTools rng = MT19937ar(2026) A = rand(rng, 500,500) @btime padarray(A, c, d, e);大致的执行时间是:
V26.2: 0.59 毫秒
V26.3: 0.45 毫秒优化了 padarray 函数 circular 算法,函数的执行速度得到提升;
using TyImageProcessing, TyRandom using BenchmarkTools rng = MT19937ar(2026) A = rand(rng, 1000,1000) c=[100, 100] @btime padarray(A, c, d, e);大致的执行时间是:
V26.2: 2.47 毫秒
V26.3: 1.92 毫秒优化了 padarray 函数 symmetric 算法,函数的执行速度得到提升;
using TyImageProcessing, TyRandom using BenchmarkTools rng = MT19937ar(2026) A = rand(rng, 1000, 1000) c=[100, 100] @btime padarray(A, c, d, e);大致的执行时间是:
V26.2: 2.7 毫秒
V26.3: 1.98 毫秒优化了 padarray 函数 replicate 算法,函数的执行速度得到提升;
using TyImageProcessing, TyRandom using BenchmarkTools rng = MT19937ar(2026) A = rand(rng, 1000, 1000) c=[100, 100] @btime padarray(A, c, d, e);大致的执行时间是:
V26.2: 2.58 毫秒
V26.3: 2.1 毫秒
close:优化了 close 函数,函数的执行速度得到提升;
using TyImageProcessing using BenchmarkTools wd_, ht_ = 3333, 301 v = VideoWriter("newfile", [wd_ ht_]); open(v) writeVideo(v, rand(ht_, wd_)) @time close(v); @btime close(v);大致的执行时间是:
V26.2: 17 微秒
V26.3: 0.36 微秒open:优化了 open 函数,函数的执行速度得到提升;
using TyImageProcessing using BenchmarkTools wd_, ht_ = 3333, 301 v = VideoWriter("newfile", [wd_ ht_]); @btime open(v);大致的执行时间是:
V26.2: 4e-3 微秒
V26.3: 3.6e-7 微秒此代码是运行在 Windows 11 的 14 核 Intel(R) Core(TM) i7-12800H 的客户端版本 Syslab,使用 Julia @benchmark 宏进行进行计时。
# 机器学习工具箱
test:针对 test 进行了性能优化;
using TyMachineLearning using BenchmarkTools n_samples = 10000000 c = cvpartition(n_samples, "Holdout"; p=0.3) @btime test(c);大致的执行时间是:
V26.1: 0.0195 秒
V26.3: 0.00732 秒此代码是运行在 Windows 11 的 14 核 Intel(R) Core(TM) i7-12700H @ 2.30 GHz 的客户端版本 Syslab,使用 Julia 的 @btime 宏进行计时。
# 科学计算 APP
滤波器设计工具
新增支持任意群延迟响应滤波器设计。
# 删除或变更功能 ⚠️
# 机器学习工具箱
机器学习工具引入破坏性更新 1 个。
feval 函数:不支持多输入为矩阵。
V26.3 之前版本运行结果:
using TyMachineLearning using Random Random.seed!(20260317) n_samples = 2000_000 n_features = 5 n_train = 5000 X_train = rand(n_train, n_features) y_train = 3 .* X_train[:, 1] .- 2 .* X_train[:, 2] .+ 0.1 .* randn(n_train) mdl = fitlm(X_train, y_train) X_new = rand(n_samples, n_features) out1 = feval(mdl, X_new, X_new)输出结果如下:
2×2000000 Matrix{Any}: -1.20247 -0.602705 0.755214 0.743171 1.52581 … 2.00214 0.730779 1.76978 1.43166 -0.128533 1.26983 2.16428 0.807826 -0.626303 -1.21609 -0.708346 -0.111499 0.819665其中 feval 函数的第二个输入和第三个输入的类型发生更改,从原来的支持多输入矩阵类型改为仅支持单输入为矩阵或向量,或者多输入为向量。
V26.3 运行结果:
using TyMachineLearning using Random Random.seed!(20260317) n_samples = 2000_000 X_test = rand(n_samples, 5) n_train = 5000 X_train = rand(n_train, 5) y_train = 3 .* X_train[:, 1] .- 2 .* X_train[:, 2] .+ 0.1 .* randn(n_train) mdl = fitlm(X_train, y_train) x1, x2, x3, x4, x5 = (X_test[:, i] for i in 1:5) y = feval(mdl, x1, x2, x3, x4, x5)输出结果如下:
2000000-element Vector{Float64}: 0.2731536269253782 0.8551286140860757 -1.363161464747219 1.582658709210525 0.03541714897439819 1.0079423621266785 ⋮ 0.914881200193362 -0.26143151097379946 1.9010743151126133 -0.5861975108229462 2.286510844179423
其中 feval 函数的第二个到第六个输入都是长度一致的向量。
# 深度学习工具箱
深度学习工具箱引入破坏性更新 1 个。
自 V26.3 版本之后,minmax 函数正式移除。
当前仅支持通过模块限定名调用:TyDeepLearning._minmax(P)。
不支持调用 minmax(P),也不支持直接调用 _minmax(P)。
# 附录:函数列表
# 基础工具箱
基础工具箱修改函数 15 个。
| 函数名 | 函数变更说明 |
|---|---|
| regexp | 修复特定场景使用 tokens 缺少输出匿名捕获组的问题 |
| strfind | 修复特定抽象字符串输入报错的问题 |
| dec2hex | 性能优化 |
| isfield | 性能优化 |
| load | 性能优化 |
| log2 | 性能优化 |
| eye | 性能优化 |
| ty_ceil | 性能优化 |
| ty_floor | 性能优化 |
| strncmpi | 性能优化 |
| datenum | 性能优化 |
| bsxfun | 性能优化 |
| isduration | 性能优化 |
| fileparts | 性能优化 |
| ty_unique | 性能优化 |
# 图形工具箱
图形工具箱新增函数 2 个。
| 函数名 | 函数说明 |
|---|---|
| copyobj | 复制图形对象及其后代 |
| figuregroup | 创建或切换绘图窗口分组 |
图形工具箱修改函数 3 个。
| 函数名 | 函数变更说明 |
|---|---|
| contourf | 修改 contourf cmap 颜色设置 |
| contour | 修复 contour 函数 filled 模式的 bug |
| datatip | 修复时间数据创建数据提示报错的问题 |
# 数学工具箱
数学工具箱新增函数 12 个。
| 函数名 | 函数说明 |
|---|---|
| isConnected | 测试两个顶点是否通过边相连 |
| svds | 奇异值和向量的子集 |
| pagemldivide | 按页左矩阵除法 |
| pagemrdivide | 按页右矩阵除法 |
| incenter | 三角剖分元素的内心 |
| alphaShape | 依据二维和三维中的点构建的多边形和多面体 |
| barycentricToCartesian | 将坐标从重心坐标转换为笛卡尔坐标 |
| cartesianToBarycentric | 将坐标从笛卡尔坐标转换为重心坐标 |
| plot | 绘制图对象 |
| layout | 更改图绘制对象的布局 |
| layoutcoords | 计算图布局坐标 |
| edges | 三角剖分的边 |
数学工具箱修改函数 25 个。
| 函数名 | 函数变更说明 |
|---|---|
| sph2cart | 性能优化 |
| erfc | 性能优化 |
| erfcinv | 性能优化 |
| full | 性能优化 |
| erf | 性能优化 |
| erfinv | 性能优化 |
| erfcx | 性能优化 |
| randperm | 性能优化 |
| randpermk | 性能优化 |
| griddata | 性能优化 |
| voronoi | 修复某些传入因三角剖分算法问题不发计算的现象 |
| eig | 修复 eig 求解实对称矩阵得到的特征向量不正交的问题 |
| delaunayn | opts 参数支持 [] 数组 |
| filter1 | 性能优化 |
| interpn | 性能优化 |
| hankel | 性能优化 |
| roots | 性能优化 |
| interp2 | 性能优化 |
| nearestNeighbor | 性能优化 |
| conv2 | 性能优化 |
| mfft | 性能优化 |
| pascal | 性能优化 |
| ordeig | 性能优化 |
| interp1 | 性能优化 |
| nearestNeighbor | 修复在传入空三角剖分对象时未报错的错误 |
# 符号数学工具箱
符号数学工具箱修改函数 3 个。
| 函数名 | 函数变更说明 |
|---|---|
| int | 修复积分域是圆的积分报错的 bug、输入参数 eq 支持数值类型 |
| sinint | 修复无法进行 laplace 变换的 bug |
| dsolve | 修复某些特定方程求解结果错误的 bug |
# 曲线拟合工具箱
曲线拟合工具箱修改函数 4 个。
| 函数名 | 函数变更说明 |
|---|---|
| prepareCurveData | 性能优化 |
| prepareSurfaceData | 性能优化 |
| fit | 修复对于部分自定义拟合模型参数解析错误的情况 |
| assign_result | 支持除自定义拟合模型外的其他拟合模型 |
# 统计工具箱
统计工具箱新增函数 1 个。
| 函数名 | 函数说明 |
|---|---|
| grpstats | 按组计算统计量 |
统计工具箱修改函数 6 个。
| 函数名 | 函数变更说明 |
|---|---|
| makedist | 性能优化 |
| range | 性能优化 |
| trimmean | 性能优化 |
| tabulate | 修复输入全为 1 向量时的 bug |
| normpdf | 支持复数输入 |
| prctile | 修复输入稀疏矩阵得到稠密矩阵的 bug |
# 优化工具箱
优化工具箱修改函数 4 个。
| 函数名 | 函数变更说明 |
|---|---|
| optimoptions | 增加支持 ga、patternsearch、surrogateopt、particleswarm、simulannealbnd、gamultiobj、paretosearch 的选项 |
| prob2struct | 支持将多目标优化问题转为结构体 |
| fgoalattain | 修复 fgoalattain 求解含有解析梯度目标或约束的多目标问题出现的 bug |
| fminimax | 修复 fminimax 求解含有解析梯度目标或约束的多目标问题出现的 bug |
# 信号处理工具箱
信号处理工具箱修改函数 1 个。
| 函数名 | 函数变更说明 |
|---|---|
| upfirdn | 多相滤波算法使用 C 实现 |
# 通信工具箱
通信工具箱修改函数 8 个。
| 函数名 | 函数变更说明 |
|---|---|
| vitdec | ACS 算法使用 C 实现 |
| qammod | 内部编码转换内存优化 |
| quantiz | 优化量化流程 |
| eyediagram | 优化眼图计算部分 |
| poly2trellis | 优化内部内存分配 |
| oct2dec | 重写进制转换 |
| oct2poly | 进制转换优化 |
| comm_ChannelFilter | 优化内部滤波算法 |
# DSP 工具箱
DSP 工具箱修改函数 3 个。
| 函数名 | 函数变更说明 |
|---|---|
| firhalfband | 优化函数内存分配 |
| firceqrip | 优化函数内存分配 |
| firminphase | 优化函数派发 |
# 相控阵工具箱
相控阵工具箱修改函数 4 个。
| 函数名 | 函数变更说明 |
|---|---|
| phased_CustomAntennaElement | 修复了对象的水平和垂直方向极化参数同时指定时不生效的问题 |
| phased_ShortDipoleAntennaElement | 函数内部构造修复 |
| phased_RadarTarget | 函数内部构造修复 |
| phased_RangeEstimator | 函数内部构造修复 |
# 控制系统工具箱
控制系统工具箱修改函数 1 个。
| 函数名 | 函数变更说明 |
|---|---|
| upsample | 性能优化 |
# 系统辨识工具箱
系统辨识工具箱修改函数 2 个。
| 函数名 | 函数变更说明 |
|---|---|
| init | 性能优化 |
| sim | 性能优化 |
# 鲁棒控制工具箱
鲁棒控制工具箱修改函数 1 个。
| 函数名 | 函数变更说明 |
|---|---|
| reduce | 性能优化 |
# ★模糊逻辑工具箱(新增)
全新发布模糊逻辑工具箱,涵盖从 Mamdani/Sugeno 型模糊推理系统的构建、隶属度函数设计、规则管理,到推理求解、去模糊化及可视化的全流程支持。它提供丰富的隶属度函数类型(三角形、高斯、梯形、Sigmoid 等)与灵活的文件读写能力,适用于控制系统、决策建模等各类模糊逻辑应用场景。提供 38 个函数。
| 函数名 | 函数说明 |
|---|---|
| mamfis | Mamdani 模糊推理系统 |
| sugfis | Sugeno 模糊推理系统 |
| fisvar | 模糊变量 |
| addInput | 向模糊推理系统添加输入变量 |
| addOutput | 向模糊推理系统添加输出变量 |
| removeInput | 从模糊推理系统移除输入变量 |
| removeOutput | 从模糊推理系统移除输出变量 |
| addMF | 向模糊变量添加隶属函数 |
| fismf | 模糊隶属函数 |
| fismftype2 | 区间二型模糊隶属函数 |
| removeMF | 从模糊变量移除隶属函数 |
| addRule | 向模糊推理系统添加规则 |
| fisrule | 模糊规则 |
| showrule | 显示模糊推理系统规则 |
| update | 使用模糊推理系统更新模糊规则 |
| evalfis | 评估模糊推理系统 |
| evalfisOptions | evalfis 函数的选项集 |
| plotmf | 绘制输入或输出变量的隶属函数 |
| readfis | 从文件加载模糊推理系统 |
| writeFIS | 将模糊推理系统保存到文件 |
| defuzz | 对隶属函数进行去模糊化 |
| dsigmf | 两个 Sigmoid 隶属函数之差 |
| evalmf | 计算隶属函数值 |
| fuzarith | 执行模糊算术运算 |
| gauss2mf | 双高斯组合隶属函数 |
| gaussmf | 高斯隶属函数 |
| gbellmf | 广义钟形隶属函数 |
| linsmf | 线性 S 形饱和隶属函数 |
| linzmf | 线性 Z 形饱和隶属函 |
| pimf | Pi 形隶属函数 |
| probor | 概率 OR 运算 |
| psigmf | 两个 Sigmoid 隶属函数之积 |
| sigmf | Sigmoid 隶属函数 |
| smf | S 形隶属函数 |
| trapmf | 梯形隶属函数 |
| trimf | 三角形隶属函数 |
| zmf | Z 形隶属函数 |
| plotfis | fis 系统绘制函数 |
# 图像处理工具箱
图像处理工具箱修改函数 3 个。
| 函数名 | 函数变更说明 |
|---|---|
| close | 写入视频数据后关闭文件 |
| open | 打开文件以写入视频数据 |
| padarray | 填充数组 |
# 机器学习工具箱
机器学习工具箱修改函数 4 个。
| 函数名 | 函数说明 |
|---|---|
| test | 交叉验证的测试集索引 |
| predict | 线性回归模型的预测响应 |
| mdscale | 非经典多维标度 |
| xgboostr | 训练基于 XGBoost 的回归模型 |
# M 兼容新增函数
M 兼容新增函数 92 个,当前函数总数为 2169 个 M 函数及帮助文档
| 函数名 | 函数说明 |
|---|---|
| isomorphism | 计算两个图之间的同构 |
| voronoi | 沃罗诺伊图 |
| abcd2s | 将 ABCD 参数转换为 S 参数 |
| 概率密度函数 | |
| trnd | t 分布随机数 |
| triangulation | 二维或三维三角剖分 |
| delaunayTriangulation | 二维和三维德劳内三角剖分 |
| triplot | 二维三角图 |
| delaunayn | N 维 Delaunay 三角剖分 |
| nearestNeighbor | 最靠近指定点的顶点 |
| rectint | 矩形交叉区域 |
| wishrnd | Wishart 随机数 |
| iwishrnd | 逆 Wishart 随机数 |
| chi2rnd | 卡方随机数 |
| wblrnd | 威布尔随机数 |
| isprop | 确定属性是否由对象定义 |
| alphaShape | 依据二维和三维中的点构建的多边形和多面体 |
| confint | cfit 或 sfit 对象的拟合系数的置信区间 |
| differentiate | 对 cfit 或 sfit 对象求导 |
| indepnames | cfit、sfit 或 fittype 对象的自变量名称 |
| probnames | cfit、sfit 或 fittype 对象的问题相关参数名称 |
| formula | cfit、sfit 或 fittype 对象的公式 |
| category | cfit、sfit 或 fittype 对象的拟合类别 |
| predint | cfit 或 sfit 对象的预测区间 |
| islinear | 判断 cfit、sfit 或 fittype 对象是否为线性对象 |
| cfit | 构造 cfit 对象 |
| integrate | 对 cfit 对象积分 |
| probvalues | cfit 或 sfit 对象的问题相关参数值 |
| sfit | 构造 sfit 对象 |
| dependnames | cfit、sfit 或 fittype 对象的因变量名称 |
| fismf | 一型模糊隶属度函数 |
| fismftype2 | 区间二型模糊隶属度函数 |
| addMF | 向模糊变量添加隶属度函数 |
| removeMF | 从模糊变量中移除隶属度函数 |
| evalmf | 计算模糊隶属度函数值 |
| defuzz | 对隶属度函数进行解模糊化 |
| plotfis | 显示模糊推理系统 |
| probor | 概率或运算 |
| fuzarith | 执行模糊算术运算 |
| dsigmf | 两个 S 型隶属度函数的差值 |
| trimf | 三角形隶属度函数 |
| gaussmf | 高斯隶属度函数 |
| gbellmf | 广义钟形隶属度函数 |
| gauss2mf | 双高斯组合隶属度函数 |
| linsmf | 线性 S 型饱和隶属度函数 |
| linzmf | 线性 Z 型饱和隶属度函数 |
| pimf | π 型隶属度函数 |
| psigmf | 两个 S 型隶属度函数的乘积 |
| smf | S 型隶属度函数 |
| trapmf | 梯形隶属度函数 |
| zmf | Z 型隶属度函数 |
| fisvar | 模糊变量 |
| addInput | 向模糊推理系统添加输入变量 |
| addOutput | 向模糊推理系统添加输出变量 |
| removeInput | 从模糊推理系统中移除输入变量 |
| removeOutput | 从模糊推理系统中移除输出变量 |
| fisrule | 模糊规则 |
| addRule | 向模糊推理系统中添加规则 |
| update | 使用模糊推理系统更新模糊规则 |
| showrule | 显示模糊推理系统规则 |
| mamfis | Mamdani 模糊推理系统 |
| sugfis | Sugeno 模糊推理系统 |
| plotmf | 绘制输入或输出变量的隶属函数 |
| showfis | 显示带注释的模糊推理系统 |
| evalfis | 评估模糊推理系统 |
| evalfisOptions | evalfis 函数的选项集 |
| readfis | 从文件加载模糊推理系统 |
| writeFIS | 将模糊推理系统保存到文件 |
| mdscale | 非经典多维标度 |
| svds | 奇异值和向量的子集 |
| copyobj | 复制图形对象及其后代 |
| mxRealloc | 使用 MEX 内存管理器重新分配动态内存 |
| mxSetDimensions | 修改维数及各维的大小 |
| mxGetDimensions | 获取维度数组指针 |
| mxDuplicateArray | 创建数组的深拷贝 |
| mxCreateStructArray | 创建 N 维结构体数组 |
| mxCreateDoubleScalar | 创建由指定值初始化的双精度标量数组 |
| mxCreateString | 创建由指定字符串初始化的一维数组 |
| mxSetData | 设置非数值 mxArray 的数据元素指针 |
| mxSetN | 设置 mxArray 的列数 |
| mxSetM | 设置 mxArray 的行数 |
| mexGetField | 按字段名获取结构体字段值 |
| mxCreateStructMatrix | 创建二维结构体数组 |
| mxCreateCellMatrix | 创建二维元胞数组 |
| mxSetFieldByNumber | 按字段编号设置结构体字段值 |
| mexErrMsgIdAndTxt | 显示带标识符的错误消息并终止 MEX 函数 |
| mexWarnMsgIdAndTxt | 显示带标识符的警告消息 |
| timer | 调度 MLang 命令的执行 |
| start | 启动计时器 |
| startat | 排定计时器在指定时间触发回调 |
| stop | 停止计时器 |
| wait | 阻止命令提示符直到计时器停止运行 |