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

使用pydens求解二元微分方程出现AssertionError如何解决

错误原因

这个AssertionError是pydens校验PDE定义的输入参数数量不匹配触发的,核心问题有4个:

  • 参数数量不匹配:你定义的form lambda参数共有7个(u, x, y, a,b,v,n),其中第一个参数u是待求解的函数本身,剩余6个是输入参数。但你的PDE配置只声明了n_dims=2(对应x、y两个坐标变量),也没有额外声明自定义参数,pydens默认参数数量n_parameters=0、额外函数数量n_funs=0,三者相加总和为2,和6完全对不上,触发断言。
  • 表达式语法错误:你在PDE表达式里用了[]、{}作为运算括号,Python中这两个符号分别对应列表/索引、字典/集合,算术运算只能用小括号()。
  • 采样器和参数声明不对应:你构造的采样器s = NumpySampler('u', dim=2) & NumpySampler('u', dim=1) & NumpySampler('u', dim=1)是2维坐标+2维参数的采样,和你lambda里写的4个自定义参数(a、b、v、n)不匹配。
  • track回调的lambda也存在同样的参数数量不匹配问题。

修复方案

首先明确你需要传入的自定义参数数量,以你代码里写的a、b、v、n4个参数为例,修改如下:

  1. 在PDE配置里添加parameters字段声明自定义参数数量
  2. 修改采样器适配2维坐标+4个参数的输入
  3. 把所有非运算用的括号统一替换为小括号
  4. 保持track的lambda参数和form一致

修改后的核心代码片段:

pde = {
    'n_dims': 2,
    'parameters': 4, # 声明4个自定义参数
    'form': lambda u, x, y, a,b,v,n: D(D(u, x), x) + D(D(u, y), y) - P(a)*P(b)*(exp(u/P(v)) - exp((0.0 - 1.0)*(u/P(v))) - ((exp(18.0) - P(n))/P(b))),
    'boundary_condition': 1          
}                       
config = {
    'pde': pde,
    'track': {'d2x+d2y': lambda u, x, y,a,b,v, n: D(D(u, x), x) + D(D(u, y), y)},
    # 其余配置不变
}    
# 采样器适配2维坐标+4个参数
s = NumpySampler('u', dim=2) & NumpySampler('u', dim=1) & NumpySampler('u', dim=1) & NumpySampler('u', dim=1) & NumpySampler('u', dim=1)

如果你实际只需要2个自定义参数,删掉lambda里多余的参数、保持采样器不变即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 10:18:00