# Taking derivative an array which is a numerical value with respect to another array

168 visualizzazioni (ultimi 30 giorni)
Meva il 2 Mag 2015
Commentato: S. Gopal il 31 Gen 2018
Hello,
I need to take a derive of an array (1*101) (which is numerical not analytical)
with respect to another array (1*101). How could I do that in Matlab? Any help please?
##### 1 CommentoMostra NessunoNascondi Nessuno
S. Gopal il 31 Gen 2018
The same problem I am facing....please anybody help

Accedi per commentare.

### Risposta accettata

Roger Stafford il 3 Mag 2015
Modificato: Roger Stafford il 3 Mag 2015
Here is a second order approximation to du/dx which should be somewhat more accurate than a first order approximation, and if u is a quadratic function of x, then du/dx is exact (except of course for round-off errors.) Also note that there are as many points in the derivative array as in u and x. I assume in this code that u and x are row vectors of the same length. Intervals in x are not required to be equal.
xd = diff([x(3),x,x(n-2)]); % <-- Corrected
ud = diff([u(3),u,u(n-2)]); % <-- Corrected
dudx = (ud(1:end-1)./xd(1:end-1).*xd(2:end) ...
+ ud(2:end)./xd(2:end).*xd(1:end-1)) ...
./ (xd(2:end)+xd(1:end-1));
##### 3 CommentiMostra 2 commenti meno recentiNascondi 2 commenti meno recenti
Roger Stafford il 3 Mag 2015
The formula I gave you computes the derivative at one of three adjacent points of your data for the unique second degree polynomial which passes through all three points. Your data does not have to be a polynomial for this to be performed. It can be done on any three points provided they each have different values of x. For reasonably smooth data this usually provides a more accurate estimate of the actual derivative at that given point than is given by the slope of a straight line drawn through two adjacent points.
The code is vectorized so that it gives you the above derivative approximation at each point using it and the surrounding two points. The exception is that at the two end points which each have no points to one side it gives the derivative there using that point and the two points on other side.

Accedi per commentare.

### Più risposte (1)

pfb il 2 Mag 2015
if f is the vector representing f(x) and x contains the corresponding abscissae
df = diff(f)./diff(x)
note that this has one less element than f and x. You can choose
xd = (x(1:end-1)+x(2:end))/2
(i.e. the halfway points) as the corresponding abscissae.
##### 4 CommentiMostra 3 commenti meno recentiNascondi 3 commenti meno recenti
Meva il 3 Mag 2015
Many thanks Mohammed. That is right.
I am trying to solve Navier Stokes.

Accedi per commentare.

### Categorie

Scopri di più su Linear Algebra in Help Center e File Exchange

### Community Treasure Hunt

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

Start Hunting!