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

问题描述:

关于数学软件的解方程原理
在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加引号的问题.
这两个软件内核应该是类似的,只是语言系统略有出入.
而且这里完全没有上下文,就是新开窗口直接输入以上两句命令.
我想问的不是方程本身的可解性,而是软件决定是否去解某个方程的判断依据.
另外,你说的牛顿法是否就是在函数上取某一点的切线,求交点,再由得到的点求新的切线,然后循环逼近的这种方法呢?
如果是的话,那么这种方法恐怕只适用于实数吧,包括二分法,恐怕也不能直接应用在复数域中.
那么,这些复数解究竟是怎么得到的呢?或者说,以上方法是如何推广至复数范围的?
请赐教,
1个回答 分类:综合 2014-11-09

问题解答:

我来补答
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的形式输出给你的.
 
 
展开全文阅读
剩余:2000
上一页:周五
下一页:责任的事实论据