我写了一个定积分用来表示高斯形状的电子团和高斯形状的激光团碰撞后的反应产额(这句话是物理内容可以跳过不看),为什么我把积分区域的X部分人为均匀划分后,得到的结果与不划分的结果相差很大啊,而且划分的区间数不一样,结果也都差别很大,按道理应该是随着人为均匀划分区间数越多,结果越接近一个值的?难道是划分的还不够细么?求各位指导一下matlab初学者。另外用了mathematica也是这样的结果。蓝线实验值,红线是定积分结算结果。第一张图的红线是人为平均将X区间分成100的子区间分别进行定积分然后相加,并且,第二张图的红线是不进行任何分区间操作,直接积分的结果。


ex=312/1000;
ez=4000/1000;
lx=32/1000;
lz=40000/1000;
theta=148*pi/180;
lambda=10.64/1000;
M2=1.068;
c=3*10^14/1000;
beta=1;
datanum=7;
expdata = [
-sqrt((703.42 - 816)^2 + (583.65 - 730)^2)/1000*6, 173384/280000; ...
-sqrt((741.80 - 816)^2 + (634.12 - 730)^2)/1000*6, 228568/280000; ...
-sqrt((779.72 - 816)^2 + (684.12 - 730)^2)/1000*6, 272143/280000; ...
sqrt((815.86 - 816)^2 + (735.48 - 730)^2)/1000*6, 277788/280000; ...
sqrt((853.20 - 816)^2 + (784.25 - 730)^2)/1000*6, 264095/280000; ...
sqrt((891.09 - 816)^2 + (836.08 - 730)^2)/1000*6, 215604/280000; ...
sqrt((930.26 - 816)^2 + (890.64 - 730)^2)/1000*6, 169101/280000
];%实验值
computingdata=zeros(datanum,1);
edensity=@(t,z,x) exp(-x.^2/(2*ex^2)-(z-c*beta*t).^2/(2*ez^2));
ldensity=@(t,z,x,d) exp(-((x*cos(theta) - z*sin(theta)+d).^2) ./ (2*lx^2*(1+((x*sin(theta) + z*cos(theta))*lambda*M2/(pi*4*lx^2)).^2))...
-(((x*sin(theta) + z*cos(theta))-0*c*t).^2) / (2*lz^2))./(1+((x*sin(theta) + z*cos(theta))*lambda*M2/(pi*4*lx^2)).^2);
luminositymax=@(t,z,x) edensity(t,z,x).*ldensity(t,z,x,0);
xwidth=[1000/1000];
tdata=[3*10^(-11)];
color=['r','g','y','c','m'];
xbinnumber=12;%人为均匀划分的X区间数
for j=1:1
figure;
hold on;
plot(expdata(:,1), expdata(:,2), '-o', 'LineWidth', 1.5, 'MarkerSize', 5, 'MarkerFaceColor', 'b');
for k=1:1
disp(['start'])
computingdatamax=0;
for n=1:xbinnumber
computingdatamax= computingdatamax+integral3(luminositymax, -tdata(1,k), tdata(1,k),@(t) 3*10^(14)/1000*t-3*ez,@(t) 3*10^(14)/1000*t+3*ez, -xwidth(1,j)+2*xwidth(1,j)*(n-1)/xbinnumber, -xwidth(1,j)+2*xwidth(1,j)*n/xbinnumber,'AbsTol', 1e-12,'RelTol',1e-7);%默认d=0处是最大值
end
computingdatamax_s(j,k)=computingdatamax;
disp(['j,k=',num2str(j),',',num2str(k)])
for i = 1:datanum
luminosity=@(t,z,x) edensity(t,z,x).*ldensity(t,z,x,expdata(i,1));
computingdata(i,1)=0;
for n=1:xbinnumber
computingdata(i,1)= computingdata(i,1)+integral3(luminosity,-tdata(1,k), tdata(1,k),@(t) 3*10^(14)/1000*t-3*ez,@(t) 3*10^(14)/1000*t+3*ez, -xwidth(1,j)+2*xwidth(1,j)*(n-1)/xbinnumber, -xwidth(1,j)+2*xwidth(1,j)*n/xbinnumber,'AbsTol', 1e-12,'RelTol',1e-7);
end
computingdata_s(j,k,i)=computingdata(i,1);
computingdata(i,1)=computingdata(i,1)/computingdatamax;%利用最大值归一
disp(['i=',num2str(i)])
end
plot(expdata(:,1), computingdata(:,1), '-o', 'LineWidth', 1.5, 'MarkerSize', 5, 'MarkerFaceColor', color(1,k));
end
end