![薛定宇教授大讲堂(卷Ⅳ):MATLAB最优化计算](https://wfqqreader-1252317822.image.myqcloud.com/cover/152/29977152/b_29977152.jpg)
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 试求解下面的欠定方程。
![](https://epubservercos.yuewen.com/2E5615/16499866905000206/epubprivate/OEBPS/Images/Figure-P51_29867.jpg?sign=1739022847-AFcBMF7EvxWIqS0anLH33ZNqM6kx2oy1-0-e3865fae4d13013c3a64feac3d9a7fca)
解 如果手工求解可以发现,原欠定方程可能分拆成两个独立方程,这样,方程的个数与未知数的个数一致,就可以调用more_sols()类函数直接求解方程。
手工转换的方法带有很多的人为性,因为并不是所有欠定方程都是可以手工拆分的。这里不作这种手工转换,试图直接求解欠定方程。
如果尝试用下面的语句绘制隐函数曲线,在调用过程中没有任何警告信息,但最终不能得到任何曲线,说明方程只可能存在有限个孤立解。
![](https://epubservercos.yuewen.com/2E5615/16499866905000206/epubprivate/OEBPS/Images/Figure-P51_29869.jpg?sign=1739022847-sSjPnfKy3ddG7Ig6W3KygJShySfp2esl-0-9ce7685d097c2c0836c298af7d857abe)
现在可以人为地选择Levenberg–Marquardt算法,再求解欠定方程,经过一段时间的运行,有可能找出该欠定方程所有的9个根。
![](https://epubservercos.yuewen.com/2E5615/16499866905000206/epubprivate/OEBPS/Images/Figure-P52_29871.jpg?sign=1739022847-OGiDLzApbgyF7fV2ue4dJTHNuv8bxPl7-0-e2c3ef6cc6329d281b1251f97b55c089)
得出的方程的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),其中,搜索第四个解比较耗时。