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

标签 matlab integration splines

我需要使用实验数据执行双重积分,但每个积分的积分限制是相同的,在本例中是时间。从数学上讲,我需要计算:

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

经过一番搜索,我到达:

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)  );

该代码需要很长时间才能运行并提供巨大的值(value)。我认为我的问题是 Matlab 可能在处理样条线时遇到问题,但我不知道如何解决这个问题。

最佳答案

首先,你不应该对一堆东西使用同一个字母;您的代码很难阅读,因为必须弄清楚 T 在每种情况下的含义。

第二,纯数学有帮助:改变变量和简单计算后,二重积分变成单积分:

0T0x a(t) dt dx = ∫0TtT a(t) dx dt = ∫0T (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 倍。

关于matlab - 使用实验数据进行双重积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30911691/

相关文章:

ssl - IDEAL 的 OpenSSL 证书

asp.net - 如何在 Windows Server 2008 R2 上安装 PayPal API 证书

python - Python/Scipy 中的分段常数或 0 度样条插值

c++ - B样条曲线

Matlab Interp2 函数行为与 OpenCV Remap 不同

matlab - 合并具有连接日期的行

matlab - OpenCV 相当于 Matlab 的 rdivide?

matlab - 如何在 MATLAB 中可视化 3D 矩阵

c# - 如何整合 .NET 和 Zabbix?

r - 如何获得 smooth.spline 的置信区间?