HK算法原理及MATLAB实现

HK算法原理及MATLAB实现

一、编程原理

在这里插入图片描述
说明:

1、绿色框图中,当alpha取为最优权向量时,会使 在这里插入图片描述
取为最小值。arg的意思是当后面那个函数满足时,取出它的自变量的值。
2、注意后面那个式子是对b求偏导
在这里插入图片描述
3、e(t)大于0时,下式为2*e(t) ; e(t)小于0时,下式为0.
所以b要么不更新,要么就是加一个正数,因此bi>0
在这里插入图片描述

在这里插入图片描述

二、编程实现

clc;
close all;
clear;

load('data.mat');

%% 线性样本
w2_data_nega=-w2_data(:,:);  % 矩阵增广化
Y=[w1_data;w2_data_nega]; 


%% 权向量和学习率赋值
b2=ones(200,1)+[zeros(1,100),0.1*ones(1,100)]';
b3=ones(200,1)+[0.1*ones(1,100),zeros(1,100)]';
b=[ones(200,1),b2,b3];   
r=[0.1,0.2,0.3];

for i=1:3
    for j=1:3
        
%% 

Y_=(Y'*Y)\Y';
a=Y_*b(:,i);
e=Y*a-b(:,i);

%%

delta=r(j)*(e+abs(e)); 
flag=1;     % flag为循环标志
N=length(b(:,i));
C=0;
n='Linear'; % n用来记录是否为线性

%%
while(flag)
    zenum_positive=0;zenum_negative=0;nenum=0;penum=0; % zenum_positive大于零的零的个数  zenum_negative小于零的零的个数  nenum复数个数  penum正数个数
    for k=1:N
        if(e(k)<1e-5 && e(k)>0)
            zenum_positive=zenum_positive+1;
        else
            if (e(k)>-(1e-5) && e(k)<0)
                zenum_negative=zenum_negative+1;
        else
            if (e(k)<0)
                nenum=nenum+1;
            else
                penum=penum+1;
            end    
            end
        end
    end
    if((zenum_positive+zenum_negative-N)==0)%%all is 0
        flag=0;
    else
        if((zenum_positive+penum-N)==0) %%all is 0 or larger than 0
            flag=0; 
        else
            if ((zenum_negative+nenum-N)==0)%%all is 0 or less than 0
                flag=0;
                n='Non-Linear!';
                break;
            else
                C=C+1;
                a=a+Y_*delta;
                b(:,i)=b(:,i)+delta;
                e=Y*a-b(:,i);
                delta=r(j)*(e+abs(e));
            end
        end
    end
end

%% 画图

x1=(-4:0.1:4);
if abs(a(2))<0.0000001
    x1=-a(3)/a(1);
    x2=(-1:0.1:1);
    x1=ones(length(x2))*x1;
else
    x2=(a(1)*x1+a(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


三、实验结果

在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
音乐算法是指在音乐数据上进行分析、处理和运算的一种计算方法。典型的音乐算法包括音频采样、频谱分析、频率识别、节奏分析、音高分析、音乐分类和音乐生成等。 音乐算法原理可以分为两类:时域算法和频域算法。时域算法主要从时域波形的角度来处理音乐数据,包括时间序列分析和差分方程分析等。频域算法则基于时域信号的傅立叶变换结果,通过分析其频域成分来对音乐数据进行处理。其中,基于傅立叶变换的频谱分析和频率识别是最常用的方法。 由于音频数据采样率很高,因此使用MATLAB作为音乐算法实现的工具具有很大的优势。MATLAB提供了多种工具箱,包括信号处理工具箱、音频工具箱等,可用于实现音乐算法。比如,用MATLAB实现音频采样可通过调用“audioread”函数实现,这样就可以得到采样后的音频信号。 基于MATLAB实现的音乐算法通常包括以下几个步骤:读取音频数据、预处理、特征提取和分类等。其中,预处理包括平滑处理、去噪等操作;特征提取则包括计算频谱能量、频率、均值等特征;分类则是将音乐数据分成不同的类别,比如用神经网络分类器划分出不同的乐器类别。除此之外,也可以通过MATLAB实现音乐生成,比如基于音乐语言模型的音乐生成等。 总之,音乐算法是一种涉及时域和频域的计算方法,可以实现音乐数据的分析、处理和生成。在MATLAB的支持下,音乐算法得以更加简便和有效地实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

果壳小旋子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值