如何在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左右。