多元非线性规划Matlab,非线性规划MATLAB代码

本文介绍了三个非线性规划算法的MATLAB实现,包括数值梯度法、简单线搜索和BFGS算法,并提供了详细代码示例,旨在帮助学生理解并实践这些复杂的算法。
摘要由CSDN通过智能技术生成

下面是三个非线性规划领域的算法。课堂上给予了详细的讲解,在实践环节让学生编程实现,从而可以实验复杂一些的例子,加深对算法的理解。下面共有四个程序grad,simplelinesearch,bfgs和phr,全部使用MATLAB语言编写。这些代码远未完善,可修改余地很大,仅供教学之用。0818b9ca8b590ca3270a3433284dd417.png

function gradf=grad(hfun,x)

%GRAD  数值法求函数在给定点处的导数值(一元函数)或梯度(多元函数)

%   gradf = grad(hfun,x0)  hfun是函数句柄或内联函数,x0是一定点或一批点(按列);返回

%   值gradf是函数在该点处的导数或梯度。

%   要求函数能对成批的点求函数值。比如:feval(hfun,X)返回一个与X同列的行向量,对应于以

%   X每一列作为函数自变量而求得的函数值。

%

%   Reference: 《最优化计算原理与算法程序设计》, 粟塔山等编著, 国防科技大学出版社

%  (湖南), 2001.

%

%   $Author: WBC $    $Date: 2003/10/25 $

n = length(x);

h=1e-3;     % 数值法求梯度的步长

w1=zeros(n,1);%h/2

w2=w1; %-h/2

w3=w1; %h

w4=w1; %-h

for i=1:n

x(i)=x(i)+h/2;

w1(i)=hfun(x);

x(i)=x(i)-h;

w2(i)=hfun(x);

x(i)=x(i)-h/2;

w4(i)=hfun(x);

x(i)=x(i)+2*h;

w3(i)=hfun(x);

x(i)=x(i)-h;

end

gradf=(8*(w1-w2)-(w3-w4))/(6*h);

function [fv,x,lambda,exitflag]=simplelinesearch(hf,rho,l,u,lambda0,fv0,x0,g,d)

%LINESEARCH 简单线搜索

%输入参数:

%        hf -- 函数句柄,目标函数

%       rho -- 实标量,简单线搜索的参数,介于0到0.5之间的数

%         l -- 实标量,简单线搜索的参数,介于0到1之间的数

%         u -- 实标量,简单线搜索的参数,介于0到1之间的数,满足u>l

%    alpha0 -- 实标量,步长的初始值

%       fv0 -- 实标量,一维搜索的初始目标函数值,即 hf(x0+alpha_0*d)

%  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值