I'm trying to figure out whether an expression is always positive given positive parameters. When the expression is complicated, I can't do this by eye. Is there any way to make Mathematica prove (that is, check) if j is positive for positive c, d, k, ton, toff, V?
j=-2 c d k toff ton - d^2 k toff ton - 2 c k toff^2 ton -
2 d k toff^2 ton - k toff^3 ton - 2 c d k ton^2 - d^2 k ton^2 -
4 c k toff ton^2 - 4 d k toff ton^2 - 3 k toff^2 ton^2 -
2 c k ton^3 - 2 d k ton^3 - 3 k toff ton^3 -
k ton^4 + (Sqrt[k] Sqrt[ton] (toff + ton) Sqrt[
d + toff +
ton] (2 c + d + toff +
ton) \[Sqrt]((c + d) k ton (c + toff + ton) (d + toff + ton) +
4 c d ((d + toff + ton) (k toff + (toff + ton)^2) +
c (k toff +
d (toff + ton) + (toff + ton)^2)) V))/(2 Sqrt[(c +
d) (c + toff + ton)]) + (Sqrt[k] Sqrt[
ton] (toff + ton) Sqrt[(c + d) (c + toff + ton)] Sqrt[
d + toff +
ton] (k ton (d + toff + ton) (2 c + d + toff + ton) +
4 d ((d + toff + ton) (k toff + (toff + ton)^2) +
2 c (k toff +
d (toff + ton) + (toff + ton)^2)) V))/(2 \[Sqrt]((c +
d) k ton (c + toff + ton) (d + toff + ton) +
4 c d ((d + toff + ton) (k toff + (toff + ton)^2) +
c (k toff + d (toff + ton) + (toff + ton)^2)) V))
I have many more expressions like this. I have tried putting in random values of the parameters and I do (so far) always get positive values. But I'd prefer something more convincing than a Monte Carlo argument for this (and other) complicated expressions being positive for any positive inputs. Thoughts?
Answer
Let's define:
f[c_, d_, k_, toff_, ton_, V_] := "the expression equal to j"
Instead of using toff, ton and V I'll use x, y, z. Moreover we define:
assumptions = c > 0 && d > 0 && k > 0 && x > 0 && y > 0 && z > 0;
In case of simpler functions we would try to do something like this:
Reduce[ f[c, d, k, x, y, z] > 0 && assumptions, {c, d, k, x, y, z}]
Although I favor exact symbolic results it would be quite inefficient to prove symbolically that f[c, d, k, x, y, z] is positive when its arguments are restricted by assumptions. In fact much faster way would harness certain numerical functions. Since we would like to prove that f[c, d, k, x, y, z] is positive there should be an extremal value of the function given positive arguments.
Therefore we can exploit NMinimize with appropriate constraints, it's the fastest way for such an involved expression.
NMinimize[{ f[c, d, k, x, y, z], assumptions}, {c, d, k, x, y, z}]
{5.05906*10^-12, {c -> 2.52667, d -> 14.2925, k -> 0.273797,
x -> 5.88427, y -> 6.14607, z -> 0. }}
We've found that the minimum is a positive number for real numbers constrained by assumptions. Thus we are ensured that f[c, d, k, x, y, z] > 0 for all positive arguments. Moreover the result is returned in less than a half of second while with Reduce it would take at least a few minutes.
Comments
Post a Comment