使用pydens求解二元微分方程出现AssertionError如何解决
错误原因
这个AssertionError是pydens校验PDE定义的输入参数数量不匹配触发的,核心问题有4个:
- 参数数量不匹配:你定义的
formlambda参数共有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个参数为例,修改如下:
- 在PDE配置里添加
parameters字段声明自定义参数数量 - 修改采样器适配2维坐标+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
相关产品推荐
相关产品推荐

