mathematica 发表于 2021-4-12 11:54:46

mathematica求导绘制隐函数疑问!是不是bug呢?

Clear["Global`*"];(*mathematica11.2,win7(64bit)Clear all variables*)
ff=2*a*Exp-Log+Log
gg=D
(*下面的是直接给出求导结果,为什么能画出两条曲线*)
h1=ContourPlot[{ff==0,gg==0},{x,0.0001,6},{a,0.0001,1}]
(*下面有求导语句,为什么就画不出两条曲线?*)
h2=ContourPlot[{ff==0,D==0},{x,0.0001,6},{a,0.0001,1}]


Clear["Global`*"];(*mathematica11.2,win7(64bit)Clear all variables*)
ff=2*a*Exp-Log+Log
gg=D
(*下面的是直接给出求导结果,为什么能画出两条曲线*)
h1=ContourPlot[{ff==0,gg==0},{x,0.0001,6},{a,0.0001,1}]
(*下面有求导语句,为什么就画不出两条曲线?*)
h2=ContourPlot[{ff==0,D==0},{x,0.0001,6},{a,0.0001,1}]

运行结果为了节省论坛空间,就不上传了,注意带颜色的文字,为什么求导后带入能出结果,而放在里面求导就不行了呢?

majer 发表于 2021-4-12 21:44:23

应该不是bug。逻辑上说挺合理的。

虽然对函数求导得到的是一个函数,但系统里定义的求导运算和Plot一样,不是数学函数,没记错的话,应该叫命令函数。

具体到当前的例子,有两个可能的解释。一个是它的返回值不是通常的函数。而ContourPlot的参数类型必须是数学函数。但直接看求导函数的返回结果,似乎又不是这样。

还有一个可能就是內建命令函数的运行顺序。

注意到在图绘制完成前的报错信息提示说:几个具体的浮点小数不是变量,而要求是变量。有这个要求的应该就是指求导运算那一步吧,而输入的显然是变量函数,怎么会变成具体的数字,导致报错?

最先被执行的是绘图指令。个人猜测是,执行过程中,先把输入的函数插值描点离散化。所以,里面的变量都变成数值散列了。然后这个时候又开始执行内部的求导。但求导的对象变成了数列,所以就报错了。最后系统跳过了这一部分,把图像绘制完成。

mathematica 发表于 2021-4-13 08:18:14

@chyanog @wayne 你们来看看这个问题应该如何解释?
页: [1]
查看完整版本: mathematica求导绘制隐函数疑问!是不是bug呢?