我有以下问题:
我定义了一个函数:
f[t_]:=(1-Exp[-t])/(1+Exp[-t])
并将其整合:
g[t_]:=Integrate[f[t],t]
然后当我尝试用它绘图时:
Plot[g[t],{t,0,10}]
我得到了Integrate::ilim: Invalid integration variable or limit(s) in 1.0000204285714285
种类的错误列表。
我不明白问题出在哪里,但我希望它与我定义g[t]
的方式一致,即使我称它为一个定义明确的表达式,即-t+2Log[1+e^t]
(另外,当直接绘制这个表达式时,我没有遇到任何问题)。那么,我该如何解决这个问题?
我尝试将函数重新定义为:
g[t_]:=Integrate[f[x],{x,0,t}]
但这种方式需要花费大量时间进行绘图(如果是这样的话,大约10秒钟后我会打断它,无论如何它都太慢了。)
答案 0 :(得分:1)
正如评论中所述,在:=
的定义中将SetDelayed
(=
)更改为Set
(g
)可解决问题。这两个定义之间的区别在于,Set
在定义时评估定义的右侧,并将积分的闭合形式指定为函数g
的值:
f[t_] := (1 - Exp[-t])/(1 + Exp[-t])
g[t_] = Integrate[f[x], {x, 0, t}];
Definition[g]
(* => g[t_]=ConditionalExpression[-t-Log[4]+2 Log[1+E^t],E^t>=-1] *)
使用SetDelayed
右侧(Integrate[f[x], {x, 0, t}]
)在每次调用函数g
时进行评估,这会导致评估速度非常慢。