mathematica 发表于 2020-6-2 13:09:48

又遇上了mathematica的bug

本帖最后由 mathematica 于 2020-6-2 13:34 编辑

一直都很相信mathematica软件,但是最近还是遇上了这个软件的bug
Clear["Global`*"];(*Clear all variables*)
{xa,ya}={1,3}
{xb,yb}={0,0}
{xc,yc}={4,0}
{xd,yd}={4,2}
k1=(yd-ye)/(xd-xe)
k2=(ya-ye)/(xa-xe)
cons=(k2-k1)/(1+k1*k2)+1//Together//Numerator
ans=NMinimize[{MB+MC+ME,
    MB^2==(x-xb)^2+(y-yb)^2&&
    MC^2==(x-xc)^2+(y-yc)^2&&
    ME^2==(x-xe)^2+(y-ye)^2&&
    cons==0&&
    MB>=0&&MC>=0&&ME>=0
},{xe,ye,x,y,MB,MC,ME},AccuracyGoal->20,PrecisionGoal->20,WorkingPrecision->30]



这个求解结果不对!

问题背景如下:

mathematica 发表于 2020-6-2 13:13:16

{6.76386731323477275775716172609, {xe ->
   1.65895224582559307947875038393,
ye -> 2.21070099731101484070201512004,
x -> 0.0000379794082457822341383996359544,
y -> 5.64635171044463173644820455826*10^-6,
MB -> 3.59744981889923378613703373725*10^-7,
MC -> 3.99996202059573747723047807369,
ME -> 2.76390493289405339060330503870}}

这个求解结果根本不对!

mathematica 发表于 2020-6-2 13:24:45

mathematica 发表于 2020-6-2 13:13
{6.76386731323477275775716172609, {xe ->
   1.65895224582559307947875038393,
ye -> 2.210700997 ...

我用lingo17 64bit win7操作系统,计算
!初始赋值;
xa=1;ya=3;
xb=0;yb=0;
xc=4;yc=0;
xd=4;yd=2;
!E点在圆上;
20 - 6*xe + xe^2 - 8*ye + ye^2=0;
!求三条线段的长度;
MB^2=(x-xb)^2+(y-yb)^2;
MC^2=(x-xc)^2+(y-yc)^2;
ME^2=(x-xe)^2+(y-ye)^2;
!三条线段和的最小值;
min=MB+MC+ME;
求解结果如下:
Global optimal solution found.
Objective value:                     5.2947230131116
Objective bound:                     5.2947230131116
Infeasibilities:                      0.12612133559742E-12
Extended solver steps:                               0
Total solver iterations:                           405
Elapsed runtime seconds:                        0.63

Model Class:                                        QP

Total variables:                      7
Nonlinear variables:                  7
Integer variables:                  0

Total constraints:                  5
Nonlinear constraints:                4

Total nonzeros:                      16
Nonlinear nonzeros:                  15



                  Variable                  Value               Reduced Cost
                        XA      1.0000000000000            0.0000000000000
                        YA      3.0000000000000            0.0000000000000
                        XB      0.0000000000000            0.0000000000000
                        YB      0.0000000000000            0.0000000000000
                        XC      4.0000000000000            0.0000000000000
                        YC      0.0000000000000            0.0000000000000
                        XD      4.0000000000000            0.0000000000000
                        YD      2.0000000000000            0.0000000000000
                        XE      2.7031122435702          -0.22427084678506E-04
                        YE      1.7837288838948            0.0000000000000
                        MB      2.8201390812269            0.0000000000000
                         X      2.6079489165186            0.0000000000000
                         Y      1.0732133461211            0.0000000000000
                        MC      1.7577238421647          -0.57155544394449E-04
                        ME       0.71686008971999          -0.87320651063205E-05

                     Row         Slack or Surplus             Dual Price
                         1      0.0000000000000            0.0000000000000
                         2      0.0000000000000            0.0000000000000
                         3      0.0000000000000         0.92471568638404
                         4      0.0000000000000         0.38051005460772
                         5      0.0000000000000          -0.79207705459366
                         6      0.0000000000000         0.61053538883563
                         7      0.0000000000000            0.0000000000000
                         8      0.0000000000000            0.0000000000000
                         9      -0.10658141036402E-13       0.22360941607654
                        10      -0.26645352591004E-14      -0.17729622036317
                        11      -0.12612133559742E-12      -0.28447504993525
                        12      -0.12323475573339E-13      -0.69749226272013
                        13      5.2947230131116         -1.0000000000000

lsr314 发表于 2020-6-2 14:23:38

本帖最后由 lsr314 于 2020-6-2 14:33 编辑

这道题和https://bbs.emath.ac.cn/thread-17297-1-1.html完全一样,就是求一点使之到两点和一圆的圆心距离之和减去圆的半径取最小值,直线是圆的特殊情况。
作图也完全一致,先做出过ABE(字母以下图为准,下同)的圆D,再做以GF为边的等边三角形GFK,DK与圆D的交点E就是所求点。
注:过ABE的圆D是指满足∠BDA=90°的圆。

mathematica 发表于 2020-6-2 14:52:40

lsr314 发表于 2020-6-2 14:23
这道题和https://bbs.emath.ac.cn/thread-17297-1-1.html完全一样,就是求一点使之到两点和一圆的圆心距离 ...

能看出来mathematica为什么bug吗?

mathematica 发表于 2020-6-2 15:16:56

lsr314 发表于 2020-6-2 14:23
这道题和https://bbs.emath.ac.cn/thread-17297-1-1.html完全一样,就是求一点使之到两点和一圆的圆心距离 ...

还是老牌优化软件lingo好,mathematica有bug

chyanog 发表于 2020-6-2 19:16:17

本帖最后由 chyanog 于 2020-6-2 19:46 编辑

稍作修改即可解决问题。
NMinimize[{MB+MC+ME,MB==Sqrt[(x-xb)^2+(y-yb)^2]&&MC==Sqrt[(x-xc)^2+(y-yc)^2]&&ME==Sqrt[(x-xe)^2+(y-ye)^2]&&cons==0},{xe,ye,x,y,MB,MC,ME},WorkingPrecision->40]
不管是解方程组或求最值,没有必要最好不要用太多的变量,不然算起来可能比较慢
NMinimize[{Sqrt[(x-xb)^2+(y-yb)^2]+Sqrt[(x-xc)^2+(y-yc)^2]+Sqrt[(x-xe)^2+(y-ye)^2],cons==0},{xe,ye,x,y},WorkingPrecision->40]
这样得到的精度更高
B1={0,0};
C1={4,0};
E1={3+√5Cos[θ],4+√5Sin[θ]};
NMinimize&[{x,y}-p], {p,{B1,C1,E1}}], {x,y,θ}, WorkingPrecision->40]
Output: {
5.294723011573140131084264863104979933979,
{
    x->2.607891000963563319472106916168673875392,
    y->1.073258586982084715783742532559337791977,
    θ->-1.703977867866132654704426139257573526657
}
}


