熵值法算法代码-MATLAB

合集下载

香农熵的matlab程序

香农熵的matlab程序

香农熵的Matlab程序1. 引言香农熵(Shannon Entropy)是信息论中一个重要的概念,用于衡量一个随机变量的不确定性或者信息量。

在信息论和通信领域,香农熵被广泛应用于数据压缩、信号处理、密码学等方面。

本文将介绍如何使用Matlab编写程序来计算香农熵。

2. 算法原理香农熵的计算公式如下:其中,H表示香农熵,p(x)表示随机变量X取某个值x的概率。

根据该公式,我们需要计算每个可能取值的概率,并将其代入公式中求和,即可得到香农熵的值。

3. Matlab程序实现下面是一个简单的Matlab程序,用于计算给定随机变量的香农熵:function entropy = shannon_entropy(probabilities)entropy = 0;for i = 1:length(probabilities)if probabilities(i) ~= 0entropy = entropy - probabilities(i) * log2(probabilities(i));endendend以上程序定义了一个名为shannon_entropy的函数,该函数接受一个概率向量作为输入参数,并返回计算得到的香农熵。

程序的实现思路是遍历概率向量中的每个元素,如果该元素不为0,则将其代入香农熵的计算公式中进行计算,并累加到最终的结果中。

4. 使用示例为了演示程序的使用,我们将计算一个简单的示例。

假设有一个随机变量X,其可能取值为[1, 2, 3],对应的概率分别为[0.3, 0.5, 0.2]。

我们可以使用上述程序来计算该随机变量的香农熵。

probabilities = [0.3, 0.5, 0.2];entropy = shannon_entropy(probabilities);disp(['Entropy: ', num2str(entropy)]);运行上述代码,程序将输出以下结果:Entropy: 1.4854753这表明给定的随机变量X的香农熵为1.4854753。

matlab熵值法

matlab熵值法

matlab熵值法Matlab熵值法熵值法是一种常用的多指标综合评价方法,可以用于解决决策问题。

在Matlab中,可以利用熵值法进行数据处理和分析,从而得出较为准确的评价结果。

本文将介绍熵值法的基本原理和在Matlab中的应用。

一、熵值法的基本原理熵值法是基于信息论中的熵概念发展而来的一种综合评价方法。

其基本原理是通过计算指标的熵值和权重,将不同指标的数据标准化,并根据标准化后的数据进行综合评价。

具体步骤如下:1. 确定评价指标:根据具体问题,确定需要评价的指标,例如生产效率、环境质量等。

2. 收集数据:收集各指标的数据,可以是实测数据或者经验数据。

3. 数据标准化:将各指标的数据进行标准化处理,一般采用线性标准化或者非线性标准化方法。

4. 计算熵值:根据标准化后的数据,计算各指标的熵值。

熵值越小,表示该指标的信息量越大。

5. 计算权重:根据各指标的熵值,计算各指标的权重。

熵值越小,表示该指标的重要性越高,权重越大。

6. 综合评价:将各指标的权重与标准化后的数据相乘,得到各指标的加权综合值。

根据综合值的大小,对各评价对象进行排序或者分类。

二、Matlab中的熵值法实现在Matlab中,可以利用熵值法进行数据处理和分析。

下面以一个简单的案例来说明如何使用Matlab进行熵值法分析。

假设我们需要对某个城市的环境质量进行评价,评价指标包括空气质量、水质、噪声等。

我们已经收集到了这些指标的数据,并进行了标准化处理。

1. 首先,我们需要定义评价指标和标准化后的数据。

可以使用Matlab中的矩阵来表示,每一行表示一个评价对象,每一列表示一个评价指标。

2. 然后,我们可以使用熵值法的计算公式来计算各指标的熵值和权重。

在Matlab中,可以使用熵值法的计算函数进行计算。

函数的输入参数为标准化后的数据,输出结果为各指标的熵值和权重。

3. 最后,我们可以根据各指标的权重和标准化后的数据,计算各评价对象的综合值。

根据综合值的大小,可以对评价对象进行排序或者分类。

Matlab学习系列熵值法确定权重

Matlab学习系列熵值法确定权重

