Re: wrong solution for double integral of piecewise
- To: mathgroup at smc.vnet.net
- Subject: [mg97000] Re: [mg96968] wrong solution for double integral of piecewise
- From: Bob Hanlon <hanlonr at cox.net>
- Date: Sun, 1 Mar 2009 04:58:05 -0500 (EST)
- Reply-to: hanlonr at cox.net
When you integrated by hand you assumed that b > a, Mathematica gives a more complicated result since it does not make that assumption unless you tell it to do so. Clear[f] f[x_, p_] = Piecewise[{{k, {a <= x <= b, a <= p <= b}}}]; int = Integrate[f[x, p], {x, -Infinity, Infinity}, {p, -Infinity, Infinity}] Piecewise[{{k*(a - b)^2, a - b < 0}}, 0] Simplify[Reduce[int == 1], b > a] // ToRules {k -> 1/(a - b)^2} The UnitStep expression is equivalent to the Piecewise expression expr = {k -> -(1/((a - b)^2 (-1 + UnitStep[a - b])))}; Simplify[expr, b > a] {k -> 1/(a - b)^2} You can include the assumption with the integral Assuming[{b > a}, Integrate[f[x, p], {x, -Infinity, Infinity}, {p, -Infinity, Infinity}]] k (a-b)^2 Integrate[f[x, p], {x, -Infinity, Infinity}, {p, -Infinity, Infinity}, Assumptions -> {b > a}] k (a-b)^2 Bob Hanlon ---- Tom Roche <tlroche at gmail.com> wrote: ============= wrong solution for double integral of piecewise function I've got a function f[\[Chi]_, \[Psi]_] = {Piecewise[{{k, {a <= \[Chi] <= b, a <= \[Psi] <= b}}}, 0]} I'm attempting to solve for k such that f becomes a probability density function by applying the normalization constraint, i.e. solving for k such that the double (indefinite) integral of f equals 1. I can do this by hand pretty easily, integrating first/inside WRT psi and second/outside WRT chi, and I get (1) k = 1/((b-a)^2) I don't have the world's greatest calculus chops, but that looks correct to me. (Am I missing something?) However, when I use Mathematica to Solve[ First[ Integrate[ Integrate[ f[\[Chi], \[Psi]], {\[Psi], -\[Infinity], \[Infinity]} ], {\[Chi], -\[Infinity], \[Infinity]} ] ] == 1, k ] I get (2) {{k -> -(1/((a - b)^2 (-1 + UnitStep[a - b])))}} which seems wrong to me, though I'll admit I don't know what "UnitStep" means. So I'm wondering * does (1) = (2)? or * have I made a syntax error? or * is this just really hard to solve symbolically? If so, is there a better way to setup this function and its solution?