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