matlab fsolve()函数的使用

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和3

2)建立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

 
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值