资源简介
最优化算法 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
- 语音变速变调matlab代码
- 图像处理_烟雾检测matlab代码
- 锁相环原理以及matlab仿真程序
- Matlab画图、线条颜色设置函数linspec
- 嵌入式小波零树(ezw)编码matlab程序
- MATLAB频域图像增强技术
- 基于遗传算法的投影寻踪模型matlab实
- 移相全桥matlab仿真实现
- ARFIMA预测MATLAB代码
- MATLAB万年历源码
- PM谱-matlab
- MATLAB霍夫曼Huffman编码译码GUI界面设计
- 各种数字水印的matlab源代码
- 图像检索的matlab程序
- matlab小波复合阂值算法
- MATLAB数字信号调制解调askpskfsk等仿真
- powell共轭方向法MATLAB程序编制
- MatlabR2019A.txt
- hyperspectral toolbox for matlab - 高光谱图
-
OFDMMIMO仿真实验合集 matlab simuli
nk - matlab 直序列扩频仿真
- 基于小波变换的静态图像数字水印m
- 三维比例导引程序 matlab
- A*算法路径规划的matlab核心代码
- LPP算法的matlab实现
- 基于stokes矢量转换matlab
- 目标跟踪程序
- 蚁群聚类算法matlab
- Matlab车牌定位源代码
评论
共有 条评论