Julia使用NLsolve时共域维度大于定义域出现DimensionMismatch错误
问题结论
这是使用方法错误,并非NLsolve的bug。
错误原因
NLsolve的nlsolve接口有明确的参数维度要求:当你传入长度为N的初始解向量作为求解未知数时,NLsolve会自动为残差函数g!预分配长度为N的残差数组G,要求你在g!内对G写入的结果也必须是长度为N的向量,二者维度需要严格匹配——本质上NLsolve默认求解的是N个方程、N个未知数的闭合非线性方程组。
你最初的代码里:
- 传入的初始解是
[0.1, 0.1],长度为2,NLsolve预分配的G是长度为2的一维数组 - 你用
for i in 1:3生成的推导式数组长度为3,将长度3的数组赋值给长度2的G,广播赋值时维度无法对齐,就触发了DimensionMismatch报错。
你将推导式范围改为1:2后,生成的数组长度和G的维度匹配,自然不再报错。
补充说明
如果你的场景确实需要求解M个方程、N个未知数的超定/欠定方程组,可以通过传入inplace=false定义非修改式的残差函数,返回对应维度的残差向量即可,这类求解需要额外配置优化算法参数,常规场景下默认遵循N维输入对应N维残差的规则即可。
内容的提问来源于stack exchange,提问作者Caspar
相关产品推荐
相关产品推荐

