%改进鲍威尔法
clc
clear all

syms x1 x2 a1 a2 a3 b1 b2 b3
f = x1*x1+2*x2*x2-4*x1-2*x1*x2;
X=[x1;x2];
X0=[1 1]';   %给定初始点
Theta_error=0.001;
e1=[1 0]';
e2=[0 1]';

FX0=subs(f,X,X0);

n=2;
k=0;
k1=0;
k2=0;
d1=e1;%初始搜搜方向
d2=e2;
i=1;

%求a1,a2,X1,X2
Da1=[];
Da2=[];
Da3=[];
DX0=[];
DX00=[];
DXX0=[];
DXXX0=[];
DX1=[];
DX11=[];
DX2=[];
DX22=[];
DX3=[];
DX33=[];
DF=[];

Xh1 = X0+a1.*d1;
FXh1 =  subs(f,X,Xh1);
dFXh1 = gradient(FXh1,a1);
a1 = solve(dFXh1);
f = x1*x1+2*x2*x2-4*x1-2*x1*x2;

X1 = X0+a1*e1;
FX1 = subs(f,X,X1);

Xh0 = X1+a2.*d2;
FXh2 = subs(f,X,Xh0);
dFXh0 = gradient(FXh2,a2);
a2 = solve(dFXh0);
X2 = X1+a2*e2;
FX2 = subs(f,X,X2);

deta1 = FX0-FX1;
deta2 = FX1-FX2;
m = [deta1,deta2];
M=sort(m);   %将deta从小到大排序,然后最后一位就是最大值
deta_Max=M(2);

%k=1
d3=X2-X0;
X3=2*X2-X0;
FX3 = subs(f,X,X3);

if FX3 < FX0 && (FX0-2*FX2+FX3)*(FX0-FX2-deta_Max)^2 < 0.5*deta_Max*(FX0-FX3)^2
    XX0=X2+a3.*d3;
    h0=X2+a3.*d3;
    Fh0 = subs(f,X,h0);
    dFh0 = gradient(Fh0,a3);
    a3 = solve(dFh0);    
    XX0=X2+a3.*d3;
    d1=d2;
    d2=d3;
else
    d1=d1;
    d2=d2;
    if FX2<FX3
        XX0=X2;
    else
        XX0=X3;
    end
end
while  norm(XX0-X0) >= Theta_error
    
    k=k+1;
    X0=XX0;  DX0(k)=X0(1);DX00(k)=X0(2);
    %求a1,a2,X1,X2
    a1=b1;
    Xh1 = XX0+a1.*d1;
    FXh1 =  subs(f,X,Xh1);
    dFXh1 = gradient(FXh1,b1);
    a1 = solve(dFXh1);    Da1(k)=a1;
    f = x1*x1+2*x2*x2-4*x1-2*x1*x2;
    
    
    X1 = XX0+a1.*d1;   DX1(k)=X1(1);DX11(k)=X1(2);
    FX1 = subs(f,X,X1);
    
    a2=b2;
    Xh0 = X1+a2.*d2;
    FXh2 = subs(f,X,Xh0);
    dFXh0 = gradient(FXh2,b2);
    a2 = solve(dFXh0);  Da2(k)=a2;
    X2 = X1+a2.*d2;  DX2(k)=X2(1);DX22(k)=X2(2);
    FX2 = subs(f,X,X2);
    
    FX0 = subs(f,X,XX0);
    
    deta1 = FX0-FX1;
    deta2 = FX1-FX2;
    m = [deta1,deta2];
    M=sort(m);   %将deta从小到大排序,然后最后一位就是最大值
    deta_Max=M(2);
    
    
    if FX3 < FX0 && (FX0-2*FX2+FX3)*(FX0-FX2-deta_Max)^2 < 0.5*deta_Max*(FX0-FX3)^2
        %走该条通道看k1++
        k1=k1+1;
        a3=b3; Da3(k)=a3;
        XX0=X2+a3*d3;
        h0=X2+a3*d3;
        Fh0 = subs(f,X,h0);
        dFh0 = gradient(Fh0,a3);
        a3 = solve(dFh0);  Da3(k)=a3;
        XX0=X2+a3*d3; DXX0(k)=XX0(1);DXXX0(k)=XX0(2);DF(k)=subs(f,X,XX0);
        d1=d2;
        d2=d3;
    else
              %走该条通道看k2++
        k2=k2+1;
        if FX2<FX3
            XX0=X2; DXX0(k)=XX0(1);DXXX0(k)=XX0(2);DF(k)=subs(f,X,XX0);
        else
            XX0=X3; DXX0(k)=XX0(1); DXXX0(k)=XX0(2);DF(k)=subs(f,X,XX0);
        end
    end
    
    %axis([0 10 0 10]);
    plot(XX0(1),XX0(2),'rp')
    %plot(X0(1),X0(2),'b*')
    line([X0(1) X1(1)],[X0(2) X1(2)]);
    line([X0(1) X2(1)],[X0(2) X2(2)]);
    line([X1(1) X2(1)],[X1(2) X2(2)]);
    line([X0(1) XX0(1)],[X0(2) XX0(2)]);
    hold on
