• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-20
  • 语言: Matlab
  • 标签: 梯度投影  

资源简介

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
         

评论

共有 条评论

相关资源