集成功能的良好定义

时间:2014-03-05 15:29:15

标签: wolfram-mathematica

我有以下问题:

我定义了一个函数:

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秒钟后我会打断它,无论如何它都太慢了。)

1 个答案:

答案 0 :(得分:1)

正如评论中所述,在:=的定义中将SetDelayed=)更改为Setg)可解决问题。这两个定义之间的区别在于,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时进行评估,这会导致评估速度非常慢。