Matlab学习系列.-熵值法确定权重————————————————————————————————作者:————————————————————————————————日期:19. 熵值法确定权重一、基本原理在信息论中,熵是对不确定性的一种度量。

信息量越大,不确定性就越小,熵也就越小;信息量越小,不确定性越大,熵也越大。

根据熵的特性,可以通过计算熵值来判断一个事件的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响(权重)越大,其熵值越小。

二、熵值法步骤1. 选取n 个国家,m 个指标,则x ij 为第i 个国家的第j 个指标的数值(i =1, 2…, n ; j =1, 2,…, m );2. 指标的归一化处理:异质指标同质化由于各项指标的计量单位并不统一,因此在用它们计算综合指标前,先要对它们进行标准化处理,即把指标的绝对值转化为相对值,并令ij ij x x =,从而解决各项不同质指标值的同质化问题。

而且,由于正向指标和负向指标数值代表的含义不同(正向指标数值越高越好,负向指标数值越低越好),因此,对于高低指标我们用不同的算法进行数据标准化处理。

其具体方法如下:正向指标:12'1212min{,,...,}max{,,...,}min{,,...,}ij j j nj ij j j nj j j nj x x x x x x x x x x x -=-负向指标:12'1212max{,,...,}max{,,...,}min{,,...,}j j nj ijij j j nj j j nj x x x x x x x x x x x -=-则'ij x 为第i 个国家的第j 个指标的数值(i =1, 2…, n ; j =1, 2,…, m )。

为了方便起见,归一化后的数据'ij x 仍记为x ij ;3. 计算第j 项指标下第i 个国家占该指标的比重:1, 1,2...,, 1,2 (i)ij n ij i x p i n j m x====∑4. 计算第j 项指标的熵值:1ln()nj ij ij i e k p p ==-∑其中,k =1/ln(n )>0. 满足e j ≥0;5. 计算信息熵冗余度:1j j d e =-;6. 计算各项指标的权值:1, 1,2,...,jj m j j d w j m d===∑7. 计算各国家的综合得分:1, 1,2,...mi j ij j s w p i n ==⋅=∑三、Matlab 实现按上述算法步骤,编写Matlab 函数:shang.mfunction [s,w]=shang(x)% 函数shang(), 实现用熵值法求各指标(列)的权重及各数据行的得分% x为原始数据矩阵, 一行代表一个国家, 每列对应一个指标% s返回各行得分,w返回各列权重[n,m]=size(x); % n=23个国家, m=5个指标%%数据的归一化处理% Matlab2010b,2011a,b版本都有bug,需如下处理. 其它版本直接用[X,ps]=mapminmax(x',0,1);即可[X,ps]=mapminmax(x');ps.ymin=0.002; % 归一化后的最小值ps.ymax=0.996; % 归一化后的最大值ps.yrange=ps.ymax-ps.ymin; % 归一化后的极差,若不调整该值, 则逆运算会出错X=mapminmax(x',ps);% mapminmax('reverse',xx,ps); % 反归一化, 回到原数据X=X'; % 为归一化后的数据, 23行(国家), 5列(指标)%% 计算第j个指标下,第i个记录占该指标的比重p(i,j)for i=1:nfor j=1:mp(i,j)=X(i,j)/sum(X(:,j));endend%% 计算第j个指标的熵值e(j)k=1/log(n);for j=1:me(j)=-k*sum(p(:,j).*log(p(:,j)));endd=ones(1,m)-e; % 计算信息熵冗余度w=d./sum(d); % 求权值ws=w*p'; % 求综合得分程序测试,现有数据如下:(存为data.txt)114.6 1.1 0.71 85.0 34655.3 0.96 0.4 69.0 300132.4 0.97 0.54 73.0 410152.1 1.04 0.49 77.0 433103.5 0.96 0.66 67.0 38581.0 1.08 0.54 96.0 336179.3 0.88 0.59 89.0 44629.8 0.83 0.49 120.0 28992.7 1.15 0.44 154.0 300248.6 0.79 0.5 147.0 483115.0 0.74 0.65 252.0 45364.9 0.59 0.5 167.0 402163.6 0.85 0.58 220.0 49595.7 1.02 0.48 160.0 384139.5 0.70 0.59 217.0 47889.9 0.96 0.39 105.0 31476.7 0.95 0.51 162.0 341121.8 0.83 0.60 140.0 40142.1 1.08 0.47 110.0 32678.5 0.89 0.44 94.0 28077.8 1.19 0.57 91.0 36490.0 0.95 0.43 89.0 301100.6 0.82 0.59 83.0 456执行代码:x=load('data.txt'); % 读入数据[s,w]=shang(x)运行结果:s = Columns 1 through 90.0431 0.0103 0.0371 0.0404 0.0369 0.0322 0.0507 0.0229 0.0397Columns 10 through 180.0693 0.0878 0.0466 0.0860 0.0503 0.0800 0.0234 0.0456 0.0536Columns 19 through 230.0272 0.0181 0.0364 0.0202 0.0420w = 0.1660 0.0981 0.1757 0.3348 0.2254。

