将分段定义的函数积分到最大值

Kas*_*per 4 maxima

假设我有以下功能:

f(x) := if x<=0 then 0 else if x<=1 then 1 else -1;
Run Code Online (Sandbox Code Playgroud)

或任何其他分段定义的函数。

函数定义似乎有效:

(%i9) f(-11);
f(1/2);
f(2);
(%o7) 0
(%o8) 1
(%o9) -1
Run Code Online (Sandbox Code Playgroud)

然而,这里不评估集成。有可能以某种方式获得 Maxima 中的积分值吗?如果没有的话,是否可以用最大数值来完成?

Rob*_*ier 5

load(abs_integrate)获取abs_integrate包,它可以integrate处理unit_step. 您必须根据 编写分段函数unit_step。例如:

(%i1) load (abs_integrate) $
(%i2) e : unit_step(t) - 2*unit_step(t - 1) $
(%i3) integrate (e, t, a, b);
             abs(b) - b - 2 abs(b - 1) - abs(a) + a + 2 abs(a - 1)
(%o3)        -----------------------------------------------------
                                       2
Run Code Online (Sandbox Code Playgroud)

对于数值积分,quad_qags(以及其他四元组函数)可以处理unit_stepif表达式。quad_qags不需要abs_integrate