⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 powell.m

📁 最优化方法中的非线性规划的powell方法的matlab实现
💻 M
字号:
%powell方法 非线性规划
clc;
clear;
e=1e-5;n=2;                  
d=[1 0;0 1];
x(1,:)=[0 0];m=0;k=1;ap=0;
f(1)=powellfun(x(1,:));
r=f(1);
for p=1:n
    for q=1:n
for i=-5:0.001:5
    x((k+1),:)=x(k,:)+i*d(k,:);
    b=powellfun(x((k+1),:));
    if b<r
        f(k+1)=b;
        r=b;
        a(k)=i;
    end
end
x((k+1),:)=x(k,:)+a(k)*d(k,:);
if k==n
    if abs(x(k+1,:)-x(1,:))<=e
            lastx=x(k+1,:);
            lastf=powellfun(lastx);
            hold
    else
          for i=1:k
              b(i)=f(i)-f(i+1);
          end
          MIN=b(1);
          MAX=b(1);
          for i=2:k
              if MIN>b(i)
                  MIN=b(i);
              end
              if MAX<b(i)
                  MAX=b(i);
              end
          end
          for i=1:k
              if MAX==b(i)
                  m=i-1;
              end
          end
          fl=powellfun((2*x(k+1,:)-x(1,:)));
          if (fl>=f(1))
              f(1)=f(k+1);
              x(1,:)=x(k,:);
              k=1;
          else
              for i=1:m
                  d(i,:)=d(i,:);
              end
              for i=(m+1):n-1
                  d(i,:)=d((i+1),:);
              end
              d(k,:)=(x(k+1,:)-x(1,:));
              fp=f(k+1);
              for i=-5:0.001:5
                  xp=x(k+1,:)+i*d(k,:);
                  s=powellfun(xp);
                  if s<fp
                      fp=s;
                      s=fp;
                      ap=i;
                  end
              end
                  x(1,:)=x(k+1,:)+ap*d(k,:);
                  f(1)=powellfun(x(1,:));
                  k=1;
            end           
        end
    else
   k=k+1;
end
end
end
lastx=x(1,:)
lastf=f(1)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -