gpt4 book ai didi

matlab - cumtrapz() 是否有高阶版本?

转载 作者:行者123 更新时间:2023-12-04 12:44:52 31 4
gpt4 key购买 nike

介绍

假设我有 N积分x(1:N)我有函数值 f(1:N) , 例如:

x = [ 0.0795, 0.1327, 0.1395, 0.5133, 0.6470, 0.7358, 0.7640 ];
f = [ 0.0388, 0.4774, 0.4547, 0.0784, 0.3241, 0.2818, 0.9667 ];

我想计算 f的累积积分关于 x使用这些数据。

低阶解决方案

在 MATLAB 中,我可以使用 cumtrapz() 轻松完成此操作:
>> result = cumtrapz( x, f )

result =

0 0.0137 0.0169 0.1165 0.1434 0.1703 0.1879

问题

不幸的是, cumtrapz()使用梯形方法进行数值积分,这不足以满足我的目的。

Higher-order methods exist ,就像辛普森规则一样,但据我所知,在 MATLAB 文件交换或其他任何地方,没有一个函数可以对非均匀网格执行辛普森规则的累积版本。

cumtrapz() 的高阶版本是否已经存在?如果没有,我需要怎么做才能自己实现?

最佳答案

我不知道另一种方法,但是您可以使用带有 pchip 的插值, spline ,或其他一些提高分辨率的方法。然后使用 cumtrapz以获得更接近数值积分的近似值。

由您决定哪种方法适用于您的功能。

使用正弦函数和样条的示例

>> x = linspace(0,pi,5);
>> f = sin(x);
>> intF = cumtrapz(x,f);
error = 2-intF(end)
error =
0.1039

>> x2 = linspace(x(1),x(end),numel(x)*10); %Up sample by 10x
>> f2 = interp1(x,f,x2,'spline'); %Interpolate with spline
>> intF2 = cumtrapz(x2,f2);
>> error = 2-intF2(end) %MUCH LESS ERROR
error =
-0.0038

enter image description here

关于matlab - cumtrapz() 是否有高阶版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47339198/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com