计算离散信源的熵matlab实现

计算离散信源的熵matlab实现

实验一:计算离散信源的熵一、实验设备:1、计算机2、软件:Matlab二、实验目的:1、熟悉离散信源的特点;2、学习仿真离散信源的方法3、学习离散信源平均信息量的计算方法4、熟悉 Matlab 编程;三、实验内容:1、写出计算自信息量的Matlab 程序2、写出计算离散信源平均信息量的Matlab 程序。

3、掌握二元离散信源的最大信息量与概率的关系。

4、将程序在计算机上仿真实现,验证程序的正确性并完成习题。

四、实验报告要求简要总结离散信源的特点及离散信源平均信息量的计算,写出习题的MATLAB 实现语句。

信息论基础:自信息的计算公式 21()log aI a p = Matlab 实现:I=log2(1/p) 或I=-log2(p) 熵(平均自信息)的计算公式22111()log log qq i i i i i i H x p p p p ====-∑∑ Matlab 实现:HX=sum(-x.*log2(x));或者h=h-x(i)*log2(x(i)); 习题:1. 甲地天气预报构成的信源空间为:1111(),,,8482X p x ⎡⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦⎣⎦ 小雨 云 大雨晴 乙地信源空间为:17(),88Y p y ⎡⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦⎣⎦ 小雨晴 求此两个信源的熵。

求各种天气的自信息量。

案:() 1.75;()0.5436H X H Y ==运行程序:p1=[1/2,1/4,1/8,1/8];%p1代表甲信源对应的概率p2=[7/8,1/8];%p2代表乙信源对应的概率H1=0.0;H2=0.0;I=[];J=[];for i=1:4H1=H1+p1(i)*log2(1/p1(i));I(i)=log2(1/p1(i));enddisp('自信息量分别为:');Idisp('H1信源熵为:');H1for j=1:2H2=H2+p2(j)*log2(1/p2(j));J(j)=log2(1/p2(j));enddisp('自信息量分别为:');Jdisp('H2信源熵为:');H2。

熵权法matlab计算过程

熵权法matlab计算过程

熵权法matlab计算过程
熵权法是一种常见的多指标决策方法,用于确定各指标的权重。

Matlab是一种常用的计算机软件,可以方便地进行熵权法的计算过程。

在使用Matlab进行熵权法计算时,需要进行如下步骤:
1. 将指标数据输入Matlab,可以使用Excel等软件导出CSV格式的数据文件,再通过Matlab的读取函数导入数据。

2. 计算各指标的归一化熵值,这可以通过编写函数实现,具体方法是将指标数据进行归一化处理,然后计算每个指标的熵值。

3. 计算各指标的熵权系数,这可以通过编写函数实现,具体方法是将各指标的归一化熵值进行加权平均,得到各指标的熵权系数。

4. 检验所得熵权系数的合理性,可以计算各指标的加权得分,得分越高的指标说明其熵权系数越大,权重越大。

5. 根据熵权系数进行多指标决策,可以将各指标的加权得分相加,得到最终得分,得分越高的方案或选择越优。

以上就是熵权法在Matlab中的计算过程,通过这些步骤可以方便地进行多指标决策,确定各指标的权重和方案的优劣。

- 1 -。

样本熵重构的matlab代码

