필터 지우기
필터 지우기

is possible use some function to find derivatives of a vector?

조회 수: 2 (최근 30일)
jonathan valle
jonathan valle 2012년 11월 30일
by example:
NO2=( 1.1 2.4 3.3 4.7 5.9 6.0)' that corresponding to depth: Z=(4.5 6.2 8.4 10.3 12.5 14.8)'
I want find d(NO2)/dz and d^2(NO2)/dz^2
Exist some function that calculate this?

답변 (3개)

Azzi Abdelmalek
Azzi Abdelmalek 2012년 11월 30일
편집: Azzi Abdelmalek 2012년 12월 2일
Edit
NO2=[1.1 2.4 3.3 4.7 5.9 6.0]
Z=[4.5 6.2 8.4 10.3 12.5 14.8]
d1=diff(NO2)./diff(Z)
d2=diff(NO2,2)./diff(Z(2:end)).^2
  댓글 수: 6
Jan
Jan 2012년 12월 2일
편집: Jan 2012년 12월 2일
As far as I can see, your approximation is based on the assumption, that Z is equidistant. This is neither the general case, nor does it match the question. Therefore I think, that this approximation in unnecessarily rough, especially if the 2nd derivative is wanted.
Your method, cropped edges:
d2 = [-0.0826, 0.1385, -0.0413, -0.2079]
Suggest 2nd order method, one-sided differences at the edges:
d2 = [-0.0912, -0.0563, 0.0126, -0.0555, -0.1354, -0.1116]
Azzi Abdelmalek
Azzi Abdelmalek 2012년 12월 2일
No, even Z is not equidistant, there is no reason that diff(Z) will change at each point, we are not looking for the variation of Z, it's No2. if the approximation is bad, it's because the distance between Z's value is big. To improve the result, maybe we can interpolate.

댓글을 달려면 로그인하십시오.


Image Analyst
Image Analyst 2012년 11월 30일
How about the gradient() function?

Jan
Jan 2012년 12월 1일
Matlab's GRADIENT is accurate in the fist order only for not equidistant input. See FEX: DGradient and FEX: central_difference.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by