【お知らせ】この部分は英語原文のみでの提供となります。何卒ご了承ください。
2.1.17.4.3 ocmath_integrate
Contents
Description
Integrate area under curve using Trapezoid Rule. Missing values are ignored.
Syntax
int ocmath_integrate( const double * pXData, const double * pYData, uint i1, uint i2, IntegrationResult * pInteg, double * pIntegral = NULL, int areaType = MATHEMATICAL_AREA, const double * pBaseLine = NULL, bool bSortAscending = false, int nMethodSearchHalfWidth = SEARCH_FROM_BOTH_ENDS)
Parameters
- pXData
- [input] pointer to X vector data
- pYData
- [input] pointer to Y vector data
- i1
- [input] starting index for the integration
- i2
- [input] ending index (inclusive) for the integration
- pInteg
- [output] result of integration.
- pIntegral
- [output] optional cumulative vector from the integration, must be allocated with with at least (i2+1) points
- areaType
- [input] MATHEMATICAL_AREA, direct cumulative vector from the integration; ABSOLUTE_AREA, integrate absolute area
- pBaseLine
- [input] integrate baseline
- bSortAscending
- [input] sort X before perform integration
- nMethodSearchHalfWidth
- [input] SEARCH_FROM_BOTH_ENDS, find half width from two ends by using linear search; SEARCH_FROM_PEAK, find half width from peak center by using linear search
Return
return OE_NOERROR for success, otherwise return errors
Examples
EX1
// This example reports all the properties of an ocmath_IntegResult structure after integrating a plotted dataset. // Active window must be a 2D Graph window with plotted data. void ocmath_integrate_ex1() { printf("Area = %f\n", ocmath_integrate_sub1(Project.ActiveCurveBase())); } // Function dumps integration result and returns area double ocmath_integrate_sub1(curvebase& cuv, IntegrationResult* presult = NULL, int nFrom = 0, int nTo = -1) { IntegrationResult result; // make a local copy of the input curve so that we can be sure that it is numeric(double) so that // we can get its double* directly to pass into ocmath functions which all expect double* from vectors Curve cc(cuv); if(nTo < 0) nTo = cc.GetUpperIndex(); vector vx, vy; cc.CopyData(vx, vy); if(ocmath_integrate(vx, cc, nFrom, nTo, &result)) return NANUM; if(presult) *presult = result; else // show in script window if NULL for presult { Tree trTemp; TreeNode tr = trTemp.AddNode("IntegResults"); tr = result; out_tree(tr); } return result.Area; }
EX2
//integrate nY col with baseline nYb col from given range of index //nY col is assumed to have its sample interval, or using Row# as X //nYb is assumed to share same X as nY int integ_with_base(Worksheet wks, int nY, int nYb, IntegrationResult& result = NULL, int nFrom = 0, int nTo = -1) { Column yy(wks, nY); Column yb(wks, nYb); if(!yy || !yb) return -1; vector vy; vectorbase &y1 = yy.GetDataObject(); vectorbase &y2 = yb.GetDataObject(); vy = y1 - y2; double x1, xinc; if(!yy.IsEvenSampling(&x1, &xinc)) x1 = xinc = 1; double x2 = x1 + (vy.GetSize()-1) * xinc; vector vx; vx.Data(x1, x2, xinc); ASSERT(vx.GetSize() == vy.GetSize()); if(nTo < 0) nTo = vy.GetSize()-1; return ocmath_integrate(vx, vy, nFrom, nTo, &result); } void test_integ_with_base(int nFrom = 0, int nTo = -1, int nY = 0, int nB = 1) { Worksheet wks = Project.ActiveLayer(); IntegrationResult result; int nErr = integ_with_base(wks, nY, nB, result, nFrom, nTo); if(nErr != 0) out_int("Err ", nErr); else { Tree trTemp; TreeNode tr = trTemp.AddNode("IntegResults"); tr = result; out_tree(tr); } }
Remark
See Also
Header to Include
origin.h