1 求一元函数fun在区间[a,b]中的无条件极小值f和极小值点x
[x,f]=fminbnd(fun,a,b)d
其中目标函数fun可以是 @m函数名, 也可以是用内联(inline)函数定义的函数,也可以是匿名函数格式是 @(x) 函数表达式
2 求多元目标函数fun在点x0(向量)附近的无条件极小值f和极小值点x(向量)
[x,f]=fminsearch(fun,x0)
例:
fun=inline(‘x(1)^4+x(2)^4-4*x(1)*x(2)-5’);
[x,f]=fminsearch(fun,[0,0])
得到 x=[1,1], f = -7
3 求多元目标函数fun 在x0附近有条件(线性和非线性的都可以)极值
A*x<=b;
Aeq*x=beq;
lb<=x<=ub;
及非线性条件c(x)<=0, ceq(x)=0约束下的极小值f和极小值点x
用法是
[x,f]= fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
输入的第二项以后没有的项可以不写,或写[],输出中第二项以后的项可以不写。
其中nonlcon是非线性条件函数,可以如下编写(函数名自定)
function [c,ceq] = nonlcon(x)
c = ... % 条件c(x)<= 0. 中的c(x)的表达式
ceq = ... %条件ceq(x)=0. 中的ceq(x)的表达式.
options是改变默认的设置的选项。
4 MATLAB专用的线性规划函数:
bintprog() 0-1线性规划
Linprog() 线性规划
quadprog() 求二次规划
fminmax() 求极大中的极小,即最大最小值
fsolve() 求根函数,求给定函数的零点
有时可以通过求 导函数的根来求得极值点,这就是为什么求根函数可以用来解最优化的原因。
lsqcurvefit() 非线性最小二乘曲线拟合函数
例:
假如现在有两组数据,xdata和ydata
xdata = [3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4];
ydata = [16.5 150.6 263.1 24.7 208.5 9.9 2.7 163.9 325.0 54.3];
根据实际的分析可能知道他们大概有下面的关系:
Ydata=a*xdata^2+b*sin(xdata)+c*xdata^3;(此处只是范例,实际上可以是任意方程)
我们可以用来sqcurvefit来就拟合的系数:
首先编写m文件来实现方程:
function F = myfun(x,xdata)
F = x(1)*xdata.^2 + x(2)*sin(xdata) + x(3)*xdata.^3;
然后再进行调用求解:
% Assume you determined xdata and ydata experimentally
xdata = [3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4];
ydata = [16.5 150.6 263.1 24.7 208.5 9.9 2.7 163.9 325.0 54.3];
x0 = [10, 10, 10] % 初始值
[x,resnorm] = lsqcurvefit(@myfun,x0,xdata,ydata)
返回值中x是一个向量 为拟合的系数
Resnorm是拟合的误差。
评论