搜索内容 搜索用户

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

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
 仅供参考 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*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))复制代码

123MATLAB呀 发表于 2021-11-25 10:57:37
 20141303 发表于 2021-11-25 10:13 仅供参考 只有网格，没有图，这是为什么呢

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 我知道啊，可是你这式子计算出来就是这个结果，不懂吗！！！ 让你把要求解的原始问题放上来这么难吗？ ... 就是想出这个图

WarnerChang 发表于 2021-11-25 16:10:05
 123MATLAB呀 发表于 2021-11-25 15:55 就是想出这个图 之前的帖子不是画出来了吗

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))
 您需要登录后才可以回帖 登录 | 注册 本版积分规则 回帖后跳转到最后一页