【お知らせ】この部分は英語原文のみでの提供となります。何卒ご了承ください。
2.1.23.2.5 ocmath_find_inflection_point
Contents
Description
Find x coordinate of the inflection points for the peak data by an iterative method and calculate the peak width at base
Syntax
int ocmath_find_inflection_point( UINT lSize, const double * px, const double * py, double xc, double w, double * pLeft, double * pRight, double * pBottomWidth )
Parameters
- lSize
- [input] size of the data
- px
- [input] pointer to x coordinates of the data
- py
- [input] pointer to y coordinates of the data
- xc
- [input] peak position
- w
- [input] evaluation of the inflection position
- pLeft
- [output] inflection position in the left of the peak position
- pRight
- [output] inflection position in the right of the peak position
- pBottomWidth
- [output] the width of the peak between its two feet
Return
Return OE_NOERROR if succeed, otherwise, non-zero error code is returned.
Examples
EX1
void ocmath_find_inflection_point_ex1() { // the full Peak data with peak position xc=4 vector vx = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // x should be in increasing order vector vy = {8.15988E-4, 0.01832, 0.16901, 0.64118, 1, 0.64118, 0.16901, 0.01832, 8.15988E-4, 1.49453E-5} // the left inflection point will be searched in the range restricted between xc-3w and xc // and its initial start position is xc-w/2 // Similarly the right inflection point in the range between xc and xc+3w with an initial position xc+w/2 // So you may need to supply a good w value in order to get a good inflection coordinate value as it is an iterative method double left; // left and right are the x coordinate of the inflection points double right; double width; // peak width at base ocmath_find_inflection_point(vx.GetSize(), vx, vy, 4, 2, &left, &right, &width); }
EX2
//Before running, make sure the active layer is a worksheet with two columns containing the X/Y data void ocmath_find_inflection_point_ex2() { // get the peak data from a Origin Worksheet Worksheet wks=Project.ActiveLayer(); if(!wks) printf("no active worksheet found\n"); Dataset dsSrcX(wks,0); Dataset dsSrcY(wks,1); // convert the datasets to vectors int nSize=dsSrcY.GetSize(); vector vecX(nSize); vector vecY(nSize); vecX=dsSrcX; vecY=dsSrcY; double xc=0.0,w=4.236; // supply your own parameters according to the input data double dLeft, dRight, dBottomWidth; ocmath_find_inflection_point(nSize, vecX, vecY, xc, w, &dLeft, &dRight, &dBottomWidth); printf("%f %f %f\n",dLeft, dRight, dBottomWidth); }
Remark
See Also
Header to Include
origin.h