【お知らせ】この部分は英語原文のみでの提供となります。何卒ご了承ください。
2.1.17.3.1 ocmath_derivative
Contents
Description
Simple derivative calculations without smoothing. Missing values are ignored. There is no smoothing performed in this function. Derivative is computed by taking the average of the two data points slopes from the previous and next data points.
Syntax
int ocmath_derivative( const double * pXData, double * pYData, uint nSize, DWORD dwCntrl = 0 )
Parameters
- pXData
- [input] pointer to X vector data
- pYData
- [modify] pointer to Y vector data, result of derivatives are put back to replace original data
- nSize
- [input] number of points in pXData and pYData
- dwCntrl
- [input] options, DERV_PEAK_AS_ZERO, will fill zero if data change direction, otherwise the average is used
Return
return OE_NOERROR for success, otherwise return errors
Examples
EX1
// Create some data and compare the average and zero fill method of numerical derivative void ocmath_derivative_ex1() { GraphLayer gl = Project.ActiveLayer(); if (!gl) { out_str("Active layer is not a graph."); return; } DataPlot dp = gl.DataPlots(0); DataRange dr; vector vx, vy; if(dp.GetDataRange(dr)) { DWORD dwPlotID; if(dr.GetData(DRR_GET_DEPENDENT | DRR_NO_FACTORS, 0, &dwPlotID, NULL, &vy, &vx) < 0) { printf("get data failed GetData"); return; } } // Create copies of the 'y' data to operate on vector vderiv1; vderiv1 = vy; vector vderiv2; vderiv2 = vy; Worksheet wks; wks.Create("Derivative"); wks.SetSize(-1, 4); DataRange drOut; drOut.Add("X", wks, 0, 0, -1, 0); drOut.Add("X", wks, 0, 1, -1, 1); drOut.Add("X", wks, 0, 2, -1, 2); drOut.Add("X", wks, 0, 3, -1, 3); drOut.SetData(vx, false, 0); drOut.SetData(vy, false, 1); // First try using averaging if(OE_NOERROR == ocmath_derivative(vx, vderiv1, vy.GetSize())) { drOut.SetData(vderiv1, false, 2); } // Now use the fill with zero option if(OE_NOERROR == ocmath_derivative(vx, vderiv2, vy.GetSize(), DERV_PEAK_AS_ZERO)) { drOut.SetData(vderiv2, false, 3); } }
Remark
See Also
Header to Include
origin.h