如何计算给定输入函数的积分?

3次浏览(过去30天)
大家好,请看下面的图片。
A = [a1 a2 a3 ....A是给定的,它们是温度数数组。你可以假设任何你想要的值。
U =[1 2 3 4…u是时间,比如小时
这个温度函数x(u)将被输入函数t, x(t)进行积分。对于任何给定的时间t,“out”的输出将只在[0 1]之间,t就像u, >=0。

接受的答案

约翰D 'Errico
约翰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)
Ans = 1.5630e-07
这是可以的,除了这个积分对于这类问题没有很好的向量化。
也许更好的方法是以不同的方式构建样条。然后我们将简单地直接积分得到的样条模型。
K_t = pchip(H,C*exp(-B./T));
所以你可以看到我选择了在积分中建立指数形式的样条模型。我们可以直接对那条样条积分。fnint来自曲线拟合工具箱,我记得。
K_int = fnint(K_t);
fnval (K_int, 23)%从0到23的积分为:
Ans = 3.4148e-07
fnplt (K_int)%,并且很容易将得到的函数作为函数绘制出来
Fnval也是很好的向量化的,所以你可以在任意点的列表上生成你想要的积分。
如果你没有曲线拟合工具箱,我会得到它。它非常有用。但如果不是,像fint这样的东西写起来并不难。
3评论
约翰D 'Errico
约翰D 'Errico 2021年8月24日
我觉得它应该是你想要的。如果你没有曲线拟合工具箱,请告诉我,但作为一套不错的工具,它是非常值得的。

登录评论。

更多答案(1)

史蒂文的主
史蒂文的主 2021年8月24日
你得到的不是一个函数,而是一个数据向量。除非你从你的原始问题的理论中知道函数x(u)的形式,否则考虑一下 trapz cumtrapz 直接集成数据。
3评论

登录评论。

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!