Matlab 数值积分后显示的值范围不正确

Matlab 数值积分后显示的值范围不正确,matlab,plot,numerical-methods,axis-labels,numerical-integration,Matlab,Plot,Numerical Methods,Axis Labels,Numerical Integration,我试图用MATLAB绘制以下方程的误差概率,我想用命令trapz进行数值积分,问题是我得到了一个精细的图形,但是y轴上的值是错误的,整个曲线应该在0和1.2之间,但它在0.492和0.5之间!!谁能告诉我代码中有什么错误,或者给我一个提示?我真的需要帮助。以下是我需要绘制的公式(使用Maketex编写): 这是我的代码: close all; clear;clc; Nr=2;Ns=2; lmda1=.3; lmda2=.3; lmdas=.1; lmdar=.1; z= 0.0001:1:40

我试图用MATLAB绘制以下方程的误差概率,我想用命令
trapz
进行数值积分,问题是我得到了一个精细的图形,但是y轴上的值是错误的,整个曲线应该在0和1.2之间,但它在0.492和0.5之间!!谁能告诉我代码中有什么错误,或者给我一个提示?我真的需要帮助。以下是我需要绘制的公式(使用Maketex编写):

这是我的代码:

close all; clear;clc;
Nr=2;Ns=2;
lmda1=.3; lmda2=.3;
lmdas=.1; lmdar=.1;
z= 0.0001:1:40;
k1=2;k2=2;
kr=2.*Nr;ks=2.*Ns;
ax=0;
avg=0.0001:1:40;
em=1;
ch=2;
for alp=1-k1.*.5:ch
for beta=1-k2.*.5:ch
    for eta=0:ch
        for N=0:ch
            for M=0:ch
                for Q=0:ch
                    for id=0:eta
                        for jd=0:N
                            for A=0:N-jd
                                %
                                up=.25.*exp(-lmda1./2).*(lmda1./2).^(alp).*(lmda2.^2./(4)).^(beta./2).*exp(-lmda2./2).*(lmda1./(4.*em.*avg)).^eta.*(lmda2./(4.*em.*avg)).^N.*exp(-lmdas.*Ns.*.5).*.25.^(ks.*.25-.5).*exp(-lmdar.*Nr.*.5).*.25.^(kr.*.25-.5).*(Ns.*lmdas.*.25).^M.*(Nr.*lmdar.*.25).^Q;
                                cy=up.*(1./(factorial(eta).*factorial(N).*factorial(M).*factorial(Q).*gamma(eta+alp+1).*gamma(N+beta+1).*gamma(M+ks.*.5).*gamma(Q+kr.*.5)));
                                cj=cy.*(factorial(eta)./(factorial(id).*factorial(eta-id))).*(factorial(N)./(factorial(jd).*factorial(N-jd))).*gamma(M+id+jd+ks.*.5);
                                f1=(cj.*(factorial(N-jd)./(factorial(A).*factorial(N-jd-A))).*em.^A.*(((em+1).^(N-jd-A))).*gamma(kr.*.5+Q+A));
                                f2=f1.*(2.^(kr.*.5+Q+A)).*avg.^(eta+N);
                                ax=ax+f2;
                            end
                        end
                    end
                end
            end
        end
    end
end
end
 q2=2;n2=2;N2=1;eta2=1;
fun2 = exp(-z.*avg.*(1+1.5./avg)).*z.^(eta2+N2-1./2).*(1./((1+z).^(q2).*(1./2+z).^(n2)));
 out= trapz(z,fun2);
b=.5.*(1-ax.*(1./sqrt(pi)).*out.*avg.^(1./2));
plot(avg,b);grid;

代码中有一些错误的表达式。我还怀疑你应该计算循环中的积分。更重要的是,您的积分网格
z
看起来太粗糙了。以下代码给出了P(e)中第二项的
0~1.2
范围

我不知道为什么我需要乘以
dz
两次,但这给了我正确的值范围。但我认为这和向量值有关

>> [min(.5/pi^.5 *ax),max(.5/pi^.5 *ax)]

ans =

    0.0002    1.2241

看到你如何说形状是正确的,但值是错误的,你似乎有一个标准化的问题(即,乘以某个错误的常数)。你可以“作弊”,只要把
plot(avg,b)
改成
plot(avg,(b-min(b))/(max(b)-min(b))*1.2)
。@Dev iL我不能在这种事情上作弊!!这很重要。我知道错误很小,但我真的尝试了一切,我找不到错误。积分是总和的一部分,还是在西格玛项之外,使用了一组独立的参数?@Yvon我尝试了两者,但我认为它应该在内部,因为它包含eta和N以及在for循环中定义的其他变量;它不应该是上标,甚至可以完全省略。这是写trapz的另一种方式吗?
>> [min(.5/pi^.5 *ax),max(.5/pi^.5 *ax)]

ans =

    0.0002    1.2241