%本程序是Powell方法的优化演示程序
%本程序采用符号计算的方法
%其中选用的方程求解时选用epsilon=0.0001是会得到比较理想的结果
%当然在此没考虑lam的精度要求如果增加lam的精度可使得迭代步骤相应减少
%且对epsilon的精度也会有较低要求
%董阿伦-信息06-5 06070253
clear all
clc
syms x1 x2 lam
f=x1^2+2*x2^2-4*x1-2*x1*x2;
x0=[1 1]';
%f=100*(x2-x1^2)^2+(1-x1)^2;%选用的方程
%x0=[-1.2 1.0]';%选用的初始值
epsilon=0.2;
e1=[1 0]';e2=[0 1]';%构造线性无关向量
e={e1 e2};%采用元包数组存取线性无关向量
s=e;%用来存放搜索方向
n=length(s);
xx0=x0;%用来记录x0
while 1
syms x1 x2 lam %刷新符号变量
for i=1:n
syms lam %刷新符号变量
%求关于lam的极小值部分
xx=xx0+lam*s{i};
x1=xx(1);x2=xx(2);
ff=eval(f);
%牛顿迭代部分
lam0=0;
f1=diff(ff);%一阶导数
f2=diff(f1);%二阶导数
while 1
syms lam
lam=lam0;
lam1=lam0-eval(f1)/eval(f2);
if abs(lam1-lam0)<0.001
break;%满足精度要求迭代结束
end
lam0=lam1;%更新lam0
end
%牛顿迭代结束
x{i}=xx0+lam*s{i};%记录每个搜索方向
xx0=x{i};
end
if norm(x{n}-x0)<epsilon%满足迭代精度要求结束主程序
x0=x{n};
break;
else
%寻找下降最大处的xj
x1=x0(1);x2=x0(2);
ff1=eval(f);
x1=x{1}(1);x2=x{1}(2);
ff2=eval(f);
delta=ff1-ff2;
jj=0;%记录下标
%寻求最大的函数值增量
for j=1:n-1
x1=x{j}(1);x2=x{j}(2);
ff1=eval(f);
x1=x{j+1}(1);x2=x{j+1}(2);
ff2=eval(f);
delta0=ff1-ff2;
if delta0>delta
delta=delta0;%更新delta
jj=j;%更新记录的下标
end
end
end
x1=x0(1);x2=x0(2);
ff1=eval(f);
x1=x{n}(1);x2=x{n}(2);
ff2=eval(f);
x3=2*x{n}-x0;
x1=x3(1);x2=x3(2);
ff3=eval(f);
if 2*delta>=(ff1-2*ff2+ff3)
%更新搜索方向部分
ss=(x{n}-x0)/norm(x{n}-x0);%获得一个新的搜索方向
for i=jj+1:n-1%元包数组的下标从一开始
s{i}=s{i+1};
end
s{n}=ss;
syms lam %刷新符号变量
%用牛顿法寻求最优步长
xn=x{n}+lam*x{n};
x1=xn(1);x2=xn(2);
ff=eval(f);
%牛顿迭代部分
lam0=0;
f1=diff(ff);
f2=diff(f1);
while 1
syms lam %刷新符号变量
lam=lam0;
lam1=lam0-eval(f1)/eval(f2);
if abs(lam1-lam0)<0.001%满足精度则停止迭代
break;
end
lam0=lam1;
end
%牛顿迭代结束
x0=x{n}+lam*x{n};
else
x0=x{n};%更新x0继续迭代
end
xx0=x0;%刷新x0
end
%输出近似极小点
disp(['让函数取得极小值的近似点为:','(',num2str(x0(1)),',',num2str(x0(2)),')'])
x1=x0(1);x2=x0(2);
%输出近似极小值
disp(['函数的极小值为啊:f=',num2str(eval(f))])
IT狂飙
- 粉丝: 4842
- 资源: 2650
最新资源
- 最新算法北方苍鹰(NGO)与其他算法进行对比 2、NGO算法是2022年新出的算法 3、用几种算法跑测试函数进行对比 4、十分详细的 5、NGO算法主要与ssa、woa、pso、gwo等算法对比 ma
- 三相电压源型逆变器闭环控制仿真模型,孤岛运行 采用电压外环,电流内环的双PI控制,LCL滤波器 在对称负载和不对称负载的情况下,三相输出电压均可保持稳定 运行环境为matlab simulink
- 直流电机双闭环控制,有关直流电机控制系统仿真均
- 五相永磁同步电机矢量控制,滞环控制,弱磁控制,五相永磁同步电机Svpwm双闭环控制
- fpga实现双线性插值缩放代码及资料
- 基于matlab医学图像处理
- 非隔离双向DC DC变器 buck-boost变器仿真 输入侧为直流电压源,输出侧接蓄电池 模型采用电压外环电流内环的双闭环控制方式 正向运行时电压源给电池恒流恒压充电,反向运行时电池放电维持直流侧电
- fpga图像缩放代码及相关资料
- HX711称重,stm32c8t6内核 esp8266阿里云服务器,app上显示重量 OLED 屏幕显示 (只代码)
- 单相全桥逆变器SPWM控制模型 双极性SPWM和单极性SPWM都有 运行环境为matlab simulink
- 二极管中点钳位型三电平整流器(NPC型整流器)MATLAB Simulink仿真 电压电流双闭环控制
- FPGA实现VGA转HDMI功能的IP,配详细的接口和使用说明
- -输电线路故障行波仿真举例, -仿真由3电源和4段分布参数构成环网作为输电线路故障行波仿真平台
- 西门子S7-1200与Factory IO联合仿真程序,6x9立体仓库、双立体仓库,可实现对物的: 自动连续存功能,自动连续取功能,指定位置存功能,指定位置取功能,满仓,空仓,指定仓库有无物报警等功能
- comsol光子晶体光纤有效折射率,模式色散,有效模式面积计算
- 云计算、边缘计算-云边协同系统模型 线形搜索算法寻找最优路径 多线程并行提升系统性能 Matlab实现
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