使用实验数据进行双重积分



我需要使用实验数据进行双重积分,但我的积分限制对于每个积分是相同的,在这种情况下,时间。在数学上,我需要计算:

E [a 0+ ∫0 T a(t)dt ] = a + limTx → ∞ (1/T) ∫0 T ∫0t a dtdT

经过一番搜索,我到达:

T = 0:0.1:600;
x = T;
A = rand(1,length(T)); % my data
pp_int = spline(T,A );
DoubleIntegration = integral(@(x)arrayfun(@(T )(integral(@(T ) ppval(pp_int,T ),0,  T  )),x),0,T(end)  );

代码花了很长时间才运行并给出巨大的价值。我认为我的问题是 Matlab 可能在处理样条时遇到麻烦,但我不知道如何解决这个问题。

首先,你不应该对一堆东西使用相同的字母;你的代码很难阅读,因为人们必须在每个实例中弄清楚T的含义。

其次,纯数学有帮助:在变量的变化和简单的计算之后,双积分变成了单积分:

∫0 T ∫0 x a(t) dt dx = ∫0 T ∫t T a(t)

dx dt = ∫0 T (T-t)*a(t) dt

我在较小的范围内使用了非随机数据进行演示:

T = 0:0.1:60;
x = T;
A = sin(T.^2); % my data
pp_int = spline(T,A );
tic
DoubleIntegration = integral(@(x) arrayfun(@(T )(integral(@(T ) ppval(pp_int,T ),0,  T  )),x),0,T(end)  );
toc
tic
SingleIntegration = integral(@(t) (T(end)-t).*ppval(pp_int,t), 0, T(end));
toc
disp(DoubleIntegration)
disp(SingleIntegration)

输出:

Elapsed time is 27.751744 seconds.
Elapsed time is 0.007223 seconds.
   51.3593
   51.3593

相同的结果,快 3800 倍。

相关内容

  • 没有找到相关文章

最新更新