2.2 非线性方程的图解法
如果方程含有一个或两个未知数,则可以通过图解法求解方程。如果未知数过多,则不适合使用图解法,而应该尝试其他方法。本节将介绍一元与二元方程的图解方法,并分析总结图解法的优势与劣势。
2.2.1 光滑隐函数曲线的绘制
MATLAB提供了一般双变量隐函数模型的绘制函数fimplicit(),正常情况下该函数的默认设置可以得出比较光滑的隐函数曲线,不过在一些特定的场合下,需要手工调节该函数的控制参数,以获得光滑的函数曲线。下面通过例子演示光滑隐函数曲线的绘制方法。
例2-8 试绘制隐函数y2cos(x+y2)+x2ex+y=0在(−2π,2π)求解的光滑曲线。
解 下面的函数可以直接绘制出该隐函数的曲线,如图2-1所示。可以看出,该函数可以直接绘制出隐函数曲线,不过曲线的某些地方比较粗糙,例如曲线左上角与右下角区域出现不光滑的毛刺现象。
图2-1 默认的隐函数曲线
隐函数曲线的光滑度受网格密度属性'Meshdensity'直接影响,其默认值为151,如果发现得出的曲线不光滑,不妨将该值设置为大一些的值,如500,这时得出的隐函数曲线如图2-2所示。可见,这样得出的曲线光滑度是令人满意的,即使作局部放大,曲线仍然是光滑的。
>> fimplicit(f,[-p,p],'Meshdensity',500)
图2-2 光滑的隐函数曲线
2.2.2 一元方程的图解法
定义2-5 一元方程的一般数学形式为
对于任意的单变量方程f(x)=0,可以考虑将方程用符号表达式描述,然后调用fplot()函数绘制出方程的曲线,这样,就可以用图解方法求出方程曲线与横轴的交点,这些交点就是方程的解。
例2-9 根式方程的解析求解是有诸多条件的,如果条件不满足则无法解析求解。试用图解方法求解下面的根式方程。
解 先用符号表达式表示方程的左端,则可以调用fplot()函数,并叠印上横轴,则可以得出如图2-3所示的曲线。从得出的结果看,方程与横轴只有一个交点,该交点就是方程的解。
图2-3 一元方程的曲线与求解
如果想得到方程的解,则需要单击图形坐标轴工具栏中的图标,对交点附近的区域作局部放大,用户可以反复地使用放大功能,直至x的标度都大致一样,这时,可以认为得到了方程的解。对这个具体的方程而言,通过局部放大得出方程的解为x=0.13809878,如图2-4所示,代入方程则可以得出误差为6.018×10−9。
图2-4 局部放大的结果与方程的解
例2-10 试求解下面的一元超越方程。
e−0.2xsin(3x+2)−cosx=0,x∈(0,20)
解 这个超越方程是没有解析解的,必须用数值解的方法求解。图解法是一种数值求解方法。前面的例子曾经使用符号表达式来描述原始方程,这里采用匿名函数来描述方程,这两种方法是等效的。由fplot()函数可以直接绘制出方程的曲线,并同时叠印出横轴,如图2-5所示。这样,方程曲线与横轴的交点都是方程的解。
图2-5 超越方程的图解法
可见,在给定的区间内,该方程曲线与实轴有6个交点,这些交点处的x都是方程的根。与前面的叙述一致,可以通过局部放大的方法逐一求出方程的根,不过求解过程还是很麻烦的。例如,可以求出方程的一个根为x=10.9601289577,代入方程可以得出误差为−3.4739×10−11。后面将探讨更好的方法。
2.2.3 二元方程的图解法
二元方程联立组的数学形式与定义在下面给出,本节将探讨利用图解的方式求解相应的二元联立方程组,并指出图解法存在的问题。
定义2-6 二元联立方程的一般形式为
从给出方程的数学形式看,f(x,y)=0可以看成关于自变量x和y的隐函数表达式,故使用fimplicit()函数即可以直接绘制该隐函数的曲线,而曲线上的所有点都满足该方程。同样,g(x,y)=0也是隐函数的数学表达式,由fimplicit()函数可以求解该方程。如果将这两个函数在同一坐标系下绘制出来,得出的曲线交点则为联立方程的解。
例2-11 试求解二元方程在−2π≤x,y≤2π区域内的解。
解 要想求解联立方程,可以声明符号变量x和y,然后将两个方程用符号表达式分别表示出来,再调用fimplicit()就可以绘制出两个方程的解曲线了,如图2-6所示。图中给出的每条曲线都满足一个方程,而联立方程的解为曲线的交点。可以看出,该方程在给定区域内有很多解。由得出的图形可见,隐函数曲线的光滑度不影响曲线交点的求解,所以可以按默认形式绘制曲线。
图2-6 联立方程图解法示意图
如果想得出某个具体交点的信息,则可以对该点作局部放大,大致地得出交点处的x与y值,不过可以预计,这样的解不会太精确,此外由于这个联立方程存在太多交点,所以一个一个局部放大去求解的方式显然不适用,应该考虑引入能一次性求出所有交点的全新方法。
例2-12 试用图解法求解下面的联立方程。
解 先用符号表达式表示这两个方程,然后将这两个隐函数绘制出来,得出的曲线如图2-7所示。可见,图中显示这两组曲线有两个交点。能因此得出结论,说原方程有两个根吗?
如果将第二个表达式稍加变换,则x=−4y3−3y2+2,代入第一个方程,有
16y6+24y5+9y4−16y3−11y2−1=0
图2-7 联立方程图解法示意图
可见,这是一个关于y的六次多项式方程,很可能该方程有六个根,而不是图2-7中所示的两个根。为什么图中只给出两个根呢?因为原方程有两个实根,其他四个根应该是两对共轭复数根。在图解法中只能表示出方程的实数根,而不能显示、求取复数根。
2.2.4 方程的孤立解
观察例2-11中给出的方程,不难发现,将x=0,y=0这个点代入两个方程,这两个方程都是满足的。如果从给出的曲线看,第一个方程的曲线似乎有意回避了这个点,而第二个方程也不经过这个点。这个点不是由曲线其他点演化而来的,这样的解称为孤立解(isolated solution)。
目前没有任何方法可以求取方程的孤立解,只能由用户的经验观察与判断某些点是不是方程的孤立解。例如,通过观察可见,x=0,y=0点是该方程的孤立解,代入原方程则可以验证其正确性。