本帖最后由 mwwww 于 2022-2-21 17:14 编辑
新手小白,在用fminsearch时出现问题- syms t S s z ;
- assume(t > 0 );
- assume(S > 0 );
- assume(s > 0 ); %三个参数范围都是大于0
- c = 3*10^8 ; %真空中的光速(m/s)
- K = 1.380649*10^-23 ; %玻耳兹曼常数(j/k)
- T = 300 ; %室温(k)
- W = 280 ; %样品厚度(um)
- N_i = 1.5*10^17 ; %本征载流子浓度
- N_A = 1.5*10^16 ; %掺杂浓度(cm^-3)
- h = 6.62607015*10^-34; %普朗克常量(j.s)
- N_sic = 100 ; %折射率
- R_f = 0 ; %前面反射率
- R_b = 0 ; %后面反射率
- Q = 0.5 ; %探测器的量子效率
- T_1 = 100 ; %滤光器1的透射光谱
- T_2 = 110 ; %滤光器2的透射光谱
- T_3 = 120 ; %滤光器3的透射光谱
- F = 2*10^17 ; %光通量(cm^2/s)
- D = 26.92 ; %扩散系数(cm^2/s)
- lamda_1 = 910 ; %激光器的波长(nm)
- a_1 = 272 ; %吸收系数(cm^-1)
- lamda_2 = 930 ; %发射波长(nm)
- a_2 = 210 ; %碳化硅的吸收系数(cm^-1)
- Phi_2e = 200;
- Phi_3e = 250;
- Phi_4e = 300; %实验测得的PL强度
- L = (D*t)^0.5 ; %扩散长度
- m = (S*L)/D;
- M = (s*L)/D;
- C_1 = -a_1*F*t/(a_1^2*D*t-1)*(-exp(W/L)*(m+a_1*L)*(M+1)+exp(-a_1*W)*(m-1)*(M-a_1*L))/(exp(W/L)*(m+1)*(M+1)-exp(-W/L)*(m-1)*(M-1));
- C_2 = -a_1*F*t/(a_1^2*D*t-1)*(-exp(-W/L)*(m+a_1*L)*(M-1)-exp(-a_1*W)*(m+1)*(M-a_1*L))/(exp(W/L)*(m+1)*(M+1)-exp(-W/L)*(m-1)*(M-1));
- n(z) = C_1*exp(-z/L)+C_2*exp(z/L)-a_1*F*t/(a_1^2*D*t-1)*exp(-a_1*z); %载流子浓度
- f_e2(z) = (1-R_f) *(exp(-a_2*z)+R_b*exp(-a_2*(2*W-z)))/(1-R_f*R_b*exp(-2*a_2*W));%载流子逃逸率
- r_2 = (N_sic^2/N_i^2)*a_2*2*c/lamda_2^4*exp(-h*c/(lamda_2*K*T))*n(z)*N_A; %载流子产生率
- Phi_2 = r_2.*f_e2(z);
- B = int(Phi_2,z,0,W);
- Phi_2d = Q*T_1*B; %考虑探测器的量子效率和滤光片通量后的pl
- Phi_3d = Q*T_2*B;
- Phi_4d = Q*T_3*B;
复制代码
到这都没有问题
- fun =@(t,S,s)(Phi_2d-Phi_2e).^2+(Phi_3d-Phi_3e).^2+(Phi_4d-Phi_4e).^2;
- V = @(x)fun(x(1),x(2),x(3));
- x0 = [0 0 0];
- [x,fval] = fminsearch(V,x0)
复制代码
运行fminsearch时出现问题,
从 sym 转换为 double 时出现以下错误:
Unable to convert expression into double array.
出错 fminsearch (line 200)
fv(:,1) = funfcn(x,varargin{:});
对matlab都不是太懂,都是看视频学着写的程序,请求大佬指教!
|