永发信息网

关于数学软件的解方程原理

答案:3  悬赏:20  手机版
解决时间 2021-01-27 07:22
  • 提问者网友:缘字诀
  • 2021-01-26 15:45
在MAPLE,MATLAB等数学软件中,用solve或者fsolve命令解多项式方程时,软件的工作原理是什么呢?
我想知道大致的过程。
比如是直接逐步逼近呢?还是先化简、分解因式等等。如果有化简的过程,那么是如何化简的呢?

举个例子,比如在MAPLE中,我尝试解一个4次多项式方程
solve(x^4+x^3+1=0);
软件输出的结果是
RootOf(_Z^4+_Z^3+1, index = 1), RootOf(_Z^4+_Z^3+1, index = 2), RootOf(_Z^4+_Z^3+1, index = 3), RootOf(_Z^4+_Z^3+1, index = 4)

而对于另一个4次多项式方程,
solve(x^4+x^3+x^2+x+1=0);
结果则是所有的4个解
-1/4+1/4*5^(1/2)+1/4*I*2^(1/2)*(5+5^(1/2))^(1/2), -1/4-1/4*5^(1/2)+1/4*I*2^(1/2)*(5-5^(1/2))^(1/2), -1/4-1/4*5^(1/2)-1/4*I*2^(1/2)*(5-5^(1/2))^(1/2), -1/4+1/4*5^(1/2)-1/4*I*2^(1/2)*(5+5^(1/2))^(1/2)

问题来了,同样是4次方程,为什么例2直接得到答案,而软件却不去解例1呢?
请问软件到底是如何判断一个方程的可解性,又是如何得到解的呢?
谢谢!

2楼的朋友,我这里的例子不是MATLAB,而是MAPLE里的,所以没有solve加引号的问题。
这两个软件内核应该是类似的,只是语言系统略有出入。
而且这里完全没有上下文,就是新开窗口直接输入以上两句命令。
我想问的不是方程本身的可解性,而是软件决定是否去解某个方程的判断依据。

另外,你说的牛顿法是否就是在函数上取某一点的切线,求交点,再由得到的点求新的切线,然后循环逼近的这种方法呢?
如果是的话,那么这种方法恐怕只适用于实数吧,包括二分法,恐怕也不能直接应用在复数域中。
那么,这些复数解究竟是怎么得到的呢?或者说,以上方法是如何推广至复数范围的?
请赐教,谢谢。
最佳答案
  • 五星知识达人网友:神鬼未生
  • 2021-01-26 16:10
x^4+x^3+x^2+x+1=0很容易知道x^5-1=0所以它的解是1的5次方根除1外,因此
令w=cos(2π/5)+isin(2π/5),则w,w^2,w^3,w^4都是这个方程的根,对于这么好解的东西计算机就帮你解出来了。
其实学过数值分析就知道,它是用二分法,牛顿法等来求根的(它的理论根据就是数学分析中的介质定理或者根据零点存在定理)
你这里的solve调用格式都不对怎么会有运行结果,这个是你其中一部分吧?
solve调用里面的引号你都丢了;
再者我觉得你在调用命令之前可能把x的类型定义成字符型或者是过程中生成字符型了,(这个计算机可以自己生成的,比如解solve('p*x=a')它会把p,a识别为字符计算出来的x就是字符型了,你自己检查一下前面有没有类似的东西)之后再涉及到这个字符的方程求解它会识别成符号计算了,所以出现了前面你说的例子。
你关闭matlab重新打开运行就不会再这样了,它会直接把结果给你表示出来。再有就是5次一下的方程都是有求根公式的,对于这种特例计算机会直接代公式表示出来给你,所以会有开方之类的符号,但更高次方程的时候它就会迭代出一个近似值输出给你了。
你说的如何判断有解方面,其实学完复变你会知道在复数域上N次方程它总是有N个根的,计算机算出来是实数就输出实数给你,复数就也会以含有i的形式输出给你的。
全部回答
  • 1楼网友:骨子里都是戏
  • 2021-01-26 17:58

x*(1+40%)*80%-x=15

x*1.4*0.8-x=15

x*1.12-x=15

0.12x=15

x=125

  • 2楼网友:零点过十分
  • 2021-01-26 17:31
其原理是采用逼近和拟合的办法! 一般的有插值、多项式、二分法等等! 建议你到网上找下相关的方法简介!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