matlab fsolve()函数的使用。 | 您所在的位置:网站首页 › matlab中myfun函数怎么用 › matlab fsolve()函数的使用。 |
前言:哎,没想到我最高访问量居然是这篇博文,想了一下重新布局了,因为以前版本的CSDN版本更新,现在的版本阅读性更强了。(更新2019.5) fsolve()函数通常用于数值求方程或方程组的解,更常用于求解非线性方程组。其基本结构如下:(可以在matlab命令页面输入help fsolve查询) fsolve()解决的方程形式为F(X)=0;用法为: X = fsolve(FUN,X0,OPTIONS)或者写为 [x,fval,exitflag]=fsolve(fun,x0,options)其中fun是方程,x0是初值,需要提前设定,options是一些设定要求,可以用optimset函数来实现;exitflag用以描述出口条件(exit condition)其值如下: 1 fsolve converged to a root. 2 Change in X too small. 3 Change in residual norm too small. 4 Computed search direction too small. 0 Too many function evaluations or iterations. -1 Stopped by output/plot function. -2 Converged to a point that is not a root. -3 Trust region radius too small (Trust-region-dogleg).从上面看,当exitflag是1的时候是最理想的结果,2,3也可接受,负数则偏差太大或直接错误 举例如下: 1.求解sin(x)-0.5=0 1)直接求解,代码如下: x=fsolve(@(x)sin(x)-0.5,[1 3])%此处采用匿名函数法@(x)其中1和3分别是设定的两个初值,一般设定在解附近,若不知道 解,也可随意设置,如果解不知最优,会有一定影响.options不填则默认。其中@(x)sin(x)-0.5也可以写为’sin(x)-0.5’ 结果如下: x = 0.5236 2.6180 %可见结果尽量给出初值上最近的值,前后俩个分别对应初值1和32)建立m函数(对于函数比较长或者比较复杂的情况) a)建立m文件 function f=myfun(x) f=sin(x)-0.5 end %end可以不写保存为以myfun.m为名的m函数 b)调用函数 x=fsolve(@myfun,[1 3])结果为: x = 0.5236 2.6180如果用以下代码: [x,fval,exitflag]=fsolve(@myfun,[1 3 8 9])%设定了四个初值,其中@myfun也可以用'myfun'则会给出偏差值fval,以及exitflag的值,结果如下: x = 0.5236 2.6180 8.9012 8.9012 fval = 1.0e-09 * -0.1387 -0.0000 -0.0000 -0.0000 exitflag = 1 >> x=fsolve(@(x)sin(x)-0.5,[1 3])其中fval为真实值与拟合值之间的差,从结果来看是非常理想的。 2.匿名函数可有多个参量,如求解方程: 1)建立m文件 function F = myfun(x,c) F = [ 2*x(1) - x(2) - exp(c*x(1))-x(1) + 2*x(2) - exp(c*x(2))];2)设置参数并执行 c = -1; % define parameter first x = fsolve(@(x) myfun(x,c),[-5;-5]) %x1和x2的初值都定为-5结果如下 x = 0.5671 0.5671 fval = -1.0640e-08 exitflag = 1分析如下:x1=0.5671,x2=0.5671,差值在-8个数量级,结果理想。 求解方程: function F = myfun(x,c) F = [ 16*x(1)+c*x(2)]; c = -1; % define parameter first [x,fval,exitflag] = fsolve(@(x) myfun(x,c),[-5;-5])结果如下: x = -0.3307 -5.2918 fval = -4.4409e-15 exitflag = 1 |
CopyRight 2018-2019 实验室设备网 版权所有 |