- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 
                        查看更多
                        
                    
                 练习8  多项式的表达和一元方程求根
知识背景
多项式是我们在初中就接触到的数学概念,频繁出现在很多的计算里,我们所学过的很多公式、定理都是以多项式形式表述的。在MATLAB中,属于多项式的天地也很广阔,比如求根、分解、求导数以及多项式的拟合,这些功能在MATLAB中都能得到很好的实现。
解一元方程是平时学习和工程应用中最常遇到的问题。一元一次方程是非常容易解出来的,一元二次方程可以用求根公式来解,但是如果碰到三次和三次以上的一元方程就非常麻烦了,一般没有解析根,只能近似求解。我们可以采用高级语言编程,用插值法或者逼近法求解。MATLAB提供了非常简单的方法,只需要用一个fzero函数,就可以方便地求出复杂的高次方程根。
主要内容
【本练习考查知识点】
本练习先向读者介绍多项式的一般表达方式,包括多项式系数、矩阵的特征多项式等。然后介绍数定义的方法,以及如何利用fzero函数对一元方程求根。需要掌握fzero函数的调用格式,另外还介绍了求一元函数极值的函数命令fmin.
练习过程
(1)首先我们来学习多项式的表达。
多项式在MATLAB中是由由行向量来表达的,向量中的元素是多项式系数的降幂排列。其中最后一个元素代表多项式中的0幂项,这一项千万不可省略,否则MATLAB将无法识别这一项。
比如我们想要输入一个四次多项式,在MATLAB中如何实现呢?其实很简单,只需要在工作区中输入系数矩阵就可以了。请看下面的例子。
想要输入f(x)=1.35+0.668x+0.436x2+0.69552x3,只需要在命令区中输入:
p=[0.69552,0.436,0.668,1.35]
这样就建立了f(x)=1.35+0.668x+0.436x2+0.69552x3这个多项式。
现在我们来求这个多项式的根。在命令区中输入:
p=[0.69552,0.436,0.668,1.35]
x=roots(p)
回车后,将得到如图8-1所示的结果。
上面的求根方法是先把多项式转化为伴随矩阵,然后再求特征值,可靠性和精度都高于经典方法。因为采用矩阵算法,所以MATLAB中的多项式和它的根都是向量。如图8-1所示,多项式为行向量,根为列向量。
那么,如果把问题反过来,知道了多项式的根,能否求出多项式的系数行向量呢?我们接着上面的例子,在工作区中输入:
p=[0.69552,0.436,0.668,1.35]
x=roots(p)
pp=poly(x)
回车后,将得到一个多项式和系数行向量,但这个行向量和p的形式并不一致,于是我们将得到的结果乘以原多项式最高次项的系数,形式就变得完全一样了。请注意,MATLAB中,由根构造多项式时,结果中行向量的第一项系数为1。
图8-1  多项式求根
图8-2  由根构造多项式
	(2)我们再来看一下对于多项式,如果不用roots命令如何求根。首先我们来学习函数的定义。MATLAB为数学函数表示是在M文件中进行的(有关M文件的内容后面还要详细介绍)。打开菜单”File””New””M-file”,新建了一个编辑窗口,如图8-3所示:
	要想输入以下的函数数表达式:
f(x)=1.35+0.668x+0.758x2-0.322x2(1-2.16x)
我们在编辑窗口中输入:
function y=demax(x);%定义函数demax(x)
y=1.35+0.668.*x+0.758.*x.^2-0.322*(1-2.16.*).*x.^2;
然后单击“保存”按钮,弹出保存对话框,将路径设置为默认目录,此处是C:\MATLABr11\work,将文件命名为demax.m,如图8-4所示保存文件。
图8-3  编辑窗口
图8-4  保存文件
(3)使用函数fzero可以找出函数值为零的点,寻找零点时可以指定一个开始点,或者指定一个区间。如果指定一个开始点,此函数首先在开始点附近寻找一个使函数值变号的区间。我们知道函数值在某个区间上变号,则可以用一个包含两个元素的矢量指定区间作为fzero的输入参数。现在回到MATLAB的命令窗口,在命令窗口中输入:
a=fzero(‘demax’,[-10,10])
得到输出结果如果8-5所示。
图8-5  输出结果
求出的一元方程的根是-1.1902。
从上面的解法我们看出,使用M文件和求0值的方法显得数学性更强一点,但与直接使用“roots”命令相比,又显得麻烦。关于M文件,我们在后面的练习中还要详细叙述。
本练习只是让读者对M文件有一个感性认识,事实上,在后面的练习中,读者就会发现M文件在复杂计算中是非常有用的。
(4)MATLAB还可以用函数fmin求得指定区间上的局部最小值(以前版本是fminbnd),例如求函数:f(x)= x2-2x-1+1/(x-0.8) 2
    在开区间(-
                
原创力文档
                        

文档评论(0)