# 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 文件进行了性能优化;

    1. 加载 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 秒

    2. 首次运行加载 .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 秒

    3. 首次运行加载 .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:对二维或三维散点数据插值;

    1. 使用 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 综合得出。

    2. 使用 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

    1. 优化了 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 毫秒

    2. 优化了 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 毫秒

    3. 优化了 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 毫秒

    4. 优化了 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 参数
pdf 概率密度函数
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 阻止命令提示符直到计时器停止运行