Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Matlab中对矢量数据进行数值积分?_Matlab - Fatal编程技术网

如何在Matlab中对矢量数据进行数值积分?

如何在Matlab中对矢量数据进行数值积分?,matlab,Matlab,我有向量数据rdata和rho。每个都是一个641 x 1的向量,rho是rdata的函数。我想将rho(rdata)*2*pi*rdata从0集成到rmax。但是,当我执行以下操作时,结果为“NaN”。我设置的不正确吗?有没有更好的方法在Matlab中对矢量数据进行数值积分 % turn data into function fr = @(r)interp1(rdata,rho,r); % integrate h = integral(@(r)fr(r)*2*pi*r,0,35.8,'Arr

我有向量数据
rdata
rho
。每个都是一个641 x 1的向量,
rho
rdata
的函数。我想将rho(rdata)*2*pi*rdata从0集成到rmax。但是,当我执行以下操作时,结果为“NaN”。我设置的不正确吗?有没有更好的方法在Matlab中对矢量数据进行数值积分

% turn data into function
fr = @(r)interp1(rdata,rho,r);

% integrate
h = integral(@(r)fr(r)*2*pi*r,0,35.8,'ArrayValued',true);

更新

我发现了
trapz
函数,并尝试了以下方法

dens = 2*pi*rho.*rdata;
trapz(rdata,dens)

得到了一个2.5左右的值,比我预期的要低两个数量级。我是否执行不正确
rdata
有不均匀的间距,如果这很重要的话。

在调用
integral
时使用
*
,不要使用
'ArrayValued'
参数。@CrisLuengo你是说
h=integral(@(r)fr(r)。*2*pi*r,0,35)?但是当我这样做的时候,我得到一个错误,使用
*
h=integral(@(r)fr(r)。*2.*pi.*r,0,35)(从技术上讲,只有最后一个需要这个,乘法是从左到右的,所以前两个是向量乘以标量,第三个是向量乘以向量,但把它放在不是矩阵乘法的任何地方都没有坏处)。@CrisLuengo-Hm,谢谢,但我仍然得到“NaN”作为结果。我为数据附加了一个Dropbox链接,以防直接看到它们:大约2.5是正确的数字值。计算一下这个密度,你会发现它的值都在1以下,大部分都在0.1左右。rdata的第一个元素和最后一个元素之间的差异略低于35。将这两者相乘,您期望值接近3.5左右。