正如您在下面的最后几行中看到的,我试图将我的函数存储在多个变量上,因为它变得相当难看。但是,这样做会产生如下所示的错误。
解决此问题的方法是手动替换
k
和 kp
,但这正是我想要避免的。任何帮助,将不胜感激。谢谢!
clc
clear
hbar = 1.055e-34;
mo = 9.1095e-31;
q = 1.602e-19;
kb=1.38065e-23;
T=298;
Ef = -0.1*q; % -100meV in units Joules
V0 = 1*q;
L = 1e-9;
k = @(E) (2*mo*E/hbar.^2)^.5;
kp = @(E) (2*mo*(V0-E)/hbar.^2)^.5;
fun = @(E) (exp(-2*kp*L) .* ((16*k.^2 .* kp.^2) ./ ((k.^2 + kp.^2).^2))) .* exp(-E./(kb*T));
Q = integral(fun,0,inf);
以下错误
Undefined operator '*' for input arguments of type 'function_handle'.
Error in @(E)(exp(-2*kp*L).*((16*k.^2.*kp.^2)./((k.^2+kp.^2).^2))).*exp(-E./(kb*T))
Error in integralCalc/iterateScalarValued (line 314)
fx = FUN(t);
Error in integralCalc/vadapt (line 132)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
Error in integralCalc (line 83)
[q,errbnd] = vadapt(@AToInfInvTransform,interval);
Error in integral (line 88)
Q = integralCalc(fun,a,b,opstruct);
Error in PS3_2 (line 17)
Q = integral(fun,0,inf);
在这里使用这个
k = @(E) (2.*mo.*E./hbar.^2).^.5;
kp = @(E) (2.*mo.*(V0-E)./hbar.^2).^.5;
fun = @(E) (exp(-2*kp(E)*L).*((16*k(E).^2.*kp(E).^2)./((k(E).^2+kp(E).^2).^2))).*exp(-E./(kb*T));
Q = integral(fun,0,inf);
我认为你需要通过论证
E
,那么你确定kb*T
是正确的吗?也许kp(E)*T
?然后,您忘记了 .
是 k
和 kp
的 sqrt,或者如果它不是 sqrt,则该点位于电源符号的错误一侧。