资源简介
最优化算法 matlab 一维搜索 多维搜索

代码片段和文件信息
function [x_kf_k]=conjugate_gradient(funx0eps)
%% Usage:[x_kf_k]=conjugate_gradient(‘x1^2+2*x2^2-4*x1-2*x1*x2‘[1;1]0.01)
x_k=x0;
l=length(x0);
f=inline(sym(fun));
% 每次新初始点处
g0=G(funx_k); %这里s_k是1*2矩阵
s_k=-g0;
k=0;
while 1
% 精确一维搜索表达式,fun_v
syms x;
switch l
case 2fun_v=f(x_k(1)+s_k(1)*xx_k(2)+s_k(2)*x);
case 3fun_v=f(x_k(1)+s_k(1)*xx_k(2)+s_k(2)*xx_k(3)+s_k(3)*x);
case 4fun_v=f(x_k(1)+s_k(1)*xx_k(2)+s_k(2)*xx_k(3)+s_k(3)*xx_k(4)+s_k(4)*x);
end
fun_vv=inline(fun_v);
% 调用Newton法求最小lamda值
c=Advance_Back(fun_v);
result=Newton(fun_vvc);
lamda=result(1);
x_k=x_k+lamda*s_k;
g1=G(funx_k); %这里是k+1的梯度值
norm_g1=norm(g1);
if norm_g1 switch l
case 2f_k=f(x_k(1)x_k(2));
case 3f_k=f(x_k(1)x_k(2)x_k(3));
case 4f_k=f(x_k(1)x_k(2)x_k(3)x_k(4));
end
return
end
u_k1=norm(g1)^2/norm(g0)^2;
s_k=-g1+u_k1*s_k;
k=k+1;
g0=g1; %g1退化为g0
if k==l-1
%x_k=x_k; x0=x_k;
g0=G(funx_k); %这里s_k是1*2矩阵
s_k=-g0;
k=0;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 函数2,精确一维搜索Newton法
function x1=Newton(funx0) %x1可能是多个值
delta =0.01;
%% 求表达式的一阶导d1_f,二阶导d2_f
d1_f=inline(diff(sym(fun)));
d2_f=inline(diff(sym(fun)2));
%% 计算牛顿迭代公式
while 1
d1_x0=d1_f(x0);
d2_x0=d2_f(x0);
err=abs(d1_x0);
if err < delta %判断此x0满不满足
x1=x0;
return
end
x0=x0-d1_x0/d2_x0; %计算新x0
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 函数3,求梯度矩阵函数
function [Gradient_f]=G(funx);
%% 表达式中变量个数
l=length(x);
Gradient_f=zeros(l1);
%% 梯度矩阵(在x处一阶导)的值
for i=1:l
% 循环求出梯度表达式
x_i=[‘x‘num2str(i)];
d=diff(sym(fun)x_i); %对x(i)求梯度
% 将xi替换为x(i)
for k=1:l
x_k=[‘x‘num2str(k)];
x_k1=[‘x(‘num2str(k)‘)‘];
d=strrep(char(d)x_kx_k1);
end
% 将该字符串写成内联函数,并将计算的值赋给Gradient_f矩阵对应的位置
d_fun=inline(d);
Gradient_f(i)=d_fun(x);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 函数4,进退法确定牛顿搜索初始点
function c=Advance_Back(fun)
t0=0;
h=0.1;
%% 求函数表达式
f=inline(fun);
f_t0=f(t0);
t2=t0+h;
f_t2=f(t2);
if f_t2<=f_t0 %向正方探测
t1=t0+h;
f_t1=f(t1);
else %向负方向探测
h=-h;
t1=t0+h;
f_t1=f(t1);
end
%% 进退法计算
while 1
if f_t1<=f_t0
h=2*h;
t2=t0;
t0=t1;
t1=t0+h;
f_t1=f(t1);
else
if t1 a=t1;
b=t2;
else
a=t2;
b=t1;
end
c=(a+b)/2;
return;
end
end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-12-04 13:20 算法程序\
目录 0 2012-12-04 12:48 算法程序\实用最优化方法2\
文件 3144 2012-12-04 15:03 算法程序\实用最优化方法2\DFP.m
文件 810 2012-12-04 09:35 算法程序\实用最优化方法2\G.m
文件 1399 2012-12-04 09:59 算法程序\实用最优化方法2\G_H.m
文件 3075 2012-12-04 15:00 算法程序\实用最优化方法2\conjugate_gradient.m
文件 3585 2012-12-04 15:02 算法程序\实用最优化方法2\damp_Newton.m
文件 3201 2012-12-04 15:03 算法程序\实用最优化方法2\gradient_my.m
目录 0 2012-12-04 13:18 算法程序\实用最优化算法\
文件 1092 2012-12-04 13:09 算法程序\实用最优化算法\Advance_Back.m
文件 1307 2012-12-04 13:11 算法程序\实用最优化算法\Bisect.m
文件 1361 2012-12-04 13:12 算法程序\实用最优化算法\Golden_Slect.m
文件 2003 2012-12-04 13:13 算法程序\实用最优化算法\Inaccuracy.m
文件 1097 2012-12-04 13:15 算法程序\实用最优化算法\Newton.m
文件 1117 2012-12-04 13:17 算法程序\实用最优化算法\Succeed_Fail.m
文件 40960 2012-11-04 10:09 算法程序\实用最优化算法\测试记录.doc
文件 25581 2012-11-04 10:09 算法程序\实用最优化算法\测试记录.docx
- 上一篇:分数阶傅里叶变换MATLAB
- 下一篇:一个遗传算法TSP程序(GUI界面)
相关资源
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
评论
共有 条评论