【问题标题】:Matlab - second derivative of dataMatlab - 数据的二阶导数
【发布时间】:2017-05-22 17:34:43
【问题描述】:

假设我们有

[x]=[0.1 0.2 0.3 0.4]
[y]=[0.25 0.30 0.40 0.55]
y1=diff(y)./diff(x)
y2=diff(y1)./diff(x)

我得到的结果是

矩阵尺寸必须一致

我该如何解决这个问题?

【问题讨论】:

  • 勾选whether,您需要转置其中一个矩阵才能按预期操作它们。
  • 在最后一行,diff(y1) 是一个长度为 2 的向量,diff(x) 是一个长度为 3 的向量,因此它会给你错误。

标签: matlab derivative


【解决方案1】:

我将您重定向到 this 文档。当你使用 diff 函数时,它实际上会返回一个带有 m-1 的向量(m 是它的长度),因为它的作用是输出这个:

diff(y1) = [y1(2)-y1(1) y1(3)-y1(2) ... y1(m)-y(m-1)]

如您所见,您将丢失一个值,从而解释您的错误。当您执行最后一行时,它不能将 diff(y1) 除以 diff(x),因为 diff(y1) 等于长度为 2 的向量,而 diff(x) 等于长度为 3 的向量。

根据你想做什么,你可以把代码改成如下:

[x]=[0.1 0.2 0.3 0.4]
[y]=[0.25 0.30 0.40 0.55]
y1=diff(y)./diff(x)
y2=diff(y1)./diff(x(1:end-1))

如果你想近似 y 的导数,我真的建议你看看我链接的页面中的示例。 matlab 文档总是给出如何使用它们的函数的例子,所以go take a look。根据文档,如果要计算向量y的偏导数,则需要x向量的步长。

x=[0.1 0.2 0.3 0.4]
y=[0.25 0.30 0.40 0.55]
x_step = 0.1
y1=diff(y)./x_step
y2=diff(y1)./x_step

【讨论】:

    【解决方案2】:
    x=[0.1 0.2 0.3 0.4] ;
    y=[0.25 0.30 0.40 0.55] ;
    
    dy = gradient(y)./gradient(x) ;
    d2y = gradient(dy)./gradient(x) ;
    

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,但对它为什么/如何这样做的一些解释将大大改善这个答案。
    • 请注意,gradient 计算其边界梯度的方式与内部点不同。这可能会导致不需要的最终效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 2018-09-30
    • 2020-03-25
    • 2014-02-13
    相关资源
    最近更新 更多