use*_*562 5 matlab plot function integral singular
我最近开始使用Matlab,我试图绘制Imaginary函数的一部分.我可以看到我在某个地方犯了一个错误,因为我有图表显示我需要得到什么,而我正在得到别的东西.这是我需要得到的图表的链接,我得到的和我正在绘制的函数:

我知道这个函数在270 Hz左右的频率上有一个奇点,我不知道'quadgk'是否能解决积分.你们可能知道但是积分里面的θ功能是一个重量级的,我不知道这是否会导致问题?我在这里做错了吗?这是我写的matlab代码:
clear all
clc
ff=1:10:1000;
K1=(2*3)*log(2*cosh(135/6))/pi;
theta1=ones(size(ff));
theta1(ff<270)=0;
I1=zeros(size(ff));
for n = 1:numel(ff)
f = ff(n);
I1(n)= K1/f + (f/pi)*quadgk(@(x)(sinh(x/3)/(cosh(135/3)+cosh(x/3))-theta1(n))./((f^2)-4*(x.^2)), 0, inf);
end
plot(ff,I1, 'b');
hold on
axis([0 1000 -0.3 1])
Run Code Online (Sandbox Code Playgroud)
到目前为止我会这样做:
clc,clear
T = 3;
mu = 135;
f = 1E-04:.1:1000;
theta = ones(size(f));
theta(f < 270)= 0;
integrative = zeros(size(f));
for ii = 1:numel(f)
ff = @(x) int_y(x, f(ii), theta(ii));
integrative(ii) = quad(ff,0,2000);
end
Imm = ((2*T)./(pi*f)).*log(2*cosh(mu/(2*T))) + (f/pi).*integrative;
Imm1 = exp(interp1(log(f(1:2399)),log(Imm(1:2399)),log(f(2400):.001:f(2700)),'linear','extrap'));
Imm2 = exp(interp1(log(f(2985:end)),log(Imm(2985:end)),log(f(2701):.001:f(2984)),'linear','extrap'));
plot([(f(2400):.001:f(2700)) (f(2701):.001:f(2984))],[Imm1 Imm2])
hold on
axis([0 1000 -1.0 1])
plot(f,Imm,'g')
grid on
hold off
Run Code Online (Sandbox Code Playgroud)
和
function rrr = int_y(x,f,theta)
T = 3;
mu = 135;
rrr = ( (sinh(x./T)./(cosh(mu/T) + cosh(x/T))) - theta ) ./ (f.^2 - 4.*(x.^2));
end
Run Code Online (Sandbox Code Playgroud)
我想出了这个情节:
