查看: 116|回复: 2|关注: 0

[已答复] For循环赋值报错:无法执行赋值,因为左侧的索引与右侧的大小不兼容

[复制链接]

入门

50 麦片

财富积分


50500


4

主题

7

帖子

0

最佳答案
发表于 3 天前 | 显示全部楼层 |阅读模式
单独调用主函数计算函数值时,并不会报错。但是,当调用主函数作为被积函数的一部分,来计算数值积分时,就会报错,报错信息如下:

%--------------------------------------------------------------------------------------------------------------------------------------------------------
无法执行赋值,因为左侧的索引与右侧的大小不兼容。

出错 P_tunnel_fun_2 (line 50)
    K(i)=k(X(i));

出错 JR_tunnel_cal_2>@(En)P_tunnel_fun_2(En).*log((1+exp(q*(Vth-En)./(kB*T)))./(1+exp(-q*En./(kB*T)))) (line 39)
yBIntegral = @(En) P_tunnel_fun_2(En).*log((1+exp(q*(Vth-En)./(kB*T)))./(1+exp(-q*En./(kB*T))));

%--------------------------------------------------------------------------------------------------------------------------------------------------------

请问哪里出了问题,如何解决?

以下是程序代码:
主函数
  1. function P = P_tunnel_fun_2(En)

  2. format long;

  3. global Pscale1 Pscale2 q c0 c_AlN c_AlGaN Vth d1 d2 Phin mm mAlGaN mAlN mGaN N h;


  4. %-------构建能带分布(V=Vth)-----------
  5. %能带信息计算
  6. detaEc_AlN_GaN = 0.7*(6.14-3.43);
  7. detaEc_AlGaN_AlN = 0.7*(6.14-3.87);
  8. Polar_AlGaN_AlN =(8.794e13*Pscale1-3.4721e13*Pscale2);
  9. Polar_AlN_GaN =(8.794e13*Pscale1-2.122E+13);
  10. E_AlN = q*Polar_AlN_GaN/(0.01*c0*c_AlN); %正电场的方向是由阴极指向阳极
  11. E_AlGaN = (E_AlN*0.01*c0*c_AlN-Polar_AlGaN_AlN*q)/(0.01*c0*c_AlGaN);
  12. Phi_AlN = E_AlN*d2*0.0000001; %正电势表明是阳级侧导带高于阴极 侧
  13. Phi_AlGaN = E_AlGaN*d1*0.0000001;
  14. Phis = Phin+detaEc_AlN_GaN+Phi_AlN-detaEc_AlGaN_AlN+Phi_AlGaN+Vth;

  15. %金属能带分布
  16. Ec_metal=@(x) (Phin+Vth).*(x<=0);
  17. %AlGaN能带分布
  18. Ec_AlGaN=@(x) (Phis-(x.*E_AlGaN*0.0000001)).*(x>0 & x<d1);
  19. %AlN能带分布
  20. Ec_AlN=@(x) (Phis-Phi_AlGaN+detaEc_AlGaN_AlN-(x-d1).*E_AlN*0.0000001).*(x>=d1 & x<(d1+d2));
  21. %GaN沟道能带分布
  22. Ec_GaN=@(x)  (Phin+Vth).*(x>=(d1+d2));

  23. %Ec=@(x) Ec_metal+Ec_AlGaN+Ec_AlN+Ec_GaN;

  24. %总体能带分布,x为距离肖特基接触的长度
  25. Ec=@(x) (0+(Phis-(x.*E_AlGaN*0.0000001)).*(x>0 & x<d1)+(Phis-Phi_AlGaN+detaEc_AlGaN_AlN-(x-d1).*E_AlN*0.0000001).*(x>=d1 & x<(d1+d2))+(Phin+Vth).*(x>=(d1+d2)));


  26. %-----------Transfer matrix method 求隧穿概率--------------
  27. %沿x方向,电子有效质量与x长度的关系
  28. m=@(x) mm.*(x<=0)+mAlGaN.*(x>0 & x<d1)+mAlN.*(x>=d1 & x<=(d1+d2))+mGaN.*(x>(d1+d2));
  29. %沿x方向,波矢与x长度的关系
  30. k=@(x) sqrt(2*q*m(x).*(En-Ec(x)))./(h/(2*pi));

  31. %沿x方向,平均切分异质结能带为N个区域,每个区域的宽度为(d1+d2)/(N-2)
  32. X=linspace(-0.5*(d1+d2)/(N-2),d1+d2+0.5*(d1+d2)/(N-2),N);
  33. [b,n]=size(X);

  34. %i=1是金属区域,i=n是GaN区域,总共n个区域
  35. for i=1:n
  36.     %定义每个区域的电子有效质量
  37.     M(i)=m(X(i));
  38.     %定义每个区域的波矢
  39.     K(i)=k(X(i));
  40. end

  41. for i=1:n-1
  42.     %定义参数Dm
  43.     Dm(i)=(M(i).*K(i+1))./(M(i+1).*K(i));
  44. end

  45. for i=1:n-1
  46.     %定义区域转移矩阵D
  47.     D{i}=[(1+Dm(i))./2,(1-Dm(i))./2;(1-Dm(i))./2,(1+Dm(i))./2];
  48. end

  49. for i=2:n-1
  50.     %定义界面转移矩阵I
  51.     I{i}=[exp(-1j.*K(i).*1e-9*(d1+d2)/(N-2)),0;0,exp(1j.*K(i).*1e-9*(d1+d2)/(N-2))];
  52. end
  53. %定义总转移矩阵Matrix
  54. Matrix=D{1};
  55. for i=2:n-1
  56. Matrix=Matrix*I{i}*D{i};
  57. end

  58. %计算隧穿概率
  59. M21=Matrix(2,1);
  60. M11=Matrix(1,1);
  61. P=1-(abs(M21).^2)/(abs(M11).^2);
  62. end
