找回密码
 注册
Simdroid-非首页
查看: 123|回复: 5

方程求解中的bug,令人费解,求解释

[复制链接]
发表于 2011-1-11 06:58:40 | 显示全部楼层 |阅读模式 来自 山东淄博
原帖位置:http://www.matlabsky.com/forum-viewthread-tid-3789-extra-%26page%3D1-page-1.html

问题描述:求以下方程的全部解:
f(g)=-140.793343730037-4979547.88364553*g-66100264505.6573*g^2+389972903985224*g^3+862777500000000000*g^4-19782400000000000*g^5-4151633333333.33*g^6+9531285714285.71*g^7-237271071428.571*g^8+3126865079.36508*g^9-25326190.4761905*g^10+126654.545454545*g^11+126654.545454545*g^12+0.448194835664336*g^13;

这是个多项式方程,Forcal对方程形式没有要求,也不认识是不是多项式,但目前只能求得全部实数解。代码:
  1. f(g)=-140.793343730037-4979547.88364553*g-66100264505.6573*g^2+389972903985224*g^3+862777500000000000*g^4-19782400000000000*g^5-4151633333333.33*g^6+9531285714285.71*g^7-237271071428.571*g^8+3126865079.36508*g^9-25326190.4761905*g^10+126654.545454545*g^11+126654.545454545*g^12+0.448194835664336*g^13;
  2. fcopt::isolve[HFor("f")];
复制代码

结果(每行前一个数是解,后一个是误差):
-282587.1403741199        0.
-5.695893318432271e-004   8.315907065430656e-009
1.79956672877141e-004     -1.078234176138977e-010

matlab和maple可用多项式解法求得复数域内的全部解。

matlab代码:
  1. >>expr=sym('-140.793343730037-4979547.88364553*g-66100264505.6573*g^2+389972903985224*g^3+862777500000000000*g^4-19782400000000000*g^5-4151633333333.33*g^6+-9531285714285.71*g^7-237271071428.571*g^8+3126865079.36508*g^9-25326190.4761905*g^10+-126654.545454545*g^11+126654.545454545*g^12+0.448194835664336*g^13');
  2. >>p=sym2poly(expr);
  3. >>roots(p)
  4. ans =
  5.   1.0e+005 *
  6. -2.825891403741351                     
  7. -0.000425366260653 + 0.000158382367172i
  8. -0.000425366260653 - 0.000158382367172i
  9. -0.000087958432851 + 0.000371861708019i
  10. -0.000087958432851 - 0.000371861708019i
  11.   0.000165990822566 + 0.000401197797141i
  12.   0.000165990822566 - 0.000401197797141i
  13.   0.000288958204839                     
  14.   0.000415706942420                     
  15. -0.000000005695893                     
  16.   0.000000001799567                     
  17. -0.000000000311790 + 0.000000000248976i
  18. -0.000000000311790 - 0.000000000248976i
复制代码

maple结果:
  1.   0.0001799566729,
  2.   33.68591029 + 12.38430963 I,
  3.   18.66814213 + 32.72325227 I,
  4.       -10.53709954 + 43.27123834 I,
  5.         -0.00003117898620 + 0.00002489764282 I,
  6.         -42.31708262 + 9.374009122 I,
  7.     -0.0005695893318, -282587.1404,
  8.         -42.31708262 - 9.374009122 I,
  9.         -0.00003117898620 - 0.00002489764282 I,
  10.         -10.53709954 - 43.27123834 I,
  11.        18.66814213 - 32.72325227 I,
  12.         33.68591029 - 12.38430963 I
复制代码

验证了一下matlab和maple的实根,复根没有验证。
-2.825891403741351        误差大,不是正解,与Forcal和maple结果一致
  0.000288958204839       误差大,不是正解
  0.000415706942420       误差大,不是正解
-0.000000005695893        误差小,是正解,与Forcal和maple结果一致
  0.000000001799567       误差小,是正解,与Forcal和maple结果一致

令人费解的是,matlab、maple和Forcal用不同的算法都求得了一个错误的解:-2.825891403741351
我查看了代码,依然没有找到错误,求解释?
发表于 2011-1-11 09:56:03 | 显示全部楼层 来自 河北廊坊
Simdroid开发平台
是不是可以从帮助文件中
  1. Algorithm

  2. The algorithm simply involves computing the eigenvalues of the companion matrix:

  3. A = diag(ones(n-1,1),-1);
  4. A(1,:) = -c(2:n+1)./c(1);
  5. eig(A)

  6. It is possible to prove that the results produced are the exact eigenvalues of a matrix within roundoff error of the companion matrix A, but this does not mean that they are the exact roots of a polynomial with coefficients within roundoff error of those in c.
复制代码
去找找解释呢?
回复 不支持

使用道具 举报

 楼主| 发表于 2011-1-11 11:06:17 | 显示全部楼层 来自 山东淄博
谢谢qibbxxt !
这个帖子中也有一些解释,可参考一下:http://bbs.emath.ac.cn/thread-2853-1-1.html
回复 不支持

使用道具 举报

发表于 2011-1-11 12:35:53 | 显示全部楼层 来自 北京海淀
本帖最后由 bainhome 于 2011-1-11 12:52 编辑

所给链接说明为正解,但这种系数极度震荡的多项式一般十分少见,感觉如果不是专项搞数值分析算法研究的人,没必要深究,里面黑幕重重,实在是有害身心健康。
即使您是个不幸的人,无可避免遇到这种害虫式的方程,我想多数人会具体专业情况下做具体分析,比如给出近似方程,比如由所求内容具体专业给出系数所在范围用数值方法寻找部分合理的根,然后到此为止。
本题中最后四个根(含最后一组共轭根)感觉都还比较合适。
个人见解,未必准确。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-1-11 14:02:09 | 显示全部楼层 来自 吉林长春
在maple中用命令Student[Calculus1][Roots]试试

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-1-13 10:08:24 | 显示全部楼层 来自 重庆沙坪坝区
学习了 多谢多谢额

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-5 03:18 , Processed in 0.049212 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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