提交 68141969 编写于 作者: Peacoor Zomboss's avatar Peacoor Zomboss

Add a very simple Energy Entropy example which I'm not clearly understand

上级 d7a7645a
# 能量熵
由于对能量熵不是非常理解,所以这个代码仅供参考
如果你对这方面比我更了解,请提出Issue告知,谢谢
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/// @brief 计算IMF分量组的能量熵
/// @param X 输入IMF分量,为二维数组
/// @param N IMF分量的长度
/// @param K 每个IMF分量的长度
/// @return 所有IMF分量的能量熵之和
double energy_entropy(double **X, unsigned N, unsigned K)
{
double *E_i = malloc(sizeof(double) * N);
double E = 0;
for (int i = 0; i < N; i++) {
E_i[i] = 0;
for (int j = 0; j < K; j++)
E_i[i] += X[i][j] * X[i][j];
E += E_i[i];
}
double HE = 0;
for (int i = 0; i < N; i++) {
double Pi = E_i[i] / E;
HE -= Pi * log10(Pi);
}
free(E_i);
return HE;
}
#define IMF_COUNT 10
#define IMF_PARTITION 5
int main()
{
double *IMFs[IMF_COUNT];
for (int i = 0; i < IMF_COUNT; i++) {
IMFs[i] = malloc(sizeof(double) * IMF_PARTITION);
for (int j = 0; j < IMF_PARTITION; j++)
IMFs[i][j] = i * IMF_PARTITION + j;
}
double HE = energy_entropy(IMFs, IMF_COUNT, IMF_PARTITION);
for (int i = 0; i < IMF_COUNT; i++)
free(IMFs[i]);
printf("%.10f\n", HE);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册