资源简介
利用LM算法优化BP神经网络的matlab源程序。
代码片段和文件信息
% 计算函数f的雅克比矩阵,是解析式
syms a b y x real;
f=a*exp(-b*x);
Jsym = jacobian(f[a b])
% 拟合用数据
data_1=[0.25 0.5 1 1.5 2 3 4 6 8];
obs_1=[19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01];
% 2. LM算法
% 初始猜测s
a0=10; b0=0.5;
y_init = a0*exp(-b0*data_1);
% 数据个数
Ndata=length(obs_1);
% 参数维数
Nparams=2;
% 迭代最大次数
n_iters=50;
% LM算法的阻尼系数初值
lamda=0.01;
% step1: 变量赋值
updateJ=1;
a_est=a0;
b_est=b0;
% step2: 迭代
for it=1:n_iters
if updateJ==1
% 根据当前估计值,计算雅克比矩阵
J=zeros(NdataNparams);
for i=1:length(data_1)
J(i:)=[exp(-b_est*data_1(i)) -a_est*data_1(i)*exp(-b_est*data_1(i))];
end
% 根据当前参数,得到函数值
y_est = a_est*exp(-b_est*data_1);
% 计算误差
d=obs_1-y_est;
% 计算(拟)海塞矩阵
H=J‘*J;
% 若是第一次迭代,计算误差
if it==1
e=dot(dd);
end
end
% 根据阻尼系数lamda混合得到H矩阵
H_lm=H+(lamda*eye(NparamsNparams));
% 计算步长dp,并根据步长计算新的可能的\参数估计值
dp=inv(H_lm)*(J‘*d(:));
g = J‘*d(:);
a_lm=a_est+dp(1);
b_lm=b_est+dp(2);
% 计算新的可能估计值对应的y和计算残差e
y_est_lm = a_lm*exp(-b_lm*data_1);
d_lm=obs_1-y_est_lm;
e_lm=dot(d_lmd_lm);
% 根据误差,决定如何更新参数和阻尼系数
if e_lm lamda=lamda/10;
a_est=a_lm;
b_est=b_lm;
e=e_lm;
disp(e);
updateJ=1;
else
updateJ=0;
lamda=lamda*10;
end
end
%显示优化的结果
a_est
b_est
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1640 2011-11-03 00:03 LM.m
----------- --------- ---------- ----- ----
1640 1
相关资源
- 很好的MATLAB学习资料
- 使用BP神经元网络、ELM分类分类实例(
- 显著性检测代码
- 非均匀快速傅里叶变换(nufft)最原始
- PSO_dg_prog
- matlab调用xfoil程序计算翼型升阻力力矩
- 卷积(convolutional )受限玻尔兹曼机(
- raw图转换为rgb图 (raw 2 rgb)
- MOPKSVD等算法的图像稀疏表示代码
- matlab实现的偏最小二乘PLS和一个实例
- 构造B样条小波和基于小波变换模极大
- matlab生成网格编号每个单元的节点号
- Enkf 卡尔曼程序
- PIO算法
- CSR sim 压缩感知雷达信号处理matlab仿真
- wind matlab 量化投资
- 基于PSO的PMU配置的简易实例 (PSO ba
- 计算信号LZ复杂度的MATLAB代码
- matlab一维条形码识别程序
- Spatial Econometrics MATLAB 软件包是将New
- jpg 2 rgb565 matlab code 实现将jpg格式的图
- matlab S-function 编写的离散状态空间表
- matlab重现 正弦信号 重复控制器
- 籽子群算法优化的BP神经网络做图像分
-
matlab radar simuli
nk system matlab雷达系统 - matlab图像质心提取
- 基于博弈论的认知无线电无线资源分
- surf算法的matlab代码
- RBF and svm matlab code matlab回归预测的源
- msd CPM多符号检测算法调制解调
评论
共有 条评论