fsolve传递未知参量解方程_第1页
fsolve传递未知参量解方程_第2页
fsolve传递未知参量解方程_第3页
fsolve传递未知参量解方程_第4页
fsolve传递未知参量解方程_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

fsolve函数解方程[X,FVAL,EXITFLAG,OUTPUT,JACOB]=FSOLVE(FUN,XO,..JreturnstheJacobianofFUNatX.ExamplesFUNcanbespecifiedusing@:x=fsolve(@myfun,[234],optimset('Display','iter'))wheremyfunisaMATLABfunctionsuchas:functionF=myfun(x)F=sin(x);FUNcanalsobeananonymousfunction:x=fsolve(@(x)sin(3*x),[14],optimset('Display','off))IfFUNisparameterized,youcanuseanonymousfunctionstocapturetheproblem-dependentparameters.Supposeyouwanttosolvethesystemofnonlinearequationsgiveninthefunctionmyfun,whichisparameterizedbyitssecondargumentc.HeremyfunisanM-filefunctionsuchasfunctionF=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:c=-1;%defineparameterfirstx=fsolve(@(x)myfun(x,c),[-5;-5])也可不写也可不写(记得好像必须写,试了试,发现不写也行 )。下面举几个例子:以matlabR2008a以matlabR2008a版本为例,各版本出错提示可能有所不同。有不对之处,欢迎指正。 |l.solve和fsolve 的基本含义matlab给出的关于solve和fsolve 的基本描述为:solveSymbolicsolutionofalgebraicequationsfsolveSolvesystemofnonlinearequations可见solve用于解决代数方程(组)的符号(解析)解,而fsolve用来解决非线性方程(组)的数值解。【在matlab里面solve命令主要是用来求解代数方程 (即多项式)的解,但是也不是说其它方程一个也不能解,不过求解非代数方程的能力相当有限,通常只能给出很特殊的实数解。从计算机的编程实现角度讲,如今的任何算法都无法准确的给出任意非代数方程的所有解,但是我们有很多成熟的算法来实现求解在某点附近的解。 matlab也不例外,它也只能给出任意非代数方程在某点附近的解,函数有两个: fzero和fsolve,具体用法请用help或doc命令查询吧。如果还是不行,你还可以将问题转化为非线性最优化问题, 求解非线性最优化问题的最优解,可以用的命令有:fminbnd,fminsearch,fmincon等等。】(引自:/s/blog_4c4af5c101008w9f.html ,作者:ggbondg)下面举几个例子:例1:>>solve('a*x-1')ans=5 1/a4例2:>>solve('exp(x)+sin(x)-2')、ans=.44867191635127271149118657202662注:对于solve结果的显示,有时看起来比较长,可用 vpa进行精度控制,如:>>vpa(solve('exp(x)+sin(x)-2'),3).449例3:>>fsolve(@(x)exp(x)+sin(x)-2,0)QOptimizationterminated: first-order optimalityisless thanoptions.TolFun.-ans=.1- 0.4487关于solve和fsolve 求解方程组时的书写规则对于solve,方程可以直接书写,不需要运算符” .”;口对于fsolve,当未知量与未知量有乘除操作或未知量有开方、幕等操作时运算符” .”可写||例4:>>solve('x+y.A2-1','x.A2-y-3')I???Errorusing==>solveat77I•:'x+y.A2-1'isnotavalidexpressionorequation.i4例5:>>solve('x+yA2-1','xA2-y-3')I::ans=:令 x:[4x1sym],1'■■■ y:[4x1sym].I-".例6:functionshiyanI;;clcclear二x0=[0,0];二fsolve(@mf,xO)23二:functionF=mf(x)二F=[x(1)+x(2)A2-1;x(1)A2-x(2)-3];二%%%%%Result%%%%%%总Optimizerappearstobeconvergingtoaminimumthatisnotaroot:I:Sumofsquaresofthefunctionvaluesis>sqrt(options.TolFun).j?Tryagainwithanewstartingpoint.Mans=卫1.6268-0.1537例7:把例6中的mf函数,换成如下再试试。functionF=mf(x)F=[x(1)+x(2).A2-1;x(1).A2-x(2)-3];例8:把例6的初值x0设为x0=[-2,2];运行结果为:Optimizationterminated:first-orderoptimalityislessthanoptions.TolFun.ans=-2.18751.7854可见,用fsolve可见,用fsolve解非线性方程组, 比较依赖处置的选择, 因此建议用fsolve解方程时,能大致了解问题的求解区间,以便选择合适的初值。关于solve和fsolve 求解时,参数为多数值的求解问题来源:http://www.chi/forum/viewthread.php?tid=82658&page=1#pid426339类似问题描述:k=(5.0e+4):(1e+3):(6e+4) ;h=1.6e-6;n1=2.2899;n0=1.5040;n2=1.000;解方程组:TOC\o"1-5"\h\zp1=sqrt(k.A2.*门1.人2七.人2 ;p2=sqrt(b.A2-k.A2.*n292) ;p0=sqrt(b.A2-k.A2.*n092) |p1*h-pi-atan(p0./p1)-atan(p2./p1)=0 。 ( 见:http://www.chi/forum/thread-83102-1-1.html )解决方法:这是非线性方程组,不过我们可以先用 solve试试:::;•:;例9:问题如前所述。考虑用 solve是否能解。込clear??clc.<■>k=(5.0e+4):(1e+3):(6e+4);37h=1.6e-6;丁n1=2.2899;gn0=1.5040;n2=1.000;J.lfori=1:length(k)工.y=solve(['p1=sqrt(',num2str(k(i)),'A2*',num2str(门1),'人2七人2)'],...屯 ['p2=sqrt(bA2-',num2str(k(i)),'A2*',num2str(门2)','人2)'],...农 ['p0=sqrt(bA2-',num2str(k(i)),'A2.*',num2str(门0),'人2)'],...45 ['p1*',num2str(h),'-',num2str(pi),'-atan(p0/p1)_atan(p2/p1)=0']);-爲end%%%%%Result%%%%%>Insolveat140Inshiyanat9y=solve(['p1=sqrt(',num2str(k(i)),'A2*',num2str(门1),'人2七人2)'],...['p2=sqrt(bA2-',num2str(k(i)),'A2*',num2str(门2)','人2)'],...['p0=sqrt(bA2-',num2str(k(i)),'A2.*',num2str(n0),'A2)'],...['p1*',num2str(h),'-',num2str(pi),'-atan(p0/p1)atan(p2/p1)=0']);Warning:Warning,solutionsmayhavebeenlostWarning:Explicitsolutioncouldnotbefound.>>whosyNameSizeBytesClassAttributesy0x0 64sym由此说明利用solve并不能解决这个复杂的非线性方程组,考虑数值解法。:例10:问题如例9,考虑fsolve求解问题。人%主程序clearClC-,|globalkhn1n2n0匸k仁(5.0e+4):(1e+3):(6e+4);Sh=1.6e-6;<n1=2.2899;、、n0=1.5040;-n2=1.000;、x0=[0100];.认b=zeros(1,length(kl));fori=1:length(k1)"i. k=k1(i);;.l y=fsolve(@myfun,x0);邈 b(i)=y(4);bendplot(k1,b);、%子程序2functionF=myfun(x)瓦globalkhn1n2n0■'<%p0plp2b——x(1)x(2)x(3)x(4)二F=[sqrt(kA2*n"2-x(4F2)-x(2);i. sqrt(x(4)A2-kA2*n2A2)-x(3);■/I sqrt(x(4)A2-kA2*n0A2)-x(1);H x(2)*h-pi-atan(x(1)./x(2))-atan(x(3)./x(2))];5%%%%%Result%%%%%%%%%我y=fsolve(@myfun,x0);:'Optimizerappearstobeconvergingtoaminimumthatisnotaroot:Sumofsquaresofthefunctionvaluesis>sqrt(options.TolFun).Tryagainwithanewstartingpoint.这说明所选初值并不合理。<例11例10还可以这样改写::.%主程序clear自clc%globalkhn1n2n0厂k1=(5.0e+4):(1e+3):(6e+4);“h=1.6e-6;守n1=2.2899;、n0=1.5040;亍,n2=1.000;箱x0=[0100];為.b=zeros(1,length(k1));;:-:fori=1:length(k1)91 k=k1(i);鱼 y=fsolve(@(x)myfun(x,k, h,n1, n2, n0),x0);小 b(i)=y(4);Uend:「plot(k1,b);匚%子程序T;functionF=myfun(x,k,h,n1,n2,n0)冷%globalkhn1n2n0“%p0p1p2b——x(1)x(2)x(3)x(4).11F=[sqrt(kA2*n1A2-x(4)A2)-x(2);」Hsqrt(x(4)A2-kA2*n2A2)-x(3);.1-■sqrt(x(4)A2-kA2*n0A2)-x(1);.1“x(2)*h_pi_atan(x(1)./x(2))_atan(x(3)./x(2))];例12参见http://www.chi/forum/viewthread.php?tid=82658&page=1#pid426339此贴,看看大侠ChaChing,dingd(1stOpt解法)等的解法。注:利用fsolve解数值解,初值的选择十分重要。而1stOpt则对初值的选择要求比较低,不妨一试。关于这一点,请参考如下文章:作者:dingd非线性方程组-1stOpt与fsolve的比较:http://www.chi/forum/thread-48384-1-5.htmlsolve,fsolve的用法2007-06-0323:40:42|分类:tech|标签:tech:技术类 |字号大中小订阅solve是方程,方程组的符号解法;fsolve是数值的优化方法;两种方法各有所长吧。第一种,幸运的话,可以得到解析解,就是那种符号解;但是复杂的方程,往往是得不到的。第二种的话,不出差错的话,总是可以得到一些可用的数值解;可不要忽略了第二种哦;举例如下,symsy;y=solveC(5-yA2)A0.5*(10-yA2)A0.5*besselj(1,(10-yA2)A0.5)*besselj(0,(5-yA2)A0.5)+yA2*besselj(0,(10-yA2)A0.5)*besselj(1,(5-yA2)A0.5)')是得不到隐式解的;第二种定义函数如下functionf=mytest(x)f=(5-xA2)A0.5*(10-xA2)A0.5*besselj(1,(10-xA2)A0.5)*besselj(0,(5-xA2)A0.5)+xA2*besselj(0,(10-xA2)A0.5)*besselj(1,(5-xA2)A0.5)使用x=fsolve(mytest,1+1i)或者x=fsolve(@mytest,1+1i)f=f=都是可以的;结果如下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论