[已解决] 求信息熵出现“下标索引必须为正整数类型或逻辑类型”,如何更改?

[复制链接]
123MATLAB呀 发表于 2021-11-24 20:32:06
出现了下标索引必须为正整数类型或逻辑类型,请问如何更改呢
部分程序如下:
P=log10(Aatt);
H(P)=-P*log2(P)-(1-P)*log2(1-P);

最佳答案


WarnerChang 发表于 2021-11-25 16:29:13
123MATLAB呀 发表于 2021-11-25 16:22
x我改好了,就是p0了

有矩阵的地方就有可能需要点运算

c=3*10^8;
lemdal=1550E-12;
ommiga=lemdal*c;
syms z;
z=90:1:150;
K=exp(-(z-125)./6);
Vin=100.*K;
me=9.3E-31;
e=1.6E-19;
chi=45/180*pi;
q0=4.7E3;alpha=1.6E-7;
H=(z-105)./10;
Ne=sqrt(q0/alpha).*exp(1/2.*(1-H-1./cos(chi).*exp(-H)));
epsilong0=8.85E-12;
ommiga_p=sqrt((Ne.'*e^2)./(me*epsilong0));
elta=sqrt(1-ommiga_p.^2./(ommiga.^2+1i*ommiga.*Vin));
k=imag(elta);
Aref=lemdal.*k;

Aabs=sqrt(-1/2.*(1-ommiga_p.^2./(ommiga.^2+Vin.^2))+1/2.*sqrt((1-ommiga_p.^2./(ommiga.^2+Vin.^2)).^2+(Vin./ommiga.*(ommiga_p.^2./(ommiga.^2+Vin.^2))).^2));
fun=@(z)(Aref+Aabs);
Aatt=integral(fun,90,150,'ArrayValued',true);
vpa(Aatt);

P=log10(Aatt);
H=-P.*log2(P)-(1-P).*log2(1-P);
x=2^(H./(1-P));
p0=(x.*(1-P)-P)./((1+x).*(1-P));
p1=1-p0;
C=-(p0+P.*p1).*log2(p0+P.*p1)-(1-P).*p1.*log2((1-P).*p1)-p1.*H;

[z1,Ne1] = meshgrid(z,Ne);
surf(z1,Ne1,imag(C))

14 条回复


20141303 发表于 2021-11-24 21:28:37
代码不全,仅供参考,左侧对变量H赋值时,P必须为正整数

123MATLAB呀 发表于 2021-11-25 09:38:51
20141303 发表于 2021-11-24 21:28
代码不全,仅供参考,左侧对变量H赋值时,P必须为正整数

完整代码是这样的
c=3*10^8;
lemdal=1550E-12;
ommiga=lemdal*c;
syms z;
z=90:1:150;
K=exp(-(z-125)/6);
Vin=100*K;
me=9.3E-31;
e=1.6E-19;
chi=45/180*pi;
q0=4.7E3;alpha=1.6E-7;
H=(z-105)./10;
Ne=sqrt(q0/alpha).*exp(1/2.*(1-H-1./cos(chi).*exp(-H)));
epsilong0=8.85E-12;
ommiga_p=sqrt((Ne.'*e^2)./(me*epsilong0));
elta=sqrt(1-ommiga_p.^2./(ommiga.^2+i*ommiga*Vin));
k=imag(elta);
Aref=lemdal*k;

Aabs=sqrt(-1/2.*(1-ommiga_p.^2./(ommiga.^2+Vin.^2))+1/2.*sqrt((1-ommiga_p.^2./(ommiga.^2+Vin.^2)).^2+(Vin./ommiga.*(ommiga_p.^2./(ommiga.^2+Vin.^2))).^2));  
fun=@(z)(Aref+Aabs);
Aatt=integral(fun,90,150,'ArrayValued',true);
vpa(Aatt);  

P=log10(Aatt);
H(P)=-P*log2(P)-(1-P)*log2(1-P);
x=2^(H(P)/(1-P));
p0=(x*(1-P)-P)/((1+x)*(1-P));
p1=1-p0;
C=-(p0+P*p1)*log2(p0+P*p1)-(1-P)*p1*log2((1-P)*p1)-p1*H(P);

[z1,Ne1] = meshgrid(z,Ne);  
surf(z1,Ne1,C)

20141303 发表于 2021-11-25 10:13:31
仅供参考
  1. c=3*10^8;
  2. lemdal=1550E-12;
  3. ommiga=lemdal*c;
  4. syms z;
  5. z=90:1:150;
  6. K=exp(-(z-125)/6);
  7. Vin=100*K;
  8. me=9.3E-31;
  9. e=1.6E-19;
  10. chi=45/180*pi;
  11. q0=4.7E3;alpha=1.6E-7;
  12. H=(z-105)./10;
  13. Ne=sqrt(q0/alpha).*exp(1/2.*(1-H-1./cos(chi).*exp(-H)));
  14. epsilong0=8.85E-12;
  15. ommiga_p=sqrt((Ne.'*e^2)./(me*epsilong0));
  16. elta=sqrt(1-ommiga_p.^2./(ommiga.^2+i*ommiga*Vin));
  17. k=imag(elta);
  18. Aref=lemdal*k;

  19. Aabs=sqrt(-1/2.*(1-ommiga_p.^2./(ommiga.^2+Vin.^2))+1/2.*sqrt((1-ommiga_p.^2./(ommiga.^2+Vin.^2)).^2+(Vin./ommiga.*(ommiga_p.^2./(ommiga.^2+Vin.^2))).^2));  
  20. fun=@(z)(Aref+Aabs);
  21. Aatt=integral(fun,90,150,'ArrayValued',true);
  22. vpa(Aatt);  

  23. P=log10(Aatt);
  24. H=-P*log2(P)-(1-P)*log2(1-P);
  25. x=2^(H/(1-P));
  26. p0=(x*(1-P)-P)/((1+x)*(1-P));
  27. p1=1-p0;
  28. C=-(p0+P*p1)*log2(p0+P*p1)-(1-P)*p1*log2((1-P)*p1)-p1*H;

  29. [z1,Ne1] = meshgrid(z,Ne);  
  30. surf(z1,Ne1,imag(C))
复制代码

123MATLAB呀 发表于 2021-11-25 10:57:37

只有网格,没有图,这是为什么呢
图片.PNG

WarnerChang 发表于 2021-11-25 14:06:52
123MATLAB呀 发表于 2021-11-25 10:57
只有网格,没有图,这是为什么呢

你计算出来的C为NaN,画图当然是空白了

123MATLAB呀 发表于 2021-11-25 15:34:35
WarnerChang 发表于 2021-11-25 14:06
你计算出来的C为NaN,画图当然是空白了

z和Ne、Aatt都是有值的,这个怎么修改一下呢

WarnerChang 发表于 2021-11-25 15:36:59
123MATLAB呀 发表于 2021-11-25 15:34
z和Ne、Aatt都是有值的,这个怎么修改一下呢

这是你计算出来的结果,我也不知道咋修改啊,你要计算的问题是啥?

123MATLAB呀 发表于 2021-11-25 15:41:50
WarnerChang 发表于 2021-11-25 15:36
这是你计算出来的结果,我也不知道咋修改啊,你要计算的问题是啥?

想看一下C随z和Ne的变化,出个图

WarnerChang 发表于 2021-11-25 15:45:52
123MATLAB呀 发表于 2021-11-25 15:41
想看一下C随z和Ne的变化,出个图

我知道啊,可是你这式子计算出来就是这个结果,不懂吗!!!

让你把要求解的原始问题放上来这么难吗?

123MATLAB呀 发表于 2021-11-25 15:55:07
WarnerChang 发表于 2021-11-25 15:45
我知道啊,可是你这式子计算出来就是这个结果,不懂吗!!!

让你把要求解的原始问题放上来这么难吗? ...

就是想出这个图
222.PNG
111.PNG

WarnerChang 发表于 2021-11-25 16:10:05

之前的帖子不是画出来了吗

123MATLAB呀 发表于 2021-11-25 16:16:03
WarnerChang 发表于 2021-11-25 16:10
之前的帖子不是画出来了吗

不是一个图,那个和这个的参数,公式都不一样,这个x,p0,p1,C都是NaN,x为什么是 NaN呢

123MATLAB呀 发表于 2021-11-25 16:22:37
WarnerChang 发表于 2021-11-25 16:10
之前的帖子不是画出来了吗

x我改好了,就是p0了

WarnerChang 发表于 2021-11-25 16:29:13
123MATLAB呀 发表于 2021-11-25 16:22
x我改好了,就是p0了

有矩阵的地方就有可能需要点运算

c=3*10^8;
lemdal=1550E-12;
ommiga=lemdal*c;
syms z;
z=90:1:150;
K=exp(-(z-125)./6);
Vin=100.*K;
me=9.3E-31;
e=1.6E-19;
chi=45/180*pi;
q0=4.7E3;alpha=1.6E-7;
H=(z-105)./10;
Ne=sqrt(q0/alpha).*exp(1/2.*(1-H-1./cos(chi).*exp(-H)));
epsilong0=8.85E-12;
ommiga_p=sqrt((Ne.'*e^2)./(me*epsilong0));
elta=sqrt(1-ommiga_p.^2./(ommiga.^2+1i*ommiga.*Vin));
k=imag(elta);
Aref=lemdal.*k;

Aabs=sqrt(-1/2.*(1-ommiga_p.^2./(ommiga.^2+Vin.^2))+1/2.*sqrt((1-ommiga_p.^2./(ommiga.^2+Vin.^2)).^2+(Vin./ommiga.*(ommiga_p.^2./(ommiga.^2+Vin.^2))).^2));
fun=@(z)(Aref+Aabs);
Aatt=integral(fun,90,150,'ArrayValued',true);
vpa(Aatt);

P=log10(Aatt);
H=-P.*log2(P)-(1-P).*log2(1-P);
x=2^(H./(1-P));
p0=(x.*(1-P)-P)./((1+x).*(1-P));
p1=1-p0;
C=-(p0+P.*p1).*log2(p0+P.*p1)-(1-P).*p1.*log2((1-P).*p1)-p1.*H;

[z1,Ne1] = meshgrid(z,Ne);
surf(z1,Ne1,imag(C))
回复此楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表