|
|
|
|
Re: derivative function in IDL similar as DIFF in matlab [message #86466 is a reply to message #86464] |
Tue, 12 November 2013 04:08   |
Matthew Argall
Messages: 286 Registered: October 2011
|
Senior Member |
|
|
On Tuesday, November 12, 2013 7:01:15 AM UTC-5, Matthew Argall wrote:
> On Tuesday, November 12, 2013 5:08:11 AM UTC-5, Jie Zhou wrote:
>
>> Is there a derivative function in IDL similar as DIFF in matlab? I think the DERIV is different from DIFF.
>
>
>
> TS_DIFF(data, 1) would be equivalent.
Actually, maybe not. TS_DIFF calculates the forward difference. I think you are looking for the backward difference.
In that case, I tend to use
result = data[1:*] - data[0:n_elements(data)-1]
or
result = shift(data, 1) - data
result = result[0:n_elements(result)-1]
|
|
|
Re: derivative function in IDL similar as DIFF in matlab [message #86467 is a reply to message #86466] |
Tue, 12 November 2013 04:18   |
Jie Zhou
Messages: 27 Registered: February 2014
|
Junior Member |
|
|
On Tuesday, November 12, 2013 1:08:10 PM UTC+1, Matthew Argall wrote:
> On Tuesday, November 12, 2013 7:01:15 AM UTC-5, Matthew Argall wrote:
>
>> On Tuesday, November 12, 2013 5:08:11 AM UTC-5, Jie Zhou wrote:
>
>>
>
>>> Is there a derivative function in IDL similar as DIFF in matlab? I think the DERIV is different from DIFF.
>
>>
>
>>
>
>>
>
>> TS_DIFF(data, 1) would be equivalent.
>
>
>
> Actually, maybe not. TS_DIFF calculates the forward difference. I think you are looking for the backward difference.
>
>
>
> In that case, I tend to use
>
>
>
> result = data[1:*] - data[0:n_elements(data)-1]
>
>
>
> or
>
>
>
> result = shift(data, 1) - data
>
> result = result[0:n_elements(result)-1]
In fact what I tried to do is using diff function to calculate the n-th derivative of an 2-d matrix. for example, for a matrx:
A=
1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 1
in matlab, the DIFF(A,2) gives:
1 -2 1 0 0 0 0 0 0 0
0 1 -2 1 0 0 0 0 0 0
0 0 1 -2 1 0 0 0 0 0
0 0 0 1 -2 1 0 0 0 0
0 0 0 0 1 -2 1 0 0 0
0 0 0 0 0 1 -2 1 0 0
0 0 0 0 0 0 1 -2 1 0
0 0 0 0 0 0 0 1 -2 1
Until now, I don't find a equivalent function in IDL.
Thanks to alx, I use
D=(shift(shift(A,0,1)-A,0,1)-(shift(A,0,1)-A))[*,2:*]
to finish the task.
jie
|
|
|
Re: derivative function in IDL similar as DIFF in matlab [message #86468 is a reply to message #86467] |
Tue, 12 November 2013 06:07  |
Matthew Argall
Messages: 286 Registered: October 2011
|
Senior Member |
|
|
> D=(shift(shift(A,0,1)-A,0,1)-(shift(A,0,1)-A))[*,2:*]
print, (Shift_Diff(Shift_Diff(A, DIRECTION=1, /EDGE_WRAP), DIRECTION=1, /EDGE_WRAP))[*,2:*]
|
|
|