复制代码
计算程序
  1. clear;clc;
  2. format long;

  3. global Pscale1 Pscale2 q c0 c_AlN c_AlGaN Vth d1 d2 Phin mm mAlGaN mAlN mGaN N h T kB;
  4. Pscale1 =0.17; %AlN极化系数
  5. Pscale2 =0.75; %AlGaN极化系数
  6. q = 1.6e-19;
  7. c0 = 8.85e-12;
  8. c_AlN = 8.5;
  9. c_AlGaN = 8.8;
  10. Vth=-0.1;
  11. d1=5; %单位nm
  12. d2=0.8; %单位nm
  13. Phin=0.2;%平带时,GaN导带距费米能级能量
  14. mm=0.1*9.11e-31;%金属有效质量
  15. mAlGaN=0.27*9.11e-31;%AlGaN有效质量
  16. mGaN=0.22*9.11e-31;%GaN有效质量
  17. mAlN=0.4*9.11e-31;%AlN有效质量
  18. N=1000;%能带分区数量
  19. h=6.63e-34;
  20. T=300;
  21. kB=1.38e-23;


  22. yA=q*mm*kB*T/(2*pi^2*(h/(2*pi))^3);
  23. yBIntegral = @(En) P_tunnel_fun_2(En).*log((1+exp(q*(Vth-En)./(kB*T)))./(1+exp(-q*En./(kB*T))));
  24. yB = integral(yBIntegral,0,+inf);
  25. y=yA*yB;
复制代码


回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

7

主题

1479

帖子

316

最佳答案
  • 关注者: 75
发表于 3 天前 | 显示全部楼层
主函数改成以下代码试试
  1. clear;clc;
  2. format long;

  3. global Pscale1 Pscale2 q c0 c_AlN c_AlGaN Vth d1 d2 Phin mm mAlGaN mAlN mGaN N h T kB;
  4. Pscale1 =0.17; %AlN极化系数
  5. Pscale2 =0.75; %AlGaN极化系数
  6. q = 1.6e-19;
  7. c0 = 8.85e-12;
  8. c_AlN = 8.5;
  9. c_AlGaN = 8.8;
  10. Vth=-0.1;
  11. d1=5; %单位nm
  12. d2=0.8; %单位nm
  13. Phin=0.2;%平带时,GaN导带距费米能级能量
  14. mm=0.1*9.11e-31;%金属有效质量
  15. mAlGaN=0.27*9.11e-31;%AlGaN有效质量
  16. mGaN=0.22*9.11e-31;%GaN有效质量
  17. mAlN=0.4*9.11e-31;%AlN有效质量
  18. N=1000;%能带分区数量
  19. h=6.63e-34;
  20. T=300;
  21. kB=1.38e-23;


  22. yA=q*mm*kB*T/(2*pi^2*(h/(2*pi))^3);
  23. syms En
  24. yBIntegral =  P_tunnel_fun_2(En).*log((1+exp(q*(Vth-En)./(kB*T)))./(1+exp(-q*En./(kB*T))));
  25. fun=matlabFunction(yBIntegral);
  26. yB = integral(fun,0,+inf);     
  27. y=yA*yB;
复制代码
回复此楼 已获打赏: 0 积分

举报

入门

50 麦片

财富积分


50500


4

主题

7

帖子

0

最佳答案
 楼主| 发表于 3 天前 | 显示全部楼层
20141303 发表于 2020-7-31 08:38
主函数改成以下代码试试

跑不动,等半天一直没反应
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表