样本熵重构的matlab代码

样本熵重构的matlab代码样本熵重构是一种非参数估计的方法,用于评估时间序列的复杂度和随机性。

它被广泛应用于生物医学领域、金融领域和气象领域等。

在本文中,我将详细介绍样本熵重构的原理和matlab代码实现,并共享自己的观点和理解。

让我们来了解样本熵重构的原理。

样本熵是一种用来衡量时间序列复杂性的指标,它可以反映时间序列的不规则性和随机性。

样本熵的计算需要考虑序列的重复性和相似性,通过比较相邻的样本来评估序列的复杂度。

在实际应用中,样本熵可以用来分析生物信号、金融数据和气象数据等的复杂性,有助于理解数据的随机性和规律性。

接下来,我将通过matlab代码演示样本熵的重构过程。

在matlab 中,我们可以使用以下代码来实现样本熵的计算:```matlabfunction [SampleEntropy] = SampleEntropy(X, m, r)N = length(X);N1 = N - m + 1;N2 = N - m;v = zeros(1, N1);w = zeros(1, N2);for i = 1:N1temp1 = X(i:i+m-1);for j = 1:N2temp2 = X(j:j+m-1);if i ~= jif max(abs(temp1 - temp2)) <= r v(i) = v(i) + 1;endendendendfor i = 1:N2temp1 = X(i:i+m-1);for j = 1:N2temp2 = X(j:j+m-1);if i ~= jif max(abs(temp1 - temp2)) <= r w(i) = w(i) + 1;endendendendSampleEntropy = -log(sum(v)/sum(w));end```以上是一个用于计算样本熵的简单matlab函数。

在这段代码中,我们首先定义了样本熵的计算公式,然后通过两个循环来依次计算v和w的值,最终得出样本熵的结果。

转移熵matlab代码精选全文完整版

转移熵matlab代码精选全文完整版

可编辑修改精选全文完整版以下是一个简单的示例,展示了如何在MATLAB中计算两个向量之间的转移熵:% 计算转移熵function transferEntropy = calculateTransferEntropy(X, Y, delay)% X: 源向量% Y: 目标向量% delay: 延迟步数% 转移熵初始化为0transferEntropy = 0;% 计算源向量和目标向量的长度len = length(X);% 计算延迟后的源向量X_delayed = X(1:len-delay);% 计算延迟后的目标向量Y_delayed = Y(delay+1:len);% 构建延迟后的源向量和目标向量的联合概率分布jointDistribution = zeros(2, 2);for i = 1:len-delayif X_delayed(i) == 0if Y_delayed(i) == 0jointDistribution(1, 1) = jointDistribution(1, 1) + 1;elsejointDistribution(1, 2) = jointDistribution(1, 2) + 1;endelseif Y_delayed(i) == 0jointDistribution(2, 1) = jointDistribution(2, 1) + 1;elsejointDistribution(2, 2) = jointDistribution(2, 2) + 1;endendend% 计算转移熵for i = 1:2for j = 1:2p_xy = jointDistribution(i, j) / (len-delay);p_x = sum(X_delayed == (i-1)) / (len-delay);p_y = sum(Y_delayed == (j-1)) / (len-delay);if p_x ~= 0 && p_y ~= 0 && p_xy ~= 0transferEntropy = transferEntropy + p_xy * log2(p_xy / (p_x * p_y));endendendend请注意,这只是一个基本的示例,用于说明如何在MATLAB中计算转移熵。

计算排列熵的程序matlab

计算排列熵的程序matlab

计算排列熵的程序Matlab一、介绍1. 计算排列熵是指根据一组数据的排列情况,来衡量数据的乱序程度和信息量的程序。

2. 排列熵广泛应用于信号处理、数据分析、模式识别等领域,有助于分析数据的复杂性和规律性。

二、排列熵的定义1. 排列熵是指一组数据中,不同元素的排列方式的多样性和信息量。

2. 具体计算方法包括计算数据的排列概率分布,并根据概率来计算熵值。

三、Matlab程序编写1. 准备数据a. 使用Matlab语言编写程序前,首先要准备好需要计算排列熵的数据。