end
grid on
axis([3 5 0 4])
ezplot('-8 =x1*x1+2*x2*x2-4*x1-2*x1*x2')
hold on
ezplot('-7.998 =x1*x1+2*x2*x2-4*x1-2*x1*x2')
hold on
ezplot('0 =x1*x1+2*x2*x2-4*x1-2*x1*x2')
hold on

X_output=XX0;
FX_output= subs(f,X,X_output);

%double(X_output);double(FX_output);
X_output,FX_output

matlab鲍威尔法(Powell)相关推荐

  1. 基于matlab GUI Powell+蚁群算法图像配准

    基于matlab GUI Powell+蚁群算法图像配准 一.简介 1 蚁群算法(ant colony algorithm,ACA)起源和发展历程 Marco Dorigo等人在研究新型算法的过程中, ...

  2. 鲍威尔方法c语言程序,鲍威尔法编程-powell法编程-c语言编程-c++6.0.doc

    鲍威尔法编程-powell法编程-c语言编程-c++6.0.doc include stdio.hdefine N 2float gsfloat zNfloat f;f10*z0z1-5*z0z1-5 ...

  3. newuoa matlab包,PDFO首页、文档和下载 - Powell 无导数优化求解器

    PDFO(Powell's Derivative-Free Optimization solvers,Powell 无导数优化求解器)为 Michael J. D. Powell 的无导数优化求解器提 ...

  4. 鲍威尔法源程序码matlab,鲍威尔算法matlab程序f.doc

    鲍威尔算法matlab程序f.doc functionf=fun(x)f=10*(x(1)+x(2)-5)^2+(x(1)-x(2))^2;functionf=fx(x0,alpha,s)x1=x0+ ...

  5. matlab使用sym类型,subs和diff函数,进行模式搜索法和改进的powell法求解函数

    如果想以分数输出结果,可以用   format rat f函数使用以前的稍加改造 function y=f(x) if(length(x)==1)global xk;global pk;x=xk+x* ...

  6. 鲍威尔c 语言程序,鲍威尔法编程-powell法编程 c语言编程 c++6.0

    fafu js 优化 #include #define N 2 float gs(float z[N]) { float f; //f=10*(z[0]+z[1]-5)*(z[0]+z[1]-5)+( ...

  7. matlab 求极小值 一维优化,MATLABoptimization

    MATLABoptimization 所属分类:matlab例程 开发工具:matlab 文件大小:38KB 下载次数:4146 上传日期:2010-01-06 22:50:12 上 传 者:百位过 ...

  8. 一维搜索-黄金分割法matlab实现

    一维搜索-黄金分割法matlab实现 前言 1.黄金分割法 1.1 黄金分割法的定义 1.2 黄金分割法的搜索过程 2.黄金分割matlab实现 2.1 求f(x)=x^2-7*x+10的极值 2.2 ...

  9. 混合罚函数法matlab报错,罚函数法MATLAB程序

    一.进退法.0.618法.Powell法.罚函数法的Matlab程序设计 罚函数法(通用) function y=ff(x,k) y=-17.86*0.42*x(1)/(0.8+0.42*x(1))* ...

  10. matlabff2函数_罚函数法MATLAB程序.doc

    罚函数法MATLAB程序 一.进退法.0.618法.Powell法.罚函数法的Matlab程序设计罚函数法(通用)function y ff x,k y -17.86*0.42*x 1 / 0.8+0 ...

最新文章

  1. Maven详解(二)------ Maven的安装配置
  2. Linux 访问权限
  3. Redhat Linux 7.2 打开或关闭防火墙
  4. [No0000E6]C# 判断与循环
  5. Linux 下 MySQL 启动与关闭 说明
  6. python emoji 表情过滤
  7. 嵌套高度问题_excel查找技巧:嵌套函数在区间查找中的应用解析
  8. 标贝科技推出「留声机」TTS方案,高还原、个性化声效提升交互意愿
  9. 【Git/Github学习笔记】Git起步
  10. [CF592D]Super M
  11. 图像处理和计算机视觉中的经典论文(转)
  12. 异数OS 星星之火(一)-- 异数OS-织梦师云 用户使用手册
  13. java POI导出excel,导出的excel,打开文件提示文件格式或扩展名无效
  14. 2022全国大学生数学建模竞赛
  15. 哈工大计算机系统大作业-程序人生
  16. 名帖82 苏轼 行楷《前赤壁赋诗卷》
  17. 如何创建用户和组?怎样添加用户呢?windows dos命令
  18. ubuntu中安装比较工具meld及其使用
  19. lcd命令 linux,嵌入式Linux裸机开发(十五)——LCD
  20. CJSON 创建含多层嵌套结构体及结构体解析

热门文章

  1. 操作系统教程答案(谢旭升,朱明华版)
  2. 智能门锁到底安不安全?
  3. linux命令提示符详解
  4. Linux 终端命令的末尾加上一个 符号的作用
  5. 东芝2000ac废粉盒怎么二次利用_阜新降级组件回收厂家,废太阳能板回收_振昌_光伏...
  6. layui上传多张图片
  7. 计算机编程方面的电子书大汇总 阿里云盘
  8. matlab数学实验 课件,MATLAB数学实验课件.PPT
  9. 防止被偷窥和修改 Office文档保护秘笈
  10. 同花顺linux 行情软件,GitHub - zhnlks/puppet: 简单的股票程序化交易系统。核心模块基于同花顺和通达信金融终端。用户交流群:624585416...