1

为了说明我的问题,这里有一个玩具示例:

F[x_] := Module[{out},
   If[x > 1,
    out = 1/2,
    out = 1
    ];
   out
   ];

可以评估和绘制函数。但是,当我尝试对其进行数值积分时,出现错误

NIntegrate[F[x], {x, 0, 2}]

NIntegrate::inumr:对于边界为 {{0,2}} 的区域中的所有采样点,被积函数 out$831 已评估为非数值。>>

4

1 回答 1

3

Integrate 和其他一些函数将首先对符号值进行一些探测。仅给出符号 x 时,您的模块将仅返回(别名)输出。

通过仅为数值定义 F 来解决此问题。NIntegrate 将发现这一点,然后使用数值。

In[1]:= F[x_?NumericQ] := Module[{out},
   If[x > 1, out = 1/2, out = 1]; out];
NIntegrate[F[x], {x, 0, 2}]

Out[2]= 1.5
于 2013-09-19T20:08:01.817 回答