【问题标题】:How Matlab knows the function that a vector is produced by to calculate cumtrapz?Matlab如何知道产生向量以计算cumtrapz的函数?
【发布时间】:2019-09-30 09:01:19
【问题描述】:

我可能有一个愚蠢的问题。 当我在 Matlab y=[1 4] 中编写以下脚本时,然后当我使用 cumtrapz(y) 时,我得到 [0 2.5]。我知道 cumtrapz 在这种方法中认为 deltaX=1 。 我的问题是 matlab 如何知道向量 1,4 是由 f(x)=x^2 创建的? 可以说它是由 f(x)=3x-2 通过识别 y 向量值或许多其他类型的函数创建的。那么matlab如何知道哪个函数产生了Y向量来近似函数的积分呢? 谢谢

【问题讨论】:

    标签: matlab function integral


    【解决方案1】:

    MATLAB 不知道这些值是从哪里来的

    a = [1 4 5 9]
    s = cumtrapz(a)
    s =
    0.00000    2.50000    7.00000   14.00000
    

    标准步骤是 1 所以:

    h = 1;
    s(i) = s(i-1) + h*(a(i-1)+a(i))/2
    

    【讨论】:

      【解决方案2】:

      Matlab 不知道您的向量是由f(x) = x^2 创建的。 trapz 计算每对值之间的线性插值。

      所以cumtrapz 只需计算一个 2 乘 2 的移动和,然后将结果除以 2。

      % Sample data
      Y = [1 4 9 16 25];
      
      % Using cumtrapz
      Q1  = diff(cumtrapz(Y))
      %Q1 = [2.5, 6.5, 12.5, 20.5]
      
      % Using a moving sum
      Q2  = conv(Y,ones(2,1),'valid')/2
      %Q2 = [2.5, 6.5, 12.5, 20.5]
      

      f(x) = sin(x) 的图形示例:

      cumtrapz 只是应用cumsum 中间点的值。

      【讨论】:

      • 谢谢,但我仍然很困惑。如果假设函数为 f(x)=x^2,则 Ingeral 的 fx 在 0 到 1 之间的解析解是 x^3/3 在 1 到 2 之间,即 2.5(与 matlab 的答案相同)。但是你提到的是Matlab只是在每两点之间使用了线。在这种情况下,函数变为 f(x)=3x-2 并且该函数的积分解析为 (3x^2/2-2x) 在 1 到 2 之间,即 1.5
      • 如果f(x) = x^2 那么,确实是F(x) = x^3/3。要计算12 之间的积分,我们使用F(2) - F(1) ,结果是2.3333 而不是2.5。因此,由于trapz 对非线性函数使用线性逼近,因此数值解和解析解之间存在差异。
      • 谢谢! Matlab中是否有数值积分也可以输入函数参数并选择小dx进行积分?
      • 查看trapz 文档。您可以使用trapz(x,y)y = f(x)x = start:dx:stop。在这种情况下,dx 可以尽可能小。但请记住,数值解始终是解析解的近似值,也许是一个非常好的近似值,但却是一个近似值。
      猜你喜欢
      • 2015-06-17
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      相关资源
      最近更新 更多