这可能是几行代码,但我无法弄明白...... 我需要用积分范围开始时奇异的分析函数对实验数据进行卷积运算。所以,如果我使用“conv”,它将不起作用......
我有两个实验向量,phi(time)
和时间
然后想要计算T(t)
T = \int_{0}^{t}\phi \left ( t-\tau \right )\frac{\textup{d}\tau}{\tau ^{1/2}}
所以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点矢量大约一秒钟。忽略或将tau = 0指向一个较小的值不起作用,它仍然会感知奇点,结果是错误的。