Matlab - 数据的二阶导数

Matlab - second derivative of data

假设我们有

[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)

我得到的结果是

Matrix dimensions must agree

如何解决这个问题?

我将您重定向到 this 文档。当你使用 diff 函数时,它实际上会 return 你一个 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
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) ;