合肥电信网站备案,建设部网站拆除资质,潍坊seo网络推广,实惠的制作网站HK算法原理及MATLAB实现
一、编程原理 说明#xff1a;
1、绿色框图中#xff0c;当alpha取为最优权向量时#xff0c;会使 取为最小值。arg的意思是当后面那个函数满足时#xff0c;取出它的自变量的值。 2、注意后面那个式子是对b求偏导 3、e(t)大于0时#xff0c;下…HK算法原理及MATLAB实现
一、编程原理 说明
1、绿色框图中当alpha取为最优权向量时会使 取为最小值。arg的意思是当后面那个函数满足时取出它的自变量的值。 2、注意后面那个式子是对b求偏导 3、e(t)大于0时下式为2*e(t) ; e(t)小于0时下式为0. 所以b要么不更新要么就是加一个正数因此bi0 二、编程实现
clc;
close all;
clear;load(data.mat);%% 线性样本
w2_data_nega-w2_data(:,:); % 矩阵增广化
Y[w1_data;w2_data_nega]; %% 权向量和学习率赋值
b2ones(200,1)[zeros(1,100),0.1*ones(1,100)];
b3ones(200,1)[0.1*ones(1,100),zeros(1,100)];
b[ones(200,1),b2,b3];
r[0.1,0.2,0.3];for i1:3for j1:3%% Y_(Y*Y)\Y;
aY_*b(:,i);
eY*a-b(:,i);%%deltar(j)*(eabs(e));
flag1; % flag为循环标志
Nlength(b(:,i));
C0;
nLinear; % n用来记录是否为线性%%
while(flag)zenum_positive0;zenum_negative0;nenum0;penum0; % zenum_positive大于零的零的个数 zenum_negative小于零的零的个数 nenum复数个数 penum正数个数for k1:Nif(e(k)1e-5 e(k)0)zenum_positivezenum_positive1;elseif (e(k)-(1e-5) e(k)0)zenum_negativezenum_negative1;elseif (e(k)0)nenumnenum1;elsepenumpenum1;end endendendif((zenum_positivezenum_negative-N)0)%%all is 0flag0;elseif((zenum_positivepenum-N)0) %%all is 0 or larger than 0flag0; elseif ((zenum_negativenenum-N)0)%%all is 0 or less than 0flag0;nNon-Linear!;break;elseCC1;aaY_*delta;b(:,i)b(:,i)delta;eY*a-b(:,i);deltar(j)*(eabs(e));endendend
end%% 画图x1(-4:0.1:4);
if abs(a(2))0.0000001x1-a(3)/a(1);x2(-1:0.1:1);x1ones(length(x2))*x1;
elsex2(a(1)*x1a(3))/(-a(2));
end
subplot(3,3,3*(i-1)j);
hold on;plot(x1,x2,LineWidth,1);
hold on;plot(w1_data(:,1),w1_data(:,2),ro,LineWidth,1);
hold on;plot(w2_data(:,1),w2_data(:,2),b^,LineWidth,1);
title( n,[初始权向量为 b,(,num2str(i),), 学习率为 ,num2str(r(j))],color,blue);end
end
三、实验结果