【问题标题】:Numerical Integration Problems with Product Rule due to differnet resolution由于分辨率不同导致的乘积规则的数值积分问题
【发布时间】:2012-12-27 17:00:45
【问题描述】:

我在计算两个数据集的数值积分时遇到了一些问题。 对于集成,我使用的是 simpsons 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 都依赖于同一个变量。 变量在相同的范围内。 SO 下限和上限相同。

$\int_a^b \! f(x) *g(x) \, \mathrm{d} x.$

这里 x 的分辨率是不同的。对于 f(x),我们有 1000 个数据,而对于 g(x),我们有 1700 个数据点。所以不能进行逐个元素的乘法。

如何解决这种整合..

【问题讨论】:

    标签: matlab integration numerical-methods calculus


    【解决方案1】:

    您需要将您的一个函数fg 内插到其他函数点,以获得可使用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 相同的元素数。

    【讨论】:

    • 我正要进行插值。但如果我这样做,那么我需要选择个别点。这将是一项乏味的工作。有没有最简单的方法..(这里我说的是Microsoft Excel数据插值)
    • 我不明白这有什么乏味的......既然你有 xi,那么设置而不是 xi 一些其他矢量x=linspace(xi(1),xi(end),N) 有什么难的?
    • 对不起我的cmets。由于我在 excel 文件中有所有数据,因此我试图使用 excel 进行插值。 peltiertech.com/WordPress/excel-interpolation-formulas 此链接显示了一些图形表示。我想我需要使用游标来获取每个值。无论如何感谢您的帮助。我现在正在 matlab 中尝试所有方法。
    • 现在我看到了另一个问题。您展示 x1 和 x2 计算的方式具有统一的差异/分辨率。在我的数据集中,问题是 x2 的 x 之间的分隔相等,而 x1 不相等(X1 具有非统一数据,而 X2 具有统一数据)。 x1 是实际数据。所以人们做的计算有不统一的范围。如何处理这个。
    • x1 和 x2 是点的向量,它们不需要是统一的以实现interp1。请参阅我编辑的答案,我将 x2 定义为随机向量,它仍然有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 2016-02-16
    • 2020-04-12
    • 2016-01-12
    相关资源
    最近更新 更多