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

下载本文档

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

文档简介

1、 fsolve 函数解方程X,FV AL,EXITFLAG,OUTPUT,JACOB=FSOLVE(FUN,X0,.) returns theJacobian of FUN at X.ExamplesFUN can be specified using :x = fsolve(myfun,2 3 4,optimset(Display,iter)where myfun is a MA TLAB function such as:function F = myfun(x)F = sin(x);FUN can also be an anonymous function:x = fsolve(x) s

2、in(3*x),1 4,optimset(Display,off)If FUN is parameterized, you can use anonymous functions to capturetheproblem-dependent parameters. Suppose you want to solve the systemofnonlinear equations given in the function myfun, which isparameterizedby its second argument c. Here myfun is an M-file function

3、such asfunction F = myfun(x,c) F = 2*x(1) - x(2) - exp(c*x(1)-x(1) + 2*x(2) - exp(c*x(2);To solve the system of equations for a specific value of c, firstassign thevalue to c. Then create a one-argument anonymous function thatcapturesthat value of c and calls myfun with two arguments. Finally, passt

4、his anonymous function to FSOLVE:c = -1; % define parameter firstx = fsolve(x) myfun(x,c),-5;-5)以 matlab R2008a 版本为例,各版本出错提示可能有所不同。有不对之处,欢迎指正。1.solve 和 fsolve 的基本含义matlab 给出的关于 solve 和 fsolve 的基本描述为:solveSymbolic solution of algebraic equationsfsolveSolve system of nonlinear equations可见 solve 用于解决代数

5、方程(组)的符号(解析)解,而 fsolve 用来解决非线性方程(组)的数值解。 【在 matlab 里面 solve 命令主要是用来求解代数方程(即多项式)的解,但是也不是说其它方程一个也不能解,不过求解非代数方程的能力相当有限,通常只能给出很特殊的实数解。从计算机的编程实现角度讲,如今的任何算法都无法准确的给出任意非代数方程的所有解,但是我们有很多成熟的算法来实现求解在某点附近的解。matlab 也不例外,它也只能给出任意非代数方程在某点附近的解,函数有两个:fzero 和 fsolve,具体用法请用 help 或 doc 命令查询吧。如果还是不行,你还可以将问题转化为非线性最优化问题,求

6、解非线性最优化问题的最优解,可以用的命令有:fminbnd, fminsearch, fmincon 等等。】(引自: ,作者:ggbondg)下面举几个例子:1 例 1: solve(a*x-1)2ans =31/a4 例 2: solve(exp(x)+sin(x)-2)5ans =6.491注:对于 solve 结果的显示,有时看起来比较长,可用 vpa 进行精度控制,如: vpa(solve(exp(x)+sin(x)-2),3)ans =.4497 例 3: fsolve(x)exp(x)+sin(x)-2,0) 8Optimization terminated: first-ord

7、er optimality is less thanoptions.TolFun.9ans =10 0.44872.关于 solve 和 fsolve 求解方程组时的书写规则对于 solve,方程可以直接书写,不需要运算符”.”;对于 fsolve,当未知量与未知量有乘除操作或未知量有开方、幂等操作时运算符”.”可写也可不写(记得好像必须写,试了试,发现不写也行)。下面举几个例子:11 例 4: solve(x+y.2-1,x.2-y-3)12? Error using = solve at 7713 x+y.2-1 is not a valid expression or equation.

8、14 例 5: solve(x+y2-1,x2-y-3)15ans =16 x: 4x1 sym17 y: 4x1 sym18 例 6:function shiyan 19clc20clear21x0=0,0;22fsolve(mf,x0)2324function F=mf(x)25F=x(1)+x(2)2-1;26 x(1)2-x(2)-3;27%Result%28Optimizer appears to be converging to a minimum that is not aroot: 29Sum of squares of the function values is sqrt(

9、options.TolFun).30Try again with a new starting point.31ans =32 1.6268 -0.1537例 7:把例 6 中的 mf 函数,换成如下再试试。function F=mf(x)F=x(1)+x(2).2-1; x(1).2-x(2)-3;例 8:把例 6 的初值 x0 设为 x0=-2,2;运行结果为:Optimization terminated: first-order optimality is less thanoptions.TolFun. ans =-2.18751.7854可见,用 fsolve 解非线性方程组,比较

10、依赖处置的选择,因此建议用 fsolve 解方程时,能大致了解问题的求解区间,以便选择合适的初值。3.关于 solve 和 fsolve 求解时,参数为多数值的求解问题来源:#pid426339类似问题描述:k=(5.0e+4):(1e+3):(6e+4);h=1.6e-6;n1=2.2899;n0=1.5040;n2=1.000;解方程组:p1=sqrt(k.2.*n1.2-b.2;p2=sqrt(b.2-k.2.*n2.2);p0=sqrt(b.2-k.2.*n0.2); p1*h-pi-atan(p0./p1)-atan(p2./p1)=0。(见: )解决方法:这是非线性方程组,不过我们

11、可以先用 solve 试试:33 例 9:问题如前所述。考虑用 solve 是否能解。34clear35clc 36k=(5.0e+4):(1e+3):(6e+4);37h=1.6e-6;38n1=2.2899;39n0=1.5040;40n2=1.000;41for i=1:length(k)42y=solve(p1=sqrt(,num2str(k(i),2*,num2str(n1),2-b2),.43 p2=sqrt(b2-,num2str(k(i),2*,num2str(n2),2),.44 p0=sqrt(b2-,num2str(k(i),2.*,num2str(n0),2),.45

12、p1*,num2str(h),-,num2str(pi),-atan(p0/p1)-atan(p2/p1)=0);46end%Result% In solve at 140In shiyan at 9y=solve(p1=sqrt(,num2str(k(i),2*,num2str(n1),2-b2),.p2=sqrt(b2-,num2str(k(i),2*,num2str(n2),2),.p0=sqrt(b2-,num2str(k(i),2.*,num2str(n0),2),. p1*,num2str(h),-,num2str(pi),-atan(p0/p1)-atan(p2/p1)=0);W

13、arning: Warning, solutions may have been lostWarning: Explicit solution could not be found. whos yName Size Bytes Class Attributesy 0 x0 64 sym由此说明利用 solve 并不能解决这个复杂的非线性方程组,考虑数值解法。47 例 10:问题如例 9,考虑 fsolve 求解问题。48% 主程序49clear50clc51global k h n1 n2 n052k1=(5.0e+4):(1e+3):(6e+4);53h=1.6e-6;54n1=2.2899

14、;55n0=1.5040;56n2=1.000; 57x0=0 1 0 0;58b=zeros(1,length(k1);59for i=1:length(k1)60 k=k1(i);61 y=fsolve(myfun,x0);62 b(i)=y(4);63end64plot(k1,b);65% 子程序66function F=myfun(x)67global k h n1 n2 n068% p0 p1 p2 b-x(1) x(2) x(3) x(4)69F=sqrt(k2*n12-x(4)2)-x(2);70 sqrt(x(4)2-k2*n22)-x(3);71 sqrt(x(4)2-k2*

15、n02)-x(1);72 x(2)*h-pi-atan(x(1)./x(2)-atan(x(3)./x(2);73% Result% 74y=fsolve(myfun,x0);75Optimizer appears to be converging to a minimum that is not aroot: 76Sum of squares of the function values is sqrt(options.TolFun).77Try again with a new starting point.这说明所选初值并不合理。78例11 例 10 还可以这样改写:79% 主程序80c

16、lear81clc82% global k h n1 n2 n083k1=(5.0e+4):(1e+3):(6e+4);84h=1.6e-6;85n1=2.2899;86n0=1.5040;87n2=1.000;88x0=0 1 0 0;89b=zeros(1,length(k1); 90for i=1:length(k1)91 k=k1(i);92 y=fsolve(x)myfun(x,k, h, n1, n2, n0),x0);93 b(i)=y(4);94end95plot(k1,b);96% 子程序97function F=myfun(x,k, h, n1, n2, n0)98% gl

17、obal k h n1 n2 n099% p0 p1 p2 b-x(1) x(2) x(3) x(4)100F=sqrt(k2*n12-x(4)2)-x(2);101 sqrt(x(4)2-k2*n22)-x(3);102 sqrt(x(4)2-k2*n02)-x(1);103 x(2)*h-pi-atan(x(1)./x(2)-atan(x(3)./x(2);例12参见#pid426339 此贴,看看大侠 ChaChing,dingd(1stOpt 解法)等的解法。 注:利用 fsolve 解数值解,初值的选择十分重要。而 1stOpt 则对初值的选择要求比较低,不妨一试。关于这一点,请参考

18、如下文章:作者:dingd 非线性方程组-1stOpt 与 fsolve 的比较:solve,fsolve 的用法2007-06-03 23:40:42| 分类:tech | 标签:tech:技术类|字号大中小订阅solve 是方程,方程组的符号解法;fsolve 是数值的优化方法;两种方法各有所长吧。第一种,幸运的话,可以得到解析解,就是那种符号解;但是复杂的方程,往往是得不到的。第二种的话,不出差错的话,总是可以得到一些可用的数值解;可不要忽略了第二种哦;举例如下,syms y;y=solve(5-y2)0.5*(10-y2)0.5*besselj(1,(10-y2)0.5)*bessel

19、j(0,(5-y2)0.5)+y2*bes selj(0,(10-y2)0.5)*besselj(1,(5-y2)0.5)是得不到隐式解的;第二种 定义函数如下function f=mytest(x)f=(5-x2)0.5*(10-x2)0.5*besselj(1,(10-x2)0.5)*besselj(0,(5-x2)0.5)+x2*besselj(0,( 10-x2)0.5)*besselj(1,(5-x2)0.5)使用x=fsolve(mytest,1+1i)或者x=fsolve(mytest,1+1i)都是可以的;结果如下f =-0.0136 + 0.1593i f =-0.0136 + 0.1593if =0.0235 + 0.0353if =0.0235 + 0.0353

温馨提示

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

评论

0/150

提交评论