资源描述:
《fsolve传递未知参量解方程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、fsolve函数解方程[X,FVAL,EXITFLAG,OUTPUT,JACOB]=FSOLVE(FUN,X0,...)returnstheJacobianofFUNatX.ExamplesFUNcanbespecifiedusing@:x=fsolve(@myfun,[234],optimset('Display','iter'))wheremyfunisaMATLABfunctionsuchas:functionF=myfun(x)F=sin(x);FUNcanalsobeananonymousfunction:x=fsolve(@(x)si
2、n(3*x),[14],optimset('Display','off'))IfFUNisparameterized,youcanuseanonymousfunctionstocapturetheproblem-dependentparameters.Supposeyouwanttosolvethesystemofnonlinearequationsgiveninthefunctionmyfun,whichisparameterizedbyitssecondargumentc.HeremyfunisanM-filefunctionsuchasfu
3、nctionF=myfun(x,c)F=[2*x(1)-x(2)-exp(c*x(1))-x(1)+2*x(2)-exp(c*x(2))];Tosolvethesystemofequationsforaspecificvalueofc,firstassignthevaluetoc.Thencreateaone-argumentanonymousfunctionthatcapturesthatvalueofcandcallsmyfunwithtwoarguments.Finally,passthisanonymousfunctiontoFSOLVE
4、:c=-1;%defineparameterfirstx=fsolve(@(x)myfun(x,c),[-5;-5])以matlabR2008a版本为例,各版本出错提示可能有所不同。有不对之处,欢迎指正。1.solve和fsolve的基本含义matlab给出的关于solve和fsolve的基本描述为:solve——Symbolicsolutionofalgebraicequationsfsolve——Solvesystemofnonlinearequations可见solve用于解决代数方程(组)的符号(解析)解,而fsolve用来解决非线性方程
5、(组)的数值解。【在matlab里面solve命令主要是用来求解代数方程(即多项式)的解,但是也不是说其它方程一个也不能解,不过求解非代数方程的能力相当有限,通常只能给出很特殊的实数解。从计算机的编程实现角度讲,如今的任何算法都无法准确的给出任意非代数方程的所有解,但是我们有很多成熟的算法来实现求解在某点附近的解。matlab也不例外,它也只能给出任意非代数方程在某点附近的解,函数有两个:fzero和fsolve,具体用法请用help或doc命令查询吧。如果还是不行,你还可以将问题转化为非线性最优化问题,求解非线性最优化问题的最优解,可以用的命令
6、有:fminbnd,fminsearch,fmincon等等。】(引自:http://blog.sina.com.cn/s/blog_4c4af5c101008w9f.html,作者:ggbondg)下面举几个例子:1例1:>>solve('a*x-1')2ans=31/a4例2:>>solve('exp(x)+sin(x)-2')5ans=6.44867191635127271149118657202662注:对于solve结果的显示,有时看起来比较长,可用vpa进行精度控制,如:>>vpa(solve('exp(x)+sin(x)-2'),3
7、)ans=.4497例3:>>fsolve(@(x)exp(x)+sin(x)-2,0)8Optimizationterminated:first-orderoptimalityislessthanoptions.TolFun.9ans=100.44872.关于solve和fsolve求解方程组时的书写规则对于solve,方程可以直接书写,不需要运算符”.”;对于fsolve,当未知量与未知量有乘除操作或未知量有开方、幂等操作时运算符”.”可写也可不写(记得好像必须写,试了试,发现不写也行)。下面举几个例子:1例4:>>solve('x+y.^2
8、-1','x.^2-y-3')2???Errorusing==>solveat773'x+y.^2-1'isnotavalidexpre