- 首先,我将您的重载函数的表达式更改为我认为正确的形式。
- 其次,我明确地介绍了 mu 和 T 的定义。
- 第三,我将积分分解为 4 个组件,如下所示,并分别评估它们(按照 Fraukje 提出的思路)
- 第四,我使用
quadl
,虽然这是概率。次要的。
- (编辑)改变了范围
ff
这是更改的代码:
fstep=1;
ff=[1:fstep:265 275:fstep:1000];
T = 3;
mu = 135;
df = 0.01;
xmax = 10;
K1=(2*T/pi)*log(2*cosh(mu/(2*T)));
theta1=ones(size(ff));
theta1(ff-2*mu<0)=0;
I1=zeros(size(ff));
for n = 1:numel(ff)
f = ff(n);
sigm1 = @(x) sinh(x/T)./((f^2-4*x.^2).*(cosh(mu/T)+cosh(x/T)));
sigm2 = @(x) -theta1(n)./(f^2-4*x.^2);
I1(n) = K1/f + (f/pi)*quadl(sigm1,0,f/2-df); % term #1
% I1(n) = I1(n) + (f/pi)*quadl(sigm1,f/2+df,xmax); % term #2
% I1(n) = I1(n) + (f/pi)*quadl(sigm2,0,f/2-df); % term #3
% I1(n) = I1(n) + (f/pi)*quadl(sigm2,f/2+df,xmax); % term #4
end
我选择拆分积分,x=f/2
因为那里显然有一个奇点(除以 0)。但是对于 #2 和 #4 项会出现其他问题,即当积分被评估为 时x>f/2
,可能是由于所有三角函数项。
如果您只保留条款 1 和 3,您会得到与您展示的情节相当相似的东西:
但是,您可能应该更仔细地检查您的函数,看看可以做些什么来评估x>f/2
.
编辑
我再次检查了代码并重新定义了辅助积分:
I1=zeros(size(ff));
I2=zeros(size(ff));
I3=zeros(size(ff));
for n = 1:numel(ff)
f = ff(n);
sigm3 = @(x) sinh(x/T)./((f^2-4*x.^2).*(cosh(mu/T)+cosh(x/T))) -theta1(n)./(f^2-4*x.^2);
I1(n) = K1/f + (f/pi)*quadl(sigm3,0,f/2-df);
I2(n) = (f/pi)*quadl(sigm3,f/2+df,10);
end
I3=I2;
I3(isnan(I3)) = 0;
I3 = I3 + I1;
这是输出现在的样子:
绿线是函数的积分,0<x<f/2
看起来还可以。红线是积分结束Inf>x>f/2
,显然失败了f=270
。蓝色曲线是总和(总积分),不包括积分NaN
时的贡献Inf>x>f/2
。
我的结论是,曲线可能有问题,正如您所期望的那样。