使用符号数学的derivative与substitute后传值报错?
技术分享
发布于 2025-07-18 11:46:48
查看 1过去319天
因为经过函数 derivative 与 substitute 后的数据类型是符号类型,后续操作需要通过 value 取出来为数据类型。
示例代码如下:
using TySymbolicMath
using TyMath
using TyBase
@variables x
f = x^2 + 3 * x + 5
# 利用derivative函数对表达式求x的一阶导数,c = 3+2x
c = derivative(f, x)
a = 11;
speed = Array{Float64}(undef, a);
rho = randi(4, 1, 11);
for i = 1:11
# 指定x值,对一阶导数进行计算
Gx = substitute(c, x => rho[i] / 180 * pi)
Gx = Gx + 3
speed[i] = Gx
end
运行上述代码会出现报错信息:
ERROR: MethodError: no method matching Float64(::Num)

这里可以看到在代码中定义了变量 speed 为 Array {Float64} ,而变量 Gx 为符号类型的数据,因此导致报错。
通过函数 value 将变量取为数据类型,代码如下:
using TySymbolicMath
using TyMath
using TyBase
@variables x
f = x^2 + 3 * x + 5
# 利用derivative函数对表达式求x的一阶导数,c = 3+2x
c = derivative(f, x)
a = 11;
speed = Array{Float64}(undef, a);
rho = randi(4, 1, 11);
for i = 1:11
# 指定x值,对一阶导数进行计算,并用函数value将数值取出
Gx = value(substitute(c, x => rho[i] / 180 * pi))
Gx = Gx + 3
speed[i] = Gx
end
此时可以正常运行代码不报错。
所属专栏:Syslab基础平台
产品信息:Syslab科学计算环境