MATLAB的fsolve函数求解非线性方程(组)
fsolve()函数通常用于数值求方程或方程组的解,更常用于求解非线性方程组。fsolve是采用最小二乘法来求解非线性方程。
fsolve函数
fsolve()函数可以解决的方程形式为F(X)0。用法为:Xfsolve(FUN,X0,OPTIONS)〔x,fval,exitflag〕fsolve(fun,x0,options)其中fun是方程,x0是初值,需要提前设定,options是一些设定要求,可以用optimset函数来实现;exitflag用以描述出口条件(exitcondition)其值如下:1fsolveconvergedtoaroot。2ChangeinXtoosmall。3Changeinresidualnormtoosmall。4Computedsearchdirectiontoosmall。0Toomanyfunctionevaluationsoriterations。1Stoppedbyoutputplotfunction。2Convergedtoapointthatisnotaroot。3Trustregionradiustoosmall(Trustregiondogleg)。从上面看,当exitflag是1的时候是最理想的结果,2,3也可接受,负数则偏差太大或直接错误。
Fsolve求解简单的一维非线性方程
程序clc;clearall;closeall;xfsolve(myfun,〔0。524〕,optimset(Display,iter));求解在初值分别为0。5,2和4时方程的解functionFmyfun(x)Fsin(x);end
运行结果
Fsolve可以求解大型的非线性方程组
程序clc;clearall;closeall;x0〔51。6;rand;unifrnd(1,1);rand〕;hoptimset;h。MaxFunEvals20000;h。MaxIter5000;h。Displayoff;〔p,fval〕fsolve(f,x0,h)
此时,方程组可以写成矩阵形式。functionFf(x)方程组写成矩阵形式F〔x(1)x(2)(1exp((x(3)(0)x(4))))51。61;x(1)x(2)(1exp((x(3)(9。78)x(4))))51。91;x(1)x(2)(1exp((x(3)(30。68)x(4))))53。27;x(1)x(2)(1exp((x(3)(59。7)x(4))))59。68;〕;end
运行结果
程序clc;clearall;closeall;optionsoptimoptions(fsolve,Display,none,PlotFcn,optimplotfirstorderopt);funroot2d;x0〔0,0〕;xfsolve(fun,x0,options)
root2d。m程序functionFroot2d(x)F(1)exp(exp((x(1)x(2))))x(2)(1x(1)2);F(2)x(1)cos(x(2))x(2)sin(x(1))0。5;endfunctionFroot2d(x)F(1)exp(exp((x(1)x(2))))x(2)(1x(1)2);F(2)x(1)cos(x(2))x(2)sin(x(1))0。5;end
运行结果
本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。
作者郭志龙
编辑郭志龙
校对郭志龙