我试图使用Mathematica来验证以下功能
V[x1_, x2_, u1_, u2_] = 1.494*u1^2 - 2.094 10^-24*u1 + 1.494*u2^2 - 3.988*u2 + 1.994*x2^2 - 7.333 10^-24*x2 + 2.494
是约束u1^2+u2^2==1
的正定。
Reduce[ForAll[{x1, x2, u1, u2}, u1^2 + u2^2 == 1, V[x1, x2, u1, u2] >= 0], {x1, x2, u1, u2}, Reals]
返回False。但是搜索反例
cex = FindInstance[u1^2 + u2^2 == 1 && V[x1, x2, u1, u2] < 0, {x1, x2, u1, u2}, Reals]
V[x1, x2, u1, u2] /. cex
给出
{{x1 -> 0.2, x2 -> 0, u1 -> 5.16988*10^-25, u2 -> 1.}}
{2.22045*10^-16}
所以,Mathematica似乎与自己相矛盾。我犯了什么错误?
答案 0 :(得分:1)
这里有一种方法:使表达式完全正确。 (你应该检查我是否正确)
exp=1494/1000*u1^2 - 2094 10^-27*u1 + 1494/1000*u2^2 - 3988/1000*u2 +
1994/1000*x2^2 - 7333 10^-27*x2 + 2494/1000
现在我们可以找到一个确切的最小值:
min = Minimize[{exp, u1^2 + u2^2 == 1}, {u1, u2, x2}] // Simplify //First
这是否定的:
min<0
真
然而这是一个非常小的负值:
N[min, 20]
-7.2915903961885656971 * 10 ^ -48
我的猜测是原始表达式被构造成具有零最小值并且常量没有给出足够的精度。 将最后一个常量设为零的示例
2.4940000000000000000000000000000000000000000000072915903961 ..
虽然假设你有10 ^ -24的系数,但这可能是重要的。