Matlab中奇异函数对实验数据的卷积

Matlab中奇异函数对实验数据的卷积,matlab,convolution,Matlab,Convolution,这可能是几行代码,但我无法理解。。。 我需要对实验数据进行卷积运算,分析函数在积分范围开始时是奇异的。所以如果我用“conv”就不行了 我有两个实验向量,phi(time)和时间 然后要计算T(T) 因此,tau=0的奇点使得“conv”不起作用。我一直在摆弄匿名函数,用quadgk处理奇点之类的问题,但什么都做不到。我敢打赌这是一个已解决的问题,但找不到类似的问题。非常感谢您的帮助 编辑:通过以下方式解决此问题: function T = TCalc(time, power) warning

这可能是几行代码,但我无法理解。。。 我需要对实验数据进行卷积运算,分析函数在积分范围开始时是奇异的。所以如果我用“conv”就不行了

我有两个实验向量,
phi(time)
和时间 然后要计算
T(T)

因此,tau=0的奇点使得“conv”不起作用。我一直在摆弄匿名函数,用quadgk处理奇点之类的问题,但什么都做不到。我敢打赌这是一个已解决的问题,但找不到类似的问题。非常感谢您的帮助

编辑:通过以下方式解决此问题:

function T = TCalc(time, power)

warning off MATLAB:quadgk:NonFiniteValue %suppress warning at the zero point

T=zeros(size(time));

for par = 1:numel(time)
    T(par) = s1(time(par));
end

function y = r1(t)
    y = interp1q(time,power,t');%notice that t is transposed! to make interp1q work.
    y = y'; 
end

function y = s1(tfin)
    y = quadgk(@(t) (r1(tfin-t))./t.^(0.5),0,tfin,'RelTol',1.e-2);
end
end

我猜,这里不雅观的技巧是让Matlab认为实验数据是一个解析函数,通过interp1,并使用quadgk来容忍积分极限处的奇点。对于1000个点向量,大约为1秒。忽略tau=0点或将其设置为较小的值都不起作用,它仍然会感知到奇异点,结果是错误的

您需要决定如何处理奇点。也许您只是想排除\tau=0?谢谢,但效果不太好…我用这段代码实现了。有点笨拙,但相对容忍度较低,对我的应用程序来说,它的运行速度相当快。
function T = TCalc(time, power)

warning off MATLAB:quadgk:NonFiniteValue %suppress warning at the zero point

T=zeros(size(time));

for par = 1:numel(time)
    T(par) = s1(time(par));
end

function y = r1(t)
    y = interp1q(time,power,t');%notice that t is transposed! to make interp1q work.
    y = y'; 
end

function y = s1(tfin)
    y = quadgk(@(t) (r1(tfin-t))./t.^(0.5),0,tfin,'RelTol',1.e-2);
end
end