我正在寻找与matlab的数值集成。我知道matlab中有一个trapz函数,但精度不够好。通过在线搜索,我发现那里有一个四元函数似乎只接受符号表达作为输入。我的数据都是离散的和一维的。这是否可以在我的数据上使用四元组?感谢。
答案 0 :(得分:1)
你的问题的答案是否定的。在Matlab中对没有表达式的数据执行数值积分的唯一方法是使用trapz
函数。如果它不够准确,请尝试编写自己的四元函数,正如Li-aung所说,非常简单,this可能有所帮助。
您可以尝试的另一种方法是使用强大的曲线拟合工具cftool
进行拟合,然后使用可以对integrate
个对象进行操作的cfit
函数(它有一个奇怪的约定,上限是第一个参数!)。我不认为你会得到比trapz
更准确的答案,这取决于合适程度。
答案 1 :(得分:0)
使用MATLAB中的样条函数插入数据,然后整合这些数据。这是以离散形式集成数据的标准方法。
答案 2 :(得分:0)
如果您首先创建一个插入数据的函数,则可以使用quadl()
来整合数据。
function f = int_fun(x,xdata,ydata)
f = interp1(xdata,ydata,x);
然后将其提供给quadl()
函数:
integral = quadl(@int_fun,A,B,[],[],x,y) % syntax to pass extra arguments
% to the function
答案 3 :(得分:-1)
一个变量的函数的积分是函数图的曲线下面积的计算。对于这个答案,我将抛开令人讨厌的函数和极端情况以及所有曲折的数字集成例程的编写者,其中大部分可能与此无关。
Simpson的规则是一种函数的数值积分方法,您可以使用该函数来评估其域内各点的函数。这与此无关。
假设您的数据代表定期收集的值的时间序列。然后,您可以将数据绘制为具有相等宽度条形的直方图。你寻求的被积函数是你感兴趣的限制之间直方图中条形区域的总和。
您应该能够将此方法应用于数据集,其中x轴(即直方图中条形的宽度)不显示时间,对于条形宽度不相等的情况,情况数据穿过x轴,以及最合理的数据集,非常容易。
数据的离散化会限制您获得的结果的准确性。例如,如果您的时间序列以1秒为间隔进行采样,则无法通过此方法在一个不是整数秒的时间间隔内进行积分。但是,通过任何方法,您实际上并没有更准确地计算数字的数据。当然,您可以使用Matlab(或其他任何东西)生成额外的精度数字,但它们没有任何意义。