matlab非线性方程求解与函数极值计算

本文主要分两部分,第一部分介绍matlab中非线性方程求解,第二部分将介绍如何用matlab去求解函数的极值。
一、非线性方程数值求解
1、单变量非线性方程求解
函数的调用格式为:
x= fzero(filename,x0)
其中,filename是待求根方程左端的函数表达式,x0是初始值。
对于此函数,需要注意的是,迭代值初始值x0的选取,在使用该函数进行问题求解时,需要对问题进行多角度分析,大概确定出方程待求根所在范围,由于是单变量非线性方程,根所在范围还是易于确定,而不能机械地直接套用命令或程序。
例、求解方程x-1/x+5=0的根。

>> f=@(x)x-1./x+5;
>> x1= fzero (f,-5)
x1 =
   -5.1926
>> x2= fzero(f,1)
x2 =
    0.1926
>> x3= fzero(f,0.1)
x3 =
   3.7372e-16

本例所举的方程较为简单,但要说明一个问题,方程的前两个根都是经过分析,大致判断出方程会在-5和1两处有根,所以迭代初始值选了-5和1,对于x3,是随便取的一个迭代初始值,结果显然错误,因此该函数在使用时要注意先去判断根大概的范围,再进行编写代码,才能得出正确的结果。
因此,在使用此函数求解方程的根时,若方程的根难以判断所在范围,不妨将方程左边写成函数形式,绘制出函数一定范围内的图像,找到根的大致区域后再去使用此函数,求解出方程的根。
2、非线性方程组的求解
在 MATLAB 的最优化工具箱中提供了非线性方程组的求解函数fsolve,其调用格式如下:
x= fsolve(filename,x0,option)
其中,x为返回的近似解,filename是待求根方程左端的函数表达式,x0是初值,option用于设置优化工具箱的优化参数,可以调用 optimset函数来完成。例如,Display参数设置为 ‘off’ 时不显示中间结果。
如果用fsolve函数去求解上一个例子的问题,会有什么不同,一起来看一下吧

>> x1=fsolve(f,-5,optimset('Display','off '))
x1 =
   -5.1926
>> x2=fsolve(f,1,optimset('Display','off '))
x2 =
    0.1926
>> x3=fsolve(f,0.1,optimset('Display','off '))
x3 =
    0.1926

前两种结果x1和x2和fzero函数求解出的结果没有区别,但x3的结果确是正确结果,因为不同函数的实现方法不同,适用的场合也不同。总之,多角度选择和分析是很有必要的。
二、函数极值的计算
函数极值包括极大值和极小值,或者叫最大值和最小值。 MATLAB 只考虑最小值问题的计算,如果要求 f(x) 的最大值,可以通过求- - f(x) 的最小值来解决。
1、无约束最优化问题
字面理解就是没有其它的限制条件,只是求出给定区间上函数的最值即可。
求最小值的函数为:
[ xmin,fmin ]= fminbnd(filename,x1,x2,option)
[ xmin,fmin ]= fminsearch(filename,x0,option)
[ [ xmin,fmin ]= fminunc(filename,x0,option)
其中,xmin 表示极小值点,fmin 表示最小值,filename 是定义的目标函数。第一个函数的输入变量 xl 、x2分别表示被研究区间的左、右边界。后两个函数的输入变量x0是一个向量,表示极值点的初值。 option为优化参数,可以通过optimset函数来设置(参见第一部分)。
关于 option优化参数,可以参考这篇文章(https://blog.csdn.net/listener51/article/details/25164847)
例、求函数f(x)=x-1/x+5,在区间(-10 ,-1) 和 (1 ,10) 上的最小值点。

>> f=@(x)x-1./x+5;
>> [xmin,fmin]= fminbnd (f,-10,-1)
xmin =
   -9.9999
fmin =
   -4.8999

2、有约束最优化问题
即求取一组x,使得目标函数 f(x)为最小,且满足约束条件G(x)≤0 。
约束条件可以进一步细化为:线性不等式约束、线性等式约束、非线性不等式约束、非线性等式约束以及x的下界和上界。
求有约束条件下最小值的函数为:
[ xmin,fmin ]= fmincon (filename,x0,A,b,Aeq,beq,Lbnd,Ubnd,NonF,option)
其中,xmin 、fmin 、filename 、x0 和 option 的含义与求最小值函数相同。其余参数为约束条件:
参数值的线性不等式约束A,b
参数值的等式线性约束Aeq,beq,
参数值的上界和下界Lbnd,Ubnd
非线性约束NonF
例、求函数f(x)=0.4x2+x1(2)+x2(2)-x1x2+1/30x1(3)在限制条件x1+0.5x2>=0.4;0.5x1+x2>=0.5;x1>=0;x2>=0下的最小值。

>> f=@(x)0.4*x(2)+x(1)^2+x(2)^2-x(1)*x(2)+1/30*x(1)^3;
x0=[0.5;0.5];
A=[-1,-0.5;-0.5,-1];
b=[-0.4;-0.5];
lb=[0,0];
option=optimset('Display','off');
>> [xmin,fmin ]= fmincon (f,x0,A,b,[],[], lb ,[],[],option)
xmin =
    0.3396
    0.3302
fmin =
    0.2456

本节就先讲到这里,下节将推出常微分方程数值求解,敬请期待!

关于MATLAB的学习:

大家可以关注我们的知乎专栏——数据可视化和数据分析中matlab的使用:
https://zhuanlan.zhihu.com/c_1131568134137692160

欢迎大家加入我们的MATLAB学习交流群:
953314432
扫码关注我们
发现更多精彩
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值