如何计算给定输入函数的积分?
3次浏览(过去30天)
显示旧的注释
接受的答案
约翰D 'Errico
2021年8月24日
编辑:约翰D 'Errico
2021年8月24日
不,你不想用多项式来拟合那个向量。多项式对任何东西来说都是坏消息。
在看到你的真实数据图片后,我会这样做。我会使用样条模型来插值数据,实际上pchip可能是最好的选择。样条的好处是你可以很容易地对它积分。
首先,由于我没有任何实际数据,让我构建一些。你似乎有一个重复多次的高度振荡模式。我用一个简单的正弦曲线作为例子。
H = 0:100;
T = 330 + 20*sin(H) + 10*sin(3*H);
情节(H T“啊——”)
应该够近了。现在,我可以对曲线进行插值,然后用这个函数对指数函数进行积分……
例如,一个简单的解决方案可能是:
C = 0.01;
B = 4.5e3;
X_t = pchip(H,T);
fun = @(t) C*exp(- b /fnval(X_t,t));
现在,对于任何时间t,我们可以得到一个从0到那个时间点的积分值。问题是,这个函数没有解析积分形式。在最好的情况下,我们可以用积分来进行数值积分。例如:
Out = @(t) integral(fun,0,t);
(10)
这是可以的,除了这个积分对于这类问题没有很好的向量化。
也许更好的方法是以不同的方式构建样条。然后我们将简单地直接积分得到的样条模型。
K_t = pchip(H,C*exp(-B./T));
所以你可以看到我选择了在积分中建立指数形式的样条模型。我们可以直接对那条样条积分。fnint来自曲线拟合工具箱,我记得。
K_int = fnint(K_t);
fnval (K_int, 23)%从0到23的积分为:
fnplt (K_int)%,并且很容易将得到的函数作为函数绘制出来
Fnval也是很好的向量化的,所以你可以在任意点的列表上生成你想要的积分。
如果你没有曲线拟合工具箱,我会得到它。它非常有用。但如果不是,像fint这样的东西写起来并不难。