Wolfram mathematica Mathematica FindInstance[]给出了错误的答案

Wolfram mathematica Mathematica FindInstance[]给出了错误的答案,wolfram-mathematica,Wolfram Mathematica,我试图用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=FindInstanc

我试图用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]/。塞克斯

给予

{{x1->0.2,x2->0,u1->5.16988*10^-25,u2->1} {2.22045*10^-16}


因此,Mathematica似乎自相矛盾。我犯了什么错误?

这里有一种方法:使表达式精确。你应该检查一下,我没弄错

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
-7.2915903961885656971*10^-48

我的猜测是,原始表达式的最小值为零,常数的精度不够。 示例要使其为零,最后一个常量需要

2.494000000000000000000000000000000000000072915903961


尽管考虑到系数的阶数为10^-24,这可能很重要

看来您的错误是假设十进制近似计算将给出准确的结果。任何时候,当你有一个只有3位精度的数字集合,结果是10^-16的倍数,这几乎总是意味着浮点近似错误。尝试用精确的有理数替换所有十进制数,然后再次进行计算。您还错误地组合了Reduce和ForAll。查看他们拥有的带有一些额外参数的ForAll文档,并使用Reduce获取有关参数的条件,以使for ALL语句成为真。在这里,你的说法完全是错误的,我不能做任何改变。@Bill我认为你说得对。在合理化V之后,FindInstance实际上产生了一个点,其中V为负。谢谢大家!@看起来我应该使用Resolve,但Reduce仍然会给出正确的答案。谢谢你指出这一点。是的,没错。这是李雅普诺夫函数的数值近似。截断10^-27项也会使它正定,尽管我没有检查它在平衡时是否仍然为零。使常数合理化也是比尔的建议。
N[min, 20]