b. 数据可以是一维数组、二维矩阵等形式,根据具体需求来确定。

2. 计算排列概率分布a. 利用Matlab的统计工具或者自行编写代码,计算数据的排列概率分布。

b. 可以使用histogram函数来直接得出数据的分布情况,也可以自行编写统计代码。

3. 计算排列熵a. 根据数据的排列概率分布,按照熵的定义来计算排列熵。

b. 可以利用Matlab内置的熵计算函数,也可以自行编写计算熵值的代码。

4. 可视化分析a. 为了更直观地分析排列熵的结果,可以使用Matlab的绘图工具进行可视化分析。

b. 可以绘制排列概率分布的直方图、排列熵随数据量变化的曲线图等。

四、程序示例1. 准备数据a. 假设有一个一维数组data,包含了待分析的数据。

2. 计算排列概率分布a. 使用histogram函数对数组data进行统计分布,得到排列概率分布。

b. 代码示例:```matlabedges = 0:10:100;counts = histcounts(data, edges, 'Normalization','probability');```3. 计算排列熵a. 根据排列概率分布counts,利用熵的定义来计算排列熵。

b. 代码示例:```matlabentropy = -sum(counts.*log2(counts));```4. 可视化分析a. 利用Matlab的绘图函数,绘制排列概率分布的直方图和排列熵随数据量变化的曲线图。

最小熵计算代码实现

最小熵计算代码实现

最小熵计算代码实现
最小熵计算是一种常用的信息论方法,用于衡量一个随机变量的不确定性。

下面是一个简单的Python代码示例,用于计算给定数据集的最小熵。

python.
import math.
def calculate_entropy(data):
# 统计每个类别的出现次数。

class_counts = {}。

for record in data:
label = record[-1]
if label not in class_counts:
class_counts[label] = 0。

class_counts[label] += 1。

# 计算熵。

entropy = 0.0。

total_records = len(data)。

for count in class_counts.values():
probability = count / total_records.
entropy -= probability math.log2(probability)。

return entropy.
上述代码中,`data`是一个包含样本数据的列表,每个样本是
一个特征向量,最后一个元素是该样本的类别标签。

代码首先统计
每个类别的出现次数,然后根据出现次数计算每个类别的概率。


后,使用熵的定义公式计算最小熵。

请注意,这只是一个基本的示例代码,实际应用中可能需要根据具体情况进行适当的修改和优化。

关于香农熵的matlab程序的文章

关于香农熵的matlab程序的文章

关于香农熵的matlab程序的文章香农熵是信息论中的一个重要概念,用于衡量信息的不确定性。

在这篇文章中,我们将介绍如何使用MATLAB编写一个计算香农熵的程序。

首先,让我们来了解一下香农熵的定义。

香农熵是一个非负实数,用于衡量随机变量的不确定性。

对于一个离散随机变量X,其概率分布为P(X),香农熵的计算公式如下: H(X) = -Σ P(x) * log2(P(x))其中,Σ表示对所有可能取值x求和。

现在让我们开始编写MATLAB程序来计算香农熵。

首先,我们需要定义随机变量X的概率分布P(X)。

假设X有n个可能取值x1, x2, ..., xn,并且对应的概率分别为p1,p2, ..., pn。

我们可以使用MATLAB中的向量来表示概率分布。

首先,定义一个向量X来存储所有可能取值:X = [x1, x2, ..., xn]然后,定义一个向量P来存储对应的概率:P = [p1, p2, ..., pn]接下来,我们可以使用循环语句来计算香农熵。

首先,初始化香农熵变量H为0:H = 0然后,使用循环语句对所有可能取值进行遍历,并根据香农熵的计算公式进行累加:for i = 1:length(X)\n H = H - P(i) *log2(P(i));\nend最后,输出计算得到的香农熵值:disp(['The Shannon entropy is: ', num2str(H)])现在,我们已经完成了计算香农熵的MATLAB程序。

让我们来看一个完整的例子。

假设我们有一个随机变量X,其可能取值为1、2、3,并且对应的概率分别为0.4、0.3、0.3。

