本次更新针对符号计算部分功能进行说明与修复,补充说明符号函数定义,微分方程求解,修复 subs 多字符替换,完善 series 和 int 的语法等功能。更新方式:1.完成2.0预览版中的更新操作2.下载下面的文件,并将里面的代码和文件夹覆盖复制到北太天元安装目录的/plugins/SymPy/scripts下scripts.zip以下为具体更新内容、旧版问题、新版用法及示例:一、补充符号函数定义修复问题原说明文档中仅介绍了 syms 支持定义基础符号变量,无法直接创建符号函数(如 f (x)、g (x,y))。更正说明Syms 支持直接创建符号函数,可一键定义单 / 多变量函数;支持先定义变量再定义函数 或 变量 + 函数同步定义。示例
% 方式1:先定义变量,再定义函数 syms x % 先创建变量x syms f(x) % 定义单变量函数f(x) syms 'g(x)' % 或使用字符串形式 % 方式2:变量+函数同步定义 syms x f(x) % 定义单个变量 syms t w z(w,t) % 定义多个变量注意:使用方式1时一定要先定义自变量,然后定义符号函数,否则命令会未生效但不进行报错。二、补充常微分方程求解(dsolve)函数介绍修复问题使用 dsolve 函数出现错误,本次修复了部分问题完善语法,并给出了注意事项。支持语法1.S = dsolve(eqn) :求解微分方程 eqn,其中 eqn 是符号方程。使用 diff 和 == 来表示微分方程。例如,diff(y,x) == y 表示方程 dy/dx = y。通过将 eqn 指定为由微分方程组中的方程组成的向量来求解该微分方程组。2.S = dsolve(eqn,cond) 求解具有初始条件或边界条件 cond 的 eqn。3.S = dsolve(eqns,conds) 求解具有初始条件或边界条件 conds 的 方程组 eqns。注意:这里的 eqns 需要使用 horzcat 进行并置或者使用元胞数组, conds 仅支持使用元胞数组的形式。使用示例
% 求解一阶微分方程
syms a t f(t)
eqf = eq(diff(f, t), a*f);
disp(dsolve(eqf))
% 输出结果为: C1*exp(a*t)
% 加上初值条件:
disp(dsolve(eqf, eq(subs(f, t, 0), 5)))
% 输出结果为: 5*exp(a*t)
% 求解二阶微分方程:
eqf2 = eq(diff(f, t, 2), a*f);
disp(dsolve(eqf2))
% 输出结果为: C1*exp(-sqrt(a)*t) + C2*exp(sqrt(a)*t)
% 加上两个初值条件:
df = diff(f, t);
conds = {eq(subs(f, t, 0), 0), eq(subs(df, t, 0), 1)};
disp(dsolve(eqf2, conds))
% 输出结果为:exp(sqrt(a)*t)/(2*sqrt(a)) - exp(-sqrt(a)*t)/(2*sqrt(a))
% 求解二元常微分方程组:
syms t y(t) z(t)
eq1 = diff(y,t)==z;
eq2 = diff(z,t)==-y;
eqs = {eq1,eq2};
s = dsolve(eqs);
% 此时会返回 cell 数组:
disp(s{1})
% 输出结果为: Eq(y(t), C1*sin(t) + C2*cos(t))
disp(s{2})
% 输出结果为: Eq(z(t), C1*cos(t) - C2*sin(t))三、修复 subs 多字符替换功能修复问题subs 支持多字符替换但是结果不对,应该是命令未生效所致。本次修复了该问题。使用示例syms x y z % 定义符号变量 expr = x + 2*y + 3*z; vars = horzcat(x,y,z); % 使用horzcat将变量并置 syms a b values = horzcat(1,a,b); newexpr = subs(expr,vars,values); % 使用变量替换 disp(newexpr) % 修改前输出结果为 x + 2*y + 3*z (似乎是未生效) % 修改后输出结果为 2*a + 3*b + 1四、series 语法功能完善修复问题函数series的语法使用有限,仅支持 series(f),其他情况均报错。在出现错误的基础上也完善了语法功能。支持语法1.series(f):默认按symvar(f,1)变量,在0 点展开至 5 阶2.series(f, var):指定变量var,在0 点展开至 5 阶3.series(f, var, a):指定变量var,在a 点展开4.series(__,Name,Value):指定展开点 ExpansionPoint、阶数 Order(Name-Value 参数)使用示例
syms x f = sqrt(x) + x^2; % 待展开函数 % 示例1:默认展开 s1 = series(f); disp(s1) % 示例2:指定展开变量 s2 = series(f,x); disp(s2) % 示例3:指定展开点 s3 = series(f,x,1); disp(s3) % 示例4:指定展开点inf,展开阶数 9 s4 = series(f,x,'ExpansionPoint',Inf,'Order',9); disp(s4)五、int 语法功能完善修复问题当指定参数上下界 a,b 时运行报错。对 int 的所有输入参数组合进行的完善。下面是现已支持的语法。支持语法1.F = int(expr) :计算符号表达式 expr 的积分。使用默认积分变量。2.F = int(expr,var) :计算 expr 关于符号标量变量 var 的不定积分。3.F = int(expr,a,b) :计算 expr 从 a 到 b 的定积分。使用默认积分变量。4.int(expr,[a b]) 等效于 int(expr,a,b)。5.F = int(expr,var,a,b) :计算 expr 关于符号标量变量 var 从 a 到 b 的定积分。6.int(expr,var,[a b]) 等效于 int(expr,var,a,b)。7.F = int(___,Name,Value) :使用一个或多个 Name,Value 参量指定附加选项。支持的 Name 包括 'IgnoreSpecialCases', 'PrincipalValue', 'Hold'。使用示例
% 示例: % 不定积分 syms x y disp(int(cos(x))) % 输出结果为 sin(x) disp(int(log(x + y), x)) % 输出结果为 x*log(x + y) - x + y*log(x + y) % 定积分、重积分 disp(int(exp(-x), 0, inf)) % 输出结果为 1 disp(int(2*x, sin(y), cos(y))) % 输出结果为 cos(2*y) disp(int(int(exp(-x^2 - y^2), x, -inf, inf), y, -inf, inf)) % 输出结果为 pi % 保持积分号和计算 Cauchy 主值 syms x; disp(int(1/(x - 1), x, 0, 2)) % 输出结果为 nan disp(int(1/(x - 1), x, 0, 2, "Hold", true)) % 输出结果为 Integral(1/(x - 1), (x, 0, 2)) disp(int(1/(x - 1), x, 0, 2, "PrincipalValue", true)) % 0六、expand 函数bug修复修复问题expand 函数使用均报错,本次解决修复了报错问题。支持语法1.expand(S) 将展开 S 中的所有括号,并通过应用标准恒等式简化 cos(x + y) 等函数的输入。2.expand(S,Name,Value) 使用一个或多个名称-值对组参量指定的附加选项。支持的 Name 包含 'ArithmeticOnly' 、'IgnoreAnalyticConstraints'。使用示例
clear; clc; %% 示例 1:多项式展开 % 展开二项式 (x+y)^2,验证基本的多项式展开功能 syms x y g = expand((x+y)^2); disp(g) % 输出: x^2 + 2*x*y + y^2 dg = diff(g, x); % 对展开后的多项式求关于 x 的导数 disp(dg) % 输出: 2*x + 2*y %% 示例 2:向量元素的批量展开 % 对向量中的每个元素分别进行展开,演示 horzcat 构造向量及批量展开 syms t V = horzcat(sin(2*t), cos(2*t)); % 构造水平向量 [sin(2t), cos(2t)] vf = expand(V); disp(vf) % 输出: Matrix([[2*sin(t)*cos(t), 2*cos(t)^2 - 1]]) %% 示例 4:三角函数展开与 ArithmeticOnly 选项 % 对比默认展开与仅算术展开的效果,演示 ArithmeticOnly 选项的作用 syms x f = (sin(3*x) - 1)^2; disp(expand(f)) % 输出: 16*sin(x)^6 - 24*sin(x)^4 + 8*sin(x)^3 + 9*sin(x)^2 - 6*sin(x) + 1(完全展开三角函数) disp(expand(f, 'ArithmeticOnly', true)) % 输出: sin(3*x)^2 - 2*sin(3*x) + 1(不展开 sin(3*x),仅展开代数部分) %% 示例 5:对数展开与 IgnoreAnalyticConstraints 选项 % 对比默认展开与强制展开对数的效果,演示忽略解析约束的作用 syms a b c f = log((a*b/c)^2); disp(expand(f)) % 输出: log(a^2*b^2/c^2)(默认不展开对数,因涉及定义域限制) disp(expand(f, 'IgnoreAnalyticConstraints', true)) % 输出: 2*log(a) + 2*log(b) - 2*log(c)(强制展开,忽略 a,b,c>0 的约束)七、修复 solve 求解多元方程组多个解问题修复问题solve 函数在求解多元方程组含有多个解的问题时会出现报错,修复该问题,并输出结构体数组形式包含解。使用示例
%% 多元方程组求解,多个解 syms u v % 定义方程组:使用 horzcat 将多个方程水平拼接 % 方程1: 2*u^2 + v^2 = 0 (两个平方项之和为零) % 方程2: u - v = 1 (线性约束) eqns = horzcat(2*u^2 + v^2 == 0, u - v == 1); % 指定求解变量顺序 [v, u] % vars 的顺序会影响返回结构体 S 中字段的排列:S.v 在前,S.u 在后 vars = horzcat(v, u);% 求解方程组 S = solve(eqns, vars)% 输出包含 v,u 字段的1×2结构体,说明有两组解 disp(S.v) % 输出解的v的值 disp(S.u) % 输出解的u的值注意:多元方程组得到多个解时的结果保存在结构体数组中,数组的大小代表解的个数,结构体中的字段代表未知变量,使用 disp 显示时需要使用类似 disp(S.x) 的形式来分别显示所有解中x的值。八、新增 log10 函数使用示例
syms x f = x^3; fLog10 = log10(f) disp(fLog10) % 输出 log(x^3)/log(10)
1. 基本信息SymPy工具箱 预览版 20260429 本次 SymPy 工具箱预览版基于北太天元 2025 SymPy 插件完成架构重构,兼容 M 语言函数及语法,实现用户现有脚本无缝迁移;同时扩充符号计算能力,新增级数运算、积分变换、方程求解、高精度数值计算等高频函数,覆盖符号变量创建、极限微分计算、积分求解、符号化简及符号初等运算等核心应用场景,进一步完善北太天元符号计算功能。2. 功能概览SymPy 工具箱预览版全量功能详见下表。需特别说明:部分旧版以 sym 为前缀的函数已在本次预览版中完成更名,具体可参见表格对应备注;另有部分旧版函数仍在重构适配中,相关能力将在正式版陆续开放。函数名函数描述支持的语法备注sym创建单个符号变量x = sym("x")sym(__,set)sym(num)sym(strnum)syms创建单个或者多个符号变量syms var1 ... varNsyms ___ setcumprod符号累积乘积B = cumprod(A)B = cumprod(A,dim)A 仅支持符号变量数组,不支持表达式cumsum符号累积和B = cumsum(A)B = cumsum(A,dim)A 仅支持符号变量数组,不支持表达式series皮瑟级数series(f,var)taylor泰勒级数T = taylor(f,var)T = taylor(f,var,a)T = taylor(f,var,a,order)原函数名:symtaylorsymprod级数的乘积F = symprod(f,k,a,b)F = symprod(f,k)vpasum使用变精度进行数值求和s = vpasum(f,a,b)s = vpasum(f,x,a,b)ilaplace拉普拉斯逆变换f = ilaplace(F)f = ilaplace(F,transVar)1.不支持F为符号数值 2.显示结果均多了Heaviside(x)laplace拉普拉斯变换F = laplace(f)F = laplace(f,var,transVar)limit符号表达式的极限limit(f,var,a)limit(f,var,a,"left")limit(f,var,a,"right")原函数名:symlimit支持符号变量、符号表达式,不支持符号向量和矩阵diff符号微分Df = diff(f)Df = diff(f,var)Df = diff(f,var,n)Df = diff(f,var1,...,varN)原函数名:symdiff支持符号变量、符号表达式,不支持符号向量和矩阵,方程int定积分与不定积分F = int(expr)F = int(___,Name,Value)原函数名:symint仅支持部分Namevpaintegral可变精度算术进行高精度的数值积分vpaintegral(f,a,b)vpaintegral(f,x,a,b)vpaintegral(___,Name,Value)Name仅支持'waypoints'integrateByParts分部积分G = integrateByParts(F,du)积分项含有非积分式会报错vpasolve数值求解符号方程S = vpasolve(eqn,var)S = vpasolve(eqns,vars)1.Eqn 支持符号方程,不支持表达式2.对于多个解的问题仅能返回一组解solve方程和方程组求解器S = solve(eqn,var)S = solve(eqns,vars)1. Eqn 支持符号方程,不支持表达式vpa可变精度算术(任意精度算术)yVpa = vpa(y)yVpa = vpa(y,d)原函数名:symvpa 支持表达式,不支持数值(double)、向量和矩阵subs符号代换snew = subs(s,match,replacement)原函数名:symsubs支持符号变量,表达式,方程,不支持符号向量和矩阵double将符号转化为浮点数D = double(s)原函数名:sym2double仅支持符号数值,不支持向量和矩阵fourier符号表达式的傅里叶变换FT = fourier(f)FT = fourier(f,transVar)FT = fourier(f,var,transVar)ifourier符号表达式的傅里叶逆变换ifourier(F)ifourier(F,transVar)ifourier(F,var,transVar)eq创建符号等式A == Beq(A,B)simplify代数简化S = simplify(expr)原函数名:symsimplify仅支持符号表达式,不支持向量和矩阵sqrt求符号表达式的平方根sqrt(x)不支持符号向量和矩阵abs符号绝对值abs(z)不支持符号向量和矩阵exp符号指数exp(x)不支持符号向量和矩阵log符号对数log(x)不支持符号向量和矩阵acos符号反余弦acos(x)不支持符号向量和矩阵asin符号反正弦asin(x)不支持符号向量和矩阵atan符号反正切atan(x)不支持符号向量和矩阵cos符号余弦cos(x)不支持符号向量和矩阵sin符号正弦sin(x)不支持符号向量和矩阵tan符号正切tan(x)不支持符号向量和矩阵acosh符号反双曲余弦acosh(x)不支持符号向量和矩阵asinh符号反双曲正弦asinh(x)不支持符号向量和矩阵cosh符号双曲余弦cosh(x)不支持符号向量和矩阵sinh符号双曲正弦sinh(x)不支持符号向量和矩阵tanh符号双曲正切tanh(x)不支持符号向量和矩阵3. 已知问题1) 使用过程中可能出现syms函数不存在的情况,重启软件即可解决。2) 运行示例脚本时,可能会出现该脚本或其他脚本不存在的提示,重启软件即可解决;建议优先使用运行节功能,避免运行整个脚本。3) 部分新增函数的帮助信息无法通过help函数获取,其具体使用方法可参照函数帮助文档。4) 目前需通过disp函数打印符号变量及符号表达式的内容。5) 部分函数的返回形式与对标软件存在差异,该差异不影响计算结果的正确性。
各位用户好,近期我们收到很多关于 符号计算工具箱 的功能需求和建议。为了让大家尽早用上重做后的工具箱,我们决定先以预览版形式发布,欢迎下载试用,也希望大家帮我们一起测试。适配版本:北太天元 2025 版支持平台:Windows 10/11、Ubuntu amd64/arm64、macOS arm64/x86_64另外,由于2026年6月29日对SymPy工具箱又进行了一次更新,建议在完成本篇文档中的内容更新后,根据 SymPy工具箱更新说明 这篇文档进行再次更新1. 主要更新① 架构重构,实现函数重载旧版的符号计算函数命名包含 sym 前缀,例如 symdiff、symint 等函数,使用起来不太方便。新版通过架构重构后,实现同名函数重载:
% 旧版
x = sym('x'); y = symdiff(sin(x));
% 新版
syms x; y = diff(sin(x)); disp(y) % diff 自动重载② 新增近 20 个函数涵盖 laplace / ilaplace、fourier / ifourier、solve / vpasolve、int / vpaintegral、limit、series、symprod、vpasum、cumsum / cumprod、integrateByParts 等。完整函数列表会在工具箱更新日志中提供。使用示例文件、函数说明文档会随更新包一同提供。③ 多平台同步发布2. 使用方法下载对应平台的库文件 → 解压 → 替换到本地 2025 安装目录中相应位置即可生效。3. 关于预览版作为预览版本,实际使用中可能存在一些 bug 或与预期不一致的结果(部分函数的已知差异详见说明文档备注列)。如果您在使用过程中遇到任何问题、异常输出或有改进建议,欢迎直接在本帖下方留言反馈,我们会逐条跟进处理,您的反馈会直接帮助我们把正式版做得更好 4. 下载① Windows x86_64SymPy-dev-2.0-preview-windows_x86_64② Ubuntu amd64SymPy-dev-2.0-preview-Ubuntu-amd64③ Ubuntu arm64SymPy-dev-2.0-preview-Ubuntu-arm64④ macOS arm64SymPy-dev-2.0-preview-MacOS_arm64⑤ macOS x86_64SymPy-dev-2.0-preview-MacOS_x86_64⑥ 函数使用说明符号计算工具箱预览版函数使用说明 5. 预览版更新指南注:以下指南皆基于北太天元2025版本 进行。① Windows下更新 1. 加载插件 a) 下载社区上对应系统的压缩包并将压缩包解压到本地,将其中的main.dll文件替换软件安装目录下文件夹(D:\baltamatica\plugins\SymPy)中的对应文件; 并将原有北太天元安装目录下的 SymPy\scripts 目录删除(D:\baltamatica\plugins\SymPy\scripts),将压缩包中的scripts 放到SymPy目录下。 b) 同时将压缩包中的libbt_builtin_array.dll替换软件安装目录下文件夹(D:\baltamatica\lib)中的对应文件。 c) 打开北太天元2025,加载插件SymPy。(会默认同步加载Python) 2. 加载脚本 a) 从地址栏点击文件夹图标,选择压缩包解压后的文件夹Examples打开,就可以使用里面的所有示例了。(注意:推荐使用运行部分代码来运行每个示例)② Ubuntu下更新 1. 加载插件 a) 下载社区上对应系统的压缩包并将压缩包解压到本地,将其中的main.so文件替换软件安装目录下文件夹(/opt/Baltamatica/plugins/Sympy)中的对应文件; 并将原有北太天元安装目录下的 SymPy\scripts 目录删除(/opt/Baltamatica/plugins/Sympy/scripts),将压缩包中的scripts 放到SymPy目录下。 b) 同时将压缩包中的libbt_builtin_array.so替换软件安装目录下文件夹(计算机/opt/Baltamatica/lib)中的对应文件。 c) 打开北太天元2025,加载插件SymPy。(会默认同步加载Python) 2. 加载脚本 a) 从地址栏点击文件夹图标,选择压缩包解压后的文件夹Examples打开,就可以使用里面的所有示例了。(注意:推荐使用运行部分代码来运行每个示例)③ macOS下更新 1. 加载插件 a) 下载社区上对应系统的压缩包并将压缩包解压到本地,将其中的main.dylib文件替换软件安装目录下文件夹(根据下图指引到Contents -> plugins -> SymPy)中的对应文件; 并将原有北太天元安装目录下的 SymPy\scripts 目录删除(Contents -> plugins -> SymPy -> scripts),将压缩包中的scripts 放到SymPy目录下。 b) 同时将压缩包中的libbt_builtin_array.dylib替换软件安装目录下文件夹(Contents -> Frameworks)中的对应文件。 c) 打开北太天元2025,加载插件SymPy。(会默认同步加载Python) 2. 加载脚本 a) 从地址栏点击文件夹图标,选择压缩包解压后的文件夹Examples打开,就可以使用里面的所有示例了。(注意:推荐使用运行部分代码来运行每个示例)
在进行符号计算时,出现“运算 'sin' 不支持输入类型为 extern 的变量。”的问题,请问如何解决才能进行x的三角函数形式的符号运算?【帮助文档显示sin函数同时接受实数和复数输入,并未告知如何支持extern类型的变量输入】
使用 symbolic 插件提供的 sym 命令创建符号变量 x 后,工作区不显示任何变量信息使用 whos 命令查看发现只有 ans 这个变量,且类型识别为 extern. 将这个 ans 赋值给 x 之后,无论参与运算工作区都是不显示任何信息的,也就是工作区无法识别 extern 这种类型的变量。目前将所有公布过的正式版本都安装尝试了一遍,都是这种情况。