mathematica中出现错误提示:

FindRoot::nlnum:Thefunctionvaluexxxisnotalistofnumberswithdimensions{2}at{\[CapitalTh... FindRoot::nlnum: The function value xxx is not a list of numbers with dimensions {2} at {\[CapitalTheta],\
\[CapitalPhi]} = {1.`,0.8`}.
展开
 我来答
xzcyr
2020-05-02 · TA获得超过3400个赞
知道大有可为答主
回答量:1400
采纳率:100%
帮助的人:673万
展开全部

出现这种问题的可能性很多,你不贴具体代码的话实在很难判断。


百度知道现在好像允许编辑已经被提问者/网友采纳的问题了,那就把我之前补在评论区的东西贴到上面来吧。


上已谈及,光靠警告信息(warning)这问题基本没法答,因为警告信息仅仅是在机器角度上提示出错可能性,和问题症结所在常常隔了好几层。比如问题中的 nlnum ,一个最简单的引起它的方法是:


Clear[a, x]; 

FindRoot[a x == 0, {x, 2}] 


这个例子的错误之处是一目了然的: FindRoot 是个求数值根的函数,现在我们要求 x 的值,那么方程 a x==0 里就只能有 x 一个未知数。而我们的 a 却没赋值,所以求解失败了,可是, Mathematica 对此给出的 warning 是怎样的呢?它给的可不是“你的 a 忘了赋值了”之类直白的内容,而是“在 {x} = {2.} 处,函数值 {2. a} 不是由数字组成的维度为 {1} 的列表.” 


为什么给出的是这种奇怪的说明?因为 FindRoot 在数值求解方程时会把 x=2 给代入到 a x 里(学过数值求根的方法的同学应该不难理解,限于篇幅这里不展开)计算出表达式 a x 的值。正常情况下 a x 应该算出一个纯数值值,但是,这里的 a 没有赋值,算出了一个2. a, FindRoot 这才发现了待求的方程不对劲,因此提示“ x=2 时,2. a (即将 x=2 代入 a x 所得的东西)不是个数字”(原文说的是“列表”,因为 FindRoot 是能解方程组的。还不明白的同学试试这个:Clear[a, x, y]; FindRoot[{a x == 0, y == 2}, {x, 2}, {y, 1}]。)


这就是我前面所说的“在机器角度上提示出错可能性”,尽管在我们看来,出错的原因是“ a 没赋值”,但在软件看来,这里出现的问题只是, FindRoot 里那个方程(组),或者说,位于 FindRoot 第一个参数(argument)里的那坨东西,在代入自变量初值后没算出数值。


上文我们分析的是一种最简单的情况,实际情况往往复杂,因为如前所述,只要“ FindRoot 第一个参数(argument)里的那坨东西,在代入自变量初值后没算出数值”, nlnum 就会出现。能导致这种情况的可能性太多了。比如说题主的这个问题,信息中的function value是 xxx ,请注意,它没有带小数系数,仅仅是个 xxx 。这表明这个xxx里面很可能原本存了个方程但如今却被 Clear 掉了。(顺便说一句,给表达式取 xxx 这种名字是个很不好的。)再比如,


FindRoot[1/x == 0, {x, 0}]


也会导致 nlnum ,但是它会出 nlnum ,是因为 1/x 在 x=0 处没定义。


想必诸位已经被前面的解说弄得云里雾里了吧。(其实我很怀疑有几人能坚持把它读完。)没事,大家看不懂也没关系,说了这么多,我只是想要告诉大家(或者说,是说服大家),单是凭着 Warning 名字在网上乱搜是很难定位你的问题所在的,就算能侥幸找到相关的解释,其内容也往往不是初学者所能理解的,所以在进行相关提问时,请务必附上出错的代码!

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式