我们可以使用以下代码来计算香农熵:X = [1, 2, 3];\nP = [0.4, 0.3, 0.3];H = 0;\nfor i = 1:length(X)\n H = H - P(i) * log2(P(i));\nenddisp(['The Shannon entropy is: ', num2str(H)])运行这段代码,我们将得到以下输出:The Shannon entropy is: 1.5219这个结果表示随机变量X的香农熵为1.5219。

MATLAB实现基本尺度熵算法

MATLAB实现基本尺度熵算法

地理与生物信息学院2011 / 2012 学年第二学期实验报告课程名称:医学信号处理实验名称:基本尺度熵算法实现班级学号: 11111111学生姓名: AAAA 指导教师: BB日期:2012 年 6 月一、 实验题目:Matlab 软件处理生物医学数字信号(熵方法2)二、实验要求:基本尺度熵算法实现三、实验内容:能使用Matlab 软件编写、实现基本尺度熵算法并处理生物医学信号。

四、实验过程:对于数据长度为N 的时间序列u :}1:)({N i i u ≤≤,把该时间序列嵌入m 维相空间[19]。

对于每一个)(i u ,取m 个点组成一m 维矢量:)])1((,),(),([)(L m i u L i u i u i X -++= , (1)这里m 是嵌入维数,L 是延迟时间。

取1=L ,那么共有1+-m N 个m 维矢量。

对于每一个m 维矢量,计算出基本尺度BS ,BS 定义为m 维矢量中所有相邻点数据间隔(或大小)的差值方均根值,即1))1()((()(112--+-+=∑-=m j i u j i u i BS m j . (2)根据基本尺度选择符号划分标准为BS ⨯α,然后把每一个m 维矢量转换成m 维矢量符号序列))((i X S i ={ )1(,),1(),(-++m i s i s i s }, A s ∈ (3,2,1,0=A )。

具体的转换如下:)3(:3:2:1:0))((⎪⎪⎩⎪⎪⎨⎧⨯-≤≤<⨯-⨯+>⨯+≤<=++++BS a u u uu BS a u BS a u u BS a u u u i X S k i k i k i k i i这里,1,3,2,1+-=m N i 1,2,1,0-=m k 。

u 代表第i 个m 维矢量的平均值,BS 代表第i 个m 维矢量的基本尺度,符号0,1,2,3 仅仅作为每一个划分区域的记号,具体数值的大小并没有实际的意义。

matlab练习程序(Renyi熵)

matlab练习程序(Renyi熵)

matlab练习程序(Renyi熵)Renyi熵是对通常的⾹农熵的扩展,算是q阶⼴义熵。

公式如下:其中P和⾹农熵公式中的P⼀样,是概率。

当q=1时公式退化为⾹农熵公式。

(如何证明?)有⽤此公式寻找图像最佳⼆值化阈值的。

⾸先定义前景区域A,背景区域B。

那么前景与背景区域像素相应的Renyi熵就如下定义:其中k是当前取的灰度级,P(A)是像素在A区域的概率,P(B)类似。

当然,这⾥说区域,不是指空间区域,是像素灰度级区域。

最后图像Renyi熵求最佳阈值定义如下:这⾥得到的K就是分割阈值。

分割效果如下:原图:分割后:在编程时还需要确定阶数q,我取的是2。

matlab代码如下:clear all;close all;clc;img=imread('lena.jpg');[m n]=size(img);imshow(img)Hist=imhist(img);q=2;H=[];for k=2:256PA=sum(Hist(1:k-1));PB=sum(Hist(k:255));Pa=Hist(1:k-1)/PA;Pb=Hist(k:256)/PB;HA=(1/1-q)*log(sum(Pa.^q));HB=(1/1-q)*log(sum(Pb.^q));H=[H HA+HB];end[junk level]=max(H);imgn=im2bw(mat2gray(img),level/256);figure;imshow(imgn)。

信息熵的matlab程序实例

信息熵的matlab程序实例

求一维序列的信息熵(香浓熵)的matlab程序实例对于一个二维信号,比如灰度图像,灰度值的范围是0-255,因此只要根据像素灰度值(0-255)出现的概率,就可以计算出信息熵。

但是,对于一个一维信号,比如说心电信号,数据值的范围并不是确定的,不会是(0-255)这么确定,如果进行域值变换,使其转换到一个整数范围的话,就会丢失数据,请高手指点,怎么计算。

比如数字信号是x(n),n=1~N(1)先用Hist函数对x(n)的赋值范围进行分块,比如赋值范围在0~10的对应第一块,10~20的第二块,以此类推。

这之前需要对x(n)做一些归一化处理(2)统计每一块的数据个数,并求出相应的概率(3)用信息熵公式求解以上求解方法获得的虽然是近似的信息熵,但是一般认为,这么做是没有问题的求一维序列的信息熵的matlab程序代码如下:(已写成调用的函数形式)测试程序:fs=12000;N=12000;T=1/fs;t=(0:N-1)*T;ff=104;sig=0.5*(1+sin(2*pi*ff*t)).*sin(2*pi*3000*t)+rand(1,length(t));Hx=yyshang(sig,10)%———————求一维离散序列信息熵matlab代码function Hx=yyshang(y,duan)%不以原信号为参考的时间域的信号熵%输入:maxf:原信号的能量谱中能量最大的点%y:待求信息熵的序列%duan:待求信息熵的序列要被分块的块数%Hx:y的信息熵%duan=10;%将序列按duan数等分,如果duan=10,就将序列分为10等份x_min=min(y);x_max=max(y);maxf(1)=abs(x_max-x_min);maxf(2)=x_min;duan_t=1.0/duan;jiange=maxf(1)*duan_t;% for i=1:10% pnum(i)=length(find((y_p>=(i-1)*jiange)&(y_p<i*jiange)));% endpnum(1)=length(find(y<maxf(2)+jiange));for i=2:duan-1pnum(i)=length(find((y>=maxf(2)+(i-1)*jiange)&(y<maxf(2)+i*jiange)));endpnum(duan)=length(find(y>=maxf(2)+(duan-1)*jiange));%sum(pnum)ppnum=pnum/sum(pnum);%每段出现的概率%sum(ppnum)Hx=0;for i=1:duanif ppnum(i)==0Hi=0;elseHi=-ppnum(i)*log2(ppnum(i));endHx=Hx+Hi;endend%----------------扩展阅读:实验一:计算离散信源的熵一、实验设备:1、计算机2、软件:Matlab二、实验目的:1、熟悉离散信源的特点;2、学习仿真离散信源的方法3、学习离散信源平均信息量的计算方法4、熟悉Matlab 编程;三、实验内容:1、写出计算自信息量的Matlab 程序2、写出计算离散信源平均信息量的Matlab 程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[n,m]=size(x);
[X,ps]=mapminmax(x',0.1,1.1);
X=X'; % X为归一化后的数据, n行(品种), m列(指标)
%% 计算第j个指标下,第i个记录占该指标的比重p(i,j)
for i=1:n
for j=1:m
p(i,j)=X(i,j)/sum(X(:,j));
end
d=ones(1,m)-e; % 计算信息熵冗余度
w=d./sum(d); % 求权值w
s=w*p';
s=s'; % 求综合得分
%算法二(第二次课件PPT上的方法)
x=[]; %%手动粘贴输入数据
x=x';
end
end
%% 计算第j个指标的熵值e(j)
k=1/log(n);
for j=1:m
e(j)=-k*sum(p(:,j).*log(p(:,j)));
end
%%计算差异系数g(j)
g=(ones(1,m)-e)./(m-sum(e));
w=g./sum(g); % 求权值w
s=w*p';
s=s'; % 求综合得分
%%算法一(熵值法确定权重算法及Matlab实现-/thread-452528-1-1.html)
x=[]; %%手动粘贴输入数据
[n,m]=size(x);
[X,ps]=mapminmax(x',0.1,1.1);
X=X'; % X为归一化后的数据, n行(品种), m列(指标)
%% 计算第j个指标下,第i个记录占该指标的比重p(i,j)
for i=1:n
for j=1:m
p(i,j)=X(i,j)/sum(X(:,j));
end
end
%% 计算第j个指标的熵值e(j)

k=1/log(n);
for j=1:m
e(j)=-k*sum(p(:,j).*log(p(:,j)));
相关文档
最新文档