2.6 欠定方程的求解
前面介绍方程时,一直在假设方程的个数与未知数的个数是一致的,这些方程都是正常的方程,本节将探讨异常的方程类型——欠定方程的概念与求解方法。
定义2-11 如果方程的个数等于未知数的个数,则方程称为适定方程(wellposed equation,又称恰定方程);如果方程的个数少于未知数的个数,则方程称为欠定方程(underdetermined equation);如果方程的个数大于未知数的个数,则方程称为超定方程(overdetermined equation)。
前面演示的隐式方程f(x,y)=0就是一个常见的欠定方程,如果由ezplot()或fimplicit()函数用图解法求解,则得出的曲线上所有的点都满足原欠定方程,这时,欠定方程有无穷多解。
在一些特殊的场合下,用隐函数绘制函数不能绘制出任何曲线,这时方程可能有个别孤立解。这种情况下也可以考虑采用fsolve()函数直接求解,不过在默认的设置下,fsolve()函数并不能求解方程与未知数个数不同的代数方程,需要将求解算法设置成levenberg-marquardt,即采用Levenberg–Marquardt算法求解欠定方程。如果采用more_sols()函数,也应该作相应的算法设置。本节将通过例子演示具有孤立解的欠定方程求解方法。
例2-45 试求解下面的欠定方程。
解 如果手工求解可以发现,原欠定方程可能分拆成两个独立方程,这样,方程的个数与未知数的个数一致,就可以调用more_sols()类函数直接求解方程。
手工转换的方法带有很多的人为性,因为并不是所有欠定方程都是可以手工拆分的。这里不作这种手工转换,试图直接求解欠定方程。
如果尝试用下面的语句绘制隐函数曲线,在调用过程中没有任何警告信息,但最终不能得到任何曲线,说明方程只可能存在有限个孤立解。
现在可以人为地选择Levenberg–Marquardt算法,再求解欠定方程,经过一段时间的运行,有可能找出该欠定方程所有的9个根。
得出的方程的9个解为(−2.8051,3.1313)、(3,2)、(0.0867,2.8843)、(3.3852,0.0739)、(3.5844,−1.8481)、(−3.7793,−3.2832)、(−0.1280,−1.9537)、(−3.0730,−0.0813)和(−0.2708,−0.9230),其中,搜索第四个解比较耗时。