我在Matlab中遇到了一些问题

时间:2018-03-25 06:24:56

标签: matlab

在MATLAB中:

使用下面的XY值,在MATLAB中编写MATLAB函数SECOND_DERIV。函数的输出应该是x处数据的二阶导数的近似值,即函数的输入变量。 使用前向差分方法并进行插值以获得最终答案;

X=[1,1.2,1.44,1.73,2.07,2.49,2.99,3.58,4.3,5.16,6.19,7.43,8.92,10.7,12.84,15.41,18.49];

Y = [18.89,19.25,19.83,20.71,21.96,23.6,25.56,27.52,28.67,27.2,19.38,-2.05,-50.9,-152.82,-354.73,-741.48,-1465.11];

这是我的编码:

function output = SECOND_DERIV(R)

X=[1,1.2,1.44,1.73,2.07,2.49,2.99,3.58,4.3,5.16,6.19,7.43,8.92,10.7,12.84,15.41,18.49];  
Y=[18.89,19.25,19.83,20.71,21.96,23.6,25.56,27.52,28.67,27.2,19.38,-2.05,-50.9,-152.82,-354.73,-741.48,-1465.11];  

%forward difference method first time.   
XX=X(1:end-1)

%first derivative.    
dydx=diff(Y)./diff(X)

%second derivative.    
dydx2=diff(dydx)

%forward difference method second time.   
XXX=XX(1:end-1)

%get the second derivative from input x.   
output= interp1(XXX,dydx2,x,'linear','extrap')

end 

我不知道它有什么问题。

This is the result I got from my course's web

1 个答案:

答案 0 :(得分:1)

首先,没有""近似值,而只是""无穷无限近似方案中的近似值。从这个意义上讲,你的练习是不明确的(但是,公平地说,你可能在课程中有一些东西可以完成信息)。

使用两次前向差异几乎与它可以获得的近似值差不多。对于每个向前差异,您将首选(中心差异)近似的横坐标移向过去"过去"的一半样本距离。

对于第一个区别,这可以通过您可能想要坚持原始X样本的事实来证明。但是在第二步中,您将第二个位移引入半个样本距离。为了使近似误差保持在至少相当低的水平,您可以做的最少的事情就是在之后将位移校正一个样本距离,以便将来的"未来"。由于非等距离,这并不会使您完全回到中心差异,但它是为了准确起见应该进行的最小修正。

因此我会替换

XXX=XX(1:end-1)

通过

XXX=XX(2:end)

但是,就像许多学校的练习一样,这个问题是不明确的,如果这是你所期待的那样,很难从远处判断出来。