【发布时间】:2013-09-15 10:31:00
【问题描述】:
我最近开始使用 Matlab,我正在尝试绘制函数的虚部。我可以看到我在某个地方犯了一个错误,因为我有图表显示我需要得到什么并且我得到了其他东西。这是我需要获取的图表的链接,我正在获取以及我正在绘制的函数:
我知道这个函数在 270 Hz 左右的频率上有一个奇点,我不知道“quadgk”是否可以解决积分问题。你们可能知道,但积分内的 theta 函数是一个重磅炸弹,我不知道这是否会导致问题?我在这里做错了什么吗?这是我写的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])
【问题讨论】:
-
我盯着公式和你在 Matlab 中的实现,似乎没有什么问题(顺便说一下,情节也暗示了这一点)。所以我认为你应该尝试为
quadgk寻找替代方案,因为这似乎是问题所在。不过我帮不了你。 -
我在
quad的 Matlab 文档中发现了这一点(参见 mathworks.nl/help/matlab/ref/quad.html):“如果函数在 (a,b) 内部的点处是奇异的,则将积分写为积分的总和以奇异点为端点的子区间,用quadgk计算它们,并将结果相加。”但是,您的函数中似乎仍然存在多个奇点......? -
好吧,由于
theta是不连续的,我们会在I1函数中找到该步骤。
标签: matlab function plot integral singular