二变量积分matlab

计算科学 计算物理学 一体化 量子力学
2021-12-10 03:18:03

我正在尝试解决氦原子量子力学中的物理问题,该解决方案需要对 2 个变量进行数值积分。但是,当我尝试运行下一个代码时

e = 1.6e-19;
eps0 = 8.85e-12;
a0 = 0.53e-10;
c = e^2/(4*pi*eps0);
psi1 =@(r) ((2^1.5)/(sqrt(pi)*a0^1.5))*exp(-2*r/a0);
psi2 =@(r) ((2^1.5)/(4*sqrt(2*pi)*a0^1.5))*(2-r/a0)*exp(-r/a0);
I =@(r1,r2) c*(psi2(r1).*psi1(r2).*(1./abs(r1-r2)).*psi2(r1).*psi1(r2));
J =@(r1,r2) c*(psi2(r1).*psi1(r2).*(1./abs(r1-r2)).*psi1(r1).*psi2et(r2));
integral2(I,0,inf,0,inf)
integral2(J,0,inf,0,inf)

matlab 说

Error using  * 
Inner matrix dimensions must agree.

Error in qmex7>@(r)((2^1.5)/(4*sqrt(2*pi)*a0^1.5))*(2-r/a0)*exp(-r/a0)

Error in qmex7>@(r1,r2)c*(psi2(r1).*psi1(r2).*(1./abs(r1-r2)).*psi2(r1).*psi1(r2))

Error in integral2Calc>@(y)fun(xi*ones(size(y)),y) (line 18)
    @(y)fun(xi*ones(size(y)),y),y1i,y2i,opstruct.integralOptions), ...

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 integral2Calc>@(xi,y1i,y2i)integralCalc(@(y)fun(xi*ones(size(y)),y),y1i,y2i,opstruct.integralOptions)

Error in integral2Calc>@(x)arrayfun(@(xi,y1i,y2i)integralCalc(@(y)fun(xi*ones(size(y)),y),y1i,y2i,opstruct.integralOptions),x,ymin(x),ymax(x)) (line 17)
innerintegral = @(x)arrayfun(@(xi,y1i,y2i)integralCalc( ...

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 integral2Calc>integral2i (line 20)
[q,errbnd] = integralCalc(innerintegral,xmin,xmax,opstruct.integralOptions);

Error in integral2Calc (line 7)
    [q,errbnd] = integral2i(fun,xmin,xmax,ymin,ymax,optionstruct);

Error in integral2 (line 106)
    Q = integral2Calc(fun,xmin,xmax,yminfun,ymaxfun,opstruct);

知道为什么吗?

1个回答

错误消息是因为您忘记了.before *before expin psi2

一旦你解决了这个问题,MATLAB 将不会对你除以abs(r1-r2)inI和的奇点感到高兴J例如,如果(1./abs(r1-r2))更改为(1./(abs(r1-r2) + 1e-20)),MATLAB 将为 生成 0 的答案integral2(I,0,inf,0,inf)我会让你弄清楚如何正确解决这个问题。

你有可怕的缩放到最大值,通过a0 = 0.53e-10在论点的分母中exp因此,例如,psi1(1e-8) = 5.39e-149和 只会随着参数的增加而变小。尽管有一个乘法因子(2^1.5)/(sqrt(pi)*a0^1.5) = 4.14e15,但它被一个大负数的指数淹没了。所有真正的动作都发生在比 更小的参数值上1e-8例如,psi1(1e-10) = 9.60e+13, psi1(1e-9) = 0.17. 因此,我认为您需要进行一些重新制定才能使积分达到可以以数字合理的方式评估的程度。