随机梯度辨识方法

Matlab

利用随机梯度方法进行辨识的举例,可以结合不同情况进行优化处理(例如需要复现文献中结果)

Matlab代码如下:

matlab 复制代码
clc;clear;close; format short g;
M = 'Stochastic gradient method';
sigma = 0.5;    % Noise standard deviation
FF = 0.88;      % Forgetting factor
PlotLength = 3000; length1 = PlotLength + 200;  
na = 4; nb = 4; n = na + nb;    % order
alp = [1, 0, -0.96, 0, 0.64]; bet = [0.412, 0.9682, 0.824, 0.2472]; d = [1];
par0 = [alp(2 : na + 1), bet(1 : nb)]';
p0 = 1e6; P = eye(n) * p0; r = 1;   % initial value
par1 = ones(n, 1) * 1e-6;

sy = f_integral(alp, bet); sv = f_integral(alp, d); % the complex integral 
delta_ns = sqrt(sv / sy) * 100 * sigma; % the noise to signal ratio
[sy, sv, delta_ns];

u = normrnd(0, 1, length1, 1);
v = normrnd(0, sigma, length1, 1);
Gz = tf(bet, alp, 1);
Gn = tf(d, alp, 1);
y = lsim(Gz, u) + lsim(Gn, v);

%% Stochastic gradient
jj = 0; j1 = 0;
for k = 20 : length1
    jj = jj + 1;
    varphi = [-y(k - 1: -1: k - na); u(k - 1: -1: k - nb)]; 
    r = FF * r + varphi' * varphi;  % SG
    par1 = par1 + varphi / r * (y(k) - varphi' * par1); 
    %L = P * varphi / (FF + varphi' * P *varphi);   % RLS
    %P = P - L * varphi' * P;
    %par1 = par1 + L * (y(k) - varphi' * par1);
    delta = norm(par1 - par0) / norm(par0);
    sg(jj, :) = [jj, par1', delta];
    if (jj == 100) | (jj == 200) | (jj == 500) | mod(jj, 1000) == 0
        j1 = j1 + 1;
        sg_100(j1, :) = [jj, par1', delta * 100];
    end
    if jj == PlotLength
        break
    end
end
sg_100(j1 + 1, :) = [0, par0', 0];

%fprintf('\n', 't & \t a_1 & \t a_2 & \t b_1 & \t b_2 & \delta');
fprintf('%6d & %6.3f & %6.3f & %6.3f & %6.3f & %6.3f & %6.3f & %6.3f & %6.3f & %6.3f \\\\ \n', sg_100');
figure(1)
jk = (19: 10: PlotLength - 1)';
plot(sg(jk, 1), sg(jk, n + 2));

xlabel('\it       k'); ylabel('{\it         \delta}');

仿真结果图:

随着迭代次数的增加,可见误差越来越小,命令行窗口输出如下:

尝试修改参数加深理解~

相关推荐
m4Rk_1 天前
【论文阅读】Agent 记忆机制(45):ReMemR1——让长期上下文 Agent 可以回溯历史记忆进行非线性推理
论文阅读·人工智能·学习·开源·github
m4Rk_3 天前
【论文阅读】Agent 记忆机制(43):Mem²Evolve——让经验与能力在双记忆中共同进化
论文阅读·人工智能·学习·开源·github
m4Rk_5 天前
【论文阅读】Agent 记忆机制(41):Agentic Plan Caching——将历史执行轨迹转化为可复用的计划记忆
论文阅读·人工智能·学习·开源·github
m4Rk_5 天前
【论文阅读】Agent 记忆机制(40):HiAgent——通过子目标级记忆提升长程任务执行能力
论文阅读·人工智能·学习·开源·github
、达西先生6 天前
Hand Visibility Detector 论文解读
论文阅读·姿态识别·视觉估计
柳叶方舟6 天前
Nature Medicine IF=50.0 | 公众医疗助手LLM可靠性存隐忧:真人交互表现未优于对照组,现有评估基准失效
论文阅读·人工智能·深度学习·交互·健康医疗
Capricorn19887 天前
知芽研究问题看板无法推进?从孵化区到笔记的机制排查指南
大数据·论文阅读·人工智能·笔记·学习方法·论文笔记
m4Rk_8 天前
【论文阅读】Agent 记忆机制(38):AMA——用多智能体协作动态选择记忆粒度
论文阅读·人工智能·学习
m4Rk_11 天前
【论文阅读】Agent 记忆机制(35):MAGMA——用多关系图与意图路由实现结构化长期记忆检索
论文阅读·人工智能·学习·开源·github
m4Rk_12 天前
【论文阅读】Agent 记忆机制(34):MemoryBank——用遗忘曲线管理可强化的长期对话记忆
论文阅读·人工智能·学习·开源·github