补充内容 (2020-6-3 10:52):
FindMinimum[{MB+MC+ME,MB^2==(x-xb)^2+(y-yb)^2&&MC^2==(x-xc)^2+(y-yc)^2&&ME^2==(x-xe)^2+(y-ye)^2&&cons==0&&MB>=0&&MC>=0&&ME>=0},{xe,ye,x,y,MB,MC,ME},MaxIterations->10^4]
这样也行

王守恩 发表于 2020-6-3 07:45:51

本帖最后由 王守恩 于 2020-6-3 07:57 编辑

lsr314 发表于 2020-6-2 14:23
这道题和https://bbs.emath.ac.cn/thread-17297-1-1.html完全一样,就是求一点使之到两点和一圆的圆心距离 ...

说得好:求1点使之到3点(2点+1圆弧)距离之和最小
HE+HF+HG=EK=DK-DE
=\(\D\sqrt{(3-2)^2+(4+2\sqrt{3})^2}-\sqrt{5}\)
比较这题与那题:
这题的最小值 EK 是垂直圆弧 BA
那题的最小值 EP 是垂直直线 BC
谢谢 mathematica!找了道好题。

mathematica 发表于 2020-6-3 08:36:16

chyanog 发表于 2020-6-2 19:16
稍作修改即可解决问题。

不管是解方程组或求最值,没有必要最好不要用太多的变量,不然算起来可能比较慢 ...

个人认为是mathematica博而不专导致的,
lingo专门搞最优化这一方面,所以可能算法经受的考验比较多一些。
经历的变量考验比较多一些,但是mathematica博而不专,
经历的优化的考验少一些,经历的大的优化考验比较少。
可能mathematica做做数学题还行,真的做专门的实际工程应用,
估计还是lingo更可靠!

dlpg070 发表于 2020-6-3 12:45:38

chyanog 发表于 2020-6-2 19:16
稍作修改即可解决问题。

不管是解方程组或求最值,没有必要最好不要用太多的变量,不然算起来可能比较慢 ...

chyanog一口气改写了3个正确版本代码,好教材为了研究方便,配了一张附图

计算结果
min=5.294723011573140131041587860996532284563=5.29472,
xe=2.703076611599442267363134882782538481398,
ye=1.783733657382143174433811931411245739003,
xm=2.607891000922405058296016809677233768157,
ym=1.073258587056624216692495174703803557058,
MBm=2.820102740572202118217710274671448817505,
MCm=1.757797331891138312630239889146542099598,
MEm=0.7168229391097997001936376971785413674598
页: [1] 2 3
查看完整版本: 又遇上了mathematica的bug