对于Mathematica中的插值函数InterpolatingFunction,在哪些场合必须在它外面套上Evaluate命令?如题.目前我只知道,如果要对这样的函数使用Plot3D指令,那是必须要给它套上个Evaluate的,那么,还有哪些场合
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/20 02:35:38
对于Mathematica中的插值函数InterpolatingFunction,在哪些场合必须在它外面套上Evaluate命令?如题.目前我只知道,如果要对这样的函数使用Plot3D指令,那是必须要给它套上个Evaluate的,那么,还有哪些场合
对于Mathematica中的插值函数InterpolatingFunction,在哪些场合必须在它外面套上Evaluate命令?
如题.目前我只知道,如果要对这样的函数使用Plot3D指令,那是必须要给它套上个Evaluate的,那么,还有哪些场合是必须要加上Evaluate的呢?
对于Mathematica中的插值函数InterpolatingFunction,在哪些场合必须在它外面套上Evaluate命令?如题.目前我只知道,如果要对这样的函数使用Plot3D指令,那是必须要给它套上个Evaluate的,那么,还有哪些场合
绘图类的函数基本都有HoldAll属性,我个人的理解是:
不加Evaluate的情况下,Mma永远不会单独计算你的表达式(也就是绘图函数的第一个参数),而是在绘图带入后面的参数求值(很像定义函数里的延时赋值":=").比如:
Plot[1+1+x,{x,0,1}]
在这里Mma不会把1+1+x化简为2+x,而是绘图的过程中代入具体x的值,比如求x=0的坐标过程大概是这样的
x=0
计算1+1+x
得到2
对于Interpolating,不加也是可以的,我猜测原因这个计算不会影响坐标点的计算,先把变量赋上值再计算Interpolating和先求Interpolating在求值最终都能把坐标点求出来.但是不加Evaluate的时候每求一个点的坐标都会求一次插值函数,这样就造成了重复计算,这也许就是帮助里加Evaluate的原因吧.
当计算顺序会影响结果的时候,就必须用Evaluate了.对于这个例子:
fsol[k_?NumericQ] :=
NDSolve[{Derivative[2,0][u][x,t] x^4 ==
x^3 t Cos[x Sin[t]]/(1/10 + Sin[t]) + k Derivative[0,1][u][x,t],
u[0,t] == 0,u[1,t] == 0,u[x,0] == x (1 - x)},
u[x,t],{x,0,1},{t,0,1}]
Plot3D[u[x,t] /.fsol[5][[1]],{t,0,1},{x,0,1},
PlotRange -> All]
不加Evaluate就不行了.不加Evaluate的话x和t的赋值在前,替换规则fsol的计算在后,这时就会在应用fsol的时候出现找不到x和t的情况(因为x和t已经有值了).
综上,帮助里加Evaluate是有道理的.虽然有时候不加Evaluate也能出图,但这样会增加不必要的计算.
这题不用Evaluate也能画出来啊
"如果要对这样的函数使用Plot3D指令,那是必须要给它套上个Evaluate的",举个例子呢?…这算啥,求解偏微分方程那节的帮助坑我…真的不是总是必要的,可是帮助里的这个例子就需要: fsol[k_?NumericQ] := NDSolve[{Derivative[2, 0][u][x, t] x^4 == x^3 t Cos[x Sin[t]]/(1/10 + Sin[t]...
全部展开
"如果要对这样的函数使用Plot3D指令,那是必须要给它套上个Evaluate的",举个例子呢?
收起