You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Latexify.jl调用latexalign时遇LotkaVolterra无funcs字段错误求助

解决latexalign调用报错“type LotkaVolterra has no field funcs”

在使用@ode_def定义LotkaVolterra微分方程模型后,调用latexalign(lv!)时触发错误:type LotkaVolterra has no field funcs。已安装ParameterizedFunctions和最新版Latexify,但问题未解决。

相关代码:

using DifferentialEquations
using Plots; gr()
using ParameterizedFunctions
using Latexify

lv! = @ode_def LotkaVolterra begin
    dx = a*x -b*x*y
    dy = -c*y + d*x*y
end a b c d
u0 = [1.0,1.0]
p = (1.5, 1.0, 3.0, 1.0)
tspan = (0.0, 10.0)
prob = ODEProblem(lv!, u0, tspan, p)
sol = solve(prob)
plot(sol)
latexalign(lv!)
print(latexalign(lv!))
display(lv!.Jex)

解决方案1:改用ModelingToolkit定义模型(推荐)

当前SciML生态更推荐使用ModelingToolkit定义符号化微分方程,它对Latexify的支持更完善,也避免了旧版ParameterizedFunctions的结构兼容问题。修改后的代码如下:

using DifferentialEquations
using Plots; gr()
using ModelingToolkit
using Latexify

@variables t x(t) y(t)
@parameters a b c d
D = Differential(t)

# 定义方程
eqs = [
    D(x) ~ a*x - b*x*y,
    D(y) ~ -c*y + d*x*y
]

# 创建系统
@named lv_system = ODESystem(eqs)
# 转换为ODEProblem
u0 = [x => 1.0, y => 1.0]
p = [a => 1.5, b => 1.0, c => 3.0, d => 1.0]
tspan = (0.0, 10.0)
prob = ODEProblem(lv_system, u0, tspan, p)
sol = solve(prob)
plot(sol)

# 生成LaTeX对齐格式
latexalign(eqs)
print(latexalign(eqs))

解决方案2:适配旧版ParameterizedFunctions的调用方式

如果坚持使用@ode_def,可以直接提取方程表达式传递给latexalign,而非传入生成的LotkaVolterra对象:

# 替换原来的latexalign调用
latexalign([lv!.dx, lv!.dy])
print(latexalign([lv!.dx, lv!.dy]))

内容的提问来源于stack exchange,提问作者Spaceman98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:13:31