资源简介
MATLAB程序,梯度投影法解决有约束的优化问题,一维搜索
代码片段和文件信息
function [xminf]=minRosen(fAbx0vareps)
%目标函数: f;
%约束矩阵: A;
%约束右端向量: b;
%初始可行点: x0;
%自变量向量: var;
%精度: eps;
%目标函数取最小值时的自变量值: x;
%目标函数的最小值: minf;
%定义输出参数的格式为long
format long;
%当输入参数为3个时,精度要求
if nargin == 3;
eps=1.0e-6;
end
syms lm; %这个变量的作用求λ
x0=transpose(x0);%对x0进行装置,列向量//x0‘
n=length(var); %n=3
[row]=size(A); %[53]
%m是取这个系数矩阵的行数
m=row; %m=5
gf=jacobian(fvar);%[ 2*x1 + x2 + 4 x1 + 4*x2 + 2*x3 + 6 2*x2 + 4*x3 + 12]
bConti=1 ;
%梯度投影的步骤
while bConti %有符号变量来觉得循环的进程
%定义等式和不等式约束,起作用约束指标集
k=0;
s=0;
% A1=A;
% A2=A;
% b1=b;
% b2=b;
for i=1:m
dfun=A(i:)*x0-b(i);
%等式约束
if abs(dfun)<0.000000001
k=k+1;
A1(k:)=A(k:);
b1(k1)=b(i);
%不等式约束
else
s=s+1;
A2(s:)=A(i:);
b2(s1)=b(i);
end
end
% if k>0
% A1=A1(1:k:);
% b1=b1(1:k:);
% end
% if s>0
% A2=A2(1:s:);
% b2=b2(1:s:);
% end
while 1 %这一层循环怎么退出
P=eye(nn);
if k>0 %判断M矩阵是否为空
%这里M矩阵构造有点区别
tM=transpose(A1);
P=P-tM*inv(A1*tM)*A1;
end
%Funval是怎么定义的,意义何在
gv=Funval(gfvarx0);
gv=transpose(gv);
%计算负梯度
d=-P*gv;
if d==0
评论
共有 条评论