我在计算两个数据集的数值积分时遇到一些问题。 为了进行积分,我使用辛普森 1/3 规则。
function I = Simpsons(f,a,b,n)
if numel(f)>1 % If the input provided is a vector
n=numel(f)-1; h=(b-a)/n;
I= h/3*(f(1)+2*sum(f(3:2:end-2))+4*sum(f(2:2:end))+f(end));
else
h=(b-a)/n; xi=a:h:b;
I= h/3*(f(xi(1))+2*sum(f(xi(3:2:end-2)))+4*sum(f(xi(2:2:end)))+f(xi(end)));
end
此代码正确计算积分。
现在问题出现在乘数值的计算过程中。
例如我有两个函数 f 和 g 都依赖于同一个变量。 变量在相同的范围内。所以下限和上限是相同的。
$\int_a^b \! f(x) *g(x) \, \mathrm{d} x.$
这里x的分辨率是不同的。意味着对于 f(x),我们有 1000 个数据,而对于 g(x),我们有 1700 个数据点。所以无法进行逐个元素的乘法。
如何解决这个集成..
您需要将函数之一
f
或 g
插值到其他函数点,对于可使用 interp1
实现的一维函数。
例如:
% x1 an x2 have the same limits but different # of elements
x1 = linspace(-10,10,100);
x2 = sort(rand(1,170)*20-10); # non-unifrom points from -10 to 10
f1 = sin(x1);
f2 = cos(x2);
现在说我们要乘以 f1*f2,我们需要它们具有元素数量,所以
f2i= interp1(x2,f2,x1,'spline');
将使 f2 具有与 f1 相同的元素数,或者相反
f1i= interp1(x1,f1,x2,'spline');
将使 f1 具有与 f2 相同的元素数。