Matlab-一维数值积分,函数存储在多个变量中

问题描述 投票:0回答:1

正如您在下面的最后几行中看到的,我试图将我的函数存储在多个变量上,因为它变得相当难看。但是,这样做会产生如下所示的错误。

解决此问题的方法是手动替换

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);
matlab numeric numerical-integration
1个回答
0
投票

在这里使用这个

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,则该点位于电源符号的错误一侧。

© www.soinside.com 2019 - 2024. All rights reserved.