找回密码
 欢迎注册
查看: 32463|回复: 52

[灌水] 又遇上了mathematica的bug

[复制链接]
发表于 2020-6-2 13:09:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

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

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

复制代码


这个求解结果不对!

问题背景如下:
QQ截图20200602132936.png
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 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}}

这个求解结果根本不对!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-6-2 13:24:45 | 显示全部楼层
mathematica 发表于 2020-6-2 13:13
{6.76386731323477275775716172609, {xe ->
   1.65895224582559307947875038393,
  ye -> 2.210700997 ...

我用lingo17 64bit win7操作系统,计算
  1. !初始赋值;
  2. xa=1;ya=3;
  3. xb=0;yb=0;
  4. xc=4;yc=0;
  5. xd=4;yd=2;
  6. !E点在圆上;
  7. 20 - 6*xe + xe^2 - 8*ye + ye^2=0;
  8. !求三条线段的长度;
  9. MB^2=(x-xb)^2+(y-yb)^2;
  10. MC^2=(x-xc)^2+(y-yc)^2;
  11. ME^2=(x-xe)^2+(y-ye)^2;
  12. !三条线段和的最小值;
  13. min=MB+MC+ME;
复制代码

求解结果如下:
  1.   Global optimal solution found.
  2.   Objective value:                       5.2947230131116
  3.   Objective bound:                       5.2947230131116
  4.   Infeasibilities:                      0.12612133559742E-12
  5.   Extended solver steps:                               0
  6.   Total solver iterations:                           405
  7.   Elapsed runtime seconds:                          0.63

  8.   Model Class:                                        QP

  9.   Total variables:                      7
  10.   Nonlinear variables:                  7
  11.   Integer variables:                    0

  12.   Total constraints:                    5
  13.   Nonlinear constraints:                4

  14.   Total nonzeros:                      16
  15.   Nonlinear nonzeros:                  15



  16.                   Variable                  Value               Reduced Cost
  17.                         XA        1.0000000000000            0.0000000000000
  18.                         YA        3.0000000000000            0.0000000000000
  19.                         XB        0.0000000000000            0.0000000000000
  20.                         YB        0.0000000000000            0.0000000000000
  21.                         XC        4.0000000000000            0.0000000000000
  22.                         YC        0.0000000000000            0.0000000000000
  23.                         XD        4.0000000000000            0.0000000000000
  24.                         YD        2.0000000000000            0.0000000000000
  25.                         XE        2.7031122435702          -0.22427084678506E-04
  26.                         YE        1.7837288838948            0.0000000000000
  27.                         MB        2.8201390812269            0.0000000000000
  28.                          X        2.6079489165186            0.0000000000000
  29.                          Y        1.0732133461211            0.0000000000000
  30.                         MC        1.7577238421647          -0.57155544394449E-04
  31.                         ME       0.71686008971999          -0.87320651063205E-05

  32.                        Row           Slack or Surplus             Dual Price
  33.                          1        0.0000000000000            0.0000000000000
  34.                          2        0.0000000000000            0.0000000000000
  35.                          3        0.0000000000000           0.92471568638404
  36.                          4        0.0000000000000           0.38051005460772
  37.                          5        0.0000000000000          -0.79207705459366
  38.                          6        0.0000000000000           0.61053538883563
  39.                          7        0.0000000000000            0.0000000000000
  40.                          8        0.0000000000000            0.0000000000000
  41.                          9      -0.10658141036402E-13       0.22360941607654
  42.                         10      -0.26645352591004E-14      -0.17729622036317
  43.                         11      -0.12612133559742E-12      -0.28447504993525
  44.                         12      -0.12323475573339E-13      -0.69749226272013
  45.                         13        5.2947230131116           -1.0000000000000

复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 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°的圆。
1.jpg
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-6-2 14:52:40 | 显示全部楼层
lsr314 发表于 2020-6-2 14:23
这道题和https://bbs.emath.ac.cn/thread-17297-1-1.html完全一样,就是求一点使之到两点和一圆的圆心距离 ...

能看出来mathematica为什么bug吗?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 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
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-6-2 19:16:17 | 显示全部楼层
本帖最后由 chyanog 于 2020-6-2 19:46 编辑

稍作修改即可解决问题。
  1. 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]
复制代码

不管是解方程组或求最值,没有必要最好不要用太多的变量,不然算起来可能比较慢
  1. 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]
复制代码

这样得到的精度更高
  1. B1={0,0};
  2. C1={4,0};
  3. E1={3+√5Cos[θ],4+√5Sin[θ]};
  4. NMinimize[Sum[Sqrt[#.#]&[{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 08:54
你是个人才,我还以为mathematica搞不定这个问题,真不知道为什么会出这个bug,难道仅仅因为变量多了?  发表于 2020-6-3 08:32
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 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!找了道好题。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-6-3 08:36:16 | 显示全部楼层
chyanog 发表于 2020-6-2 19:16
稍作修改即可解决问题。

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

个人认为是mathematica博而不专导致的,
lingo专门搞最优化这一方面,所以可能算法经受的考验比较多一些。
经历的变量考验比较多一些,但是mathematica博而不专,
经历的优化的考验少一些,经历的大的优化考验比较少。
可能mathematica做做数学题还行,真的做专门的实际工程应用,
估计还是lingo更可靠!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 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

最小值对应图形

最小值对应图形
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-20 14:25 , Processed in 0.916121 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表