# 2.1.17.8.15 ocmath_simple_math

## Description

Perform arithmatic operation element-wised on two curves

## Syntax

int ocmath_simple_math( UINT nSize, double * pX, double * pY, UINT nSrcSize1, const double * pSrcX1, const double * pSrcY1, UINT nSrcSize2, const double * pSrcX2, const double * pSrcY2, int nOperator = MATHTOOL_OPT_ADD, int nRange = MATHTOOL_RNG_CUV, int nMethod = INTERP_TYPE_LINEAR, double dSmoothingFactor = 0 )

## Parameters

nSize
[input] the size of result curve
pX
[output] pointer to the x coordinates of result curve
pY
[output] pointer to the y coordinates of result curve
nSrcSize1
[input] the size of the first curve
pSrcX1
[input] pointer to the x coordinates of the first curve
pSrcY1
[input] pointer to the y coordinates of the first curve
nSrcSize2
[input] the size of the second curve
pSrcX2
[input] pointer to the x coordinates of the second curve
pSrcY2
[input] pointer to the y coordinates of the second curve
nOperator
[input] the operation between the two input curve
MATHTOOL_OPT_SUB subtract operation
MATHTOOL_OPT_DIV divide operation
MATHTOOL_OPT_MUL multiply operation
MATHTOOL_OPT_EXP exponent operation
nRange
[input] the range to perform the operation on
MATHTOOL_RNG_CUV perform the operation on entire curves
MATHTOOL_RNG_COM perform the operation on common x coordinates
MATHTOOL_RNG_UD reserved for future
nMethod
[input] interpolating method, only available when use MATHTOOL_RNG_CUV.
INTERP_TYPE_LINEAR(linear interpolation),
INTERP_TYPE_SPLINE(cubic spline interpolation with not-a-knot boundary condition, and the not-a-knot boundary condition assume that the 3rd order derivative are continuous on the 2nd and last 2nd points),
INTERP_TYPE_BSPLINE(B-Spline curve fitting using method by Dierckx.P)
dSmoothingFactor
[input] This argument specifies the closeness to the original data, only available when nMethod = INTERP_TYPE_BSPLINE. dSmoothingFactor >= 0.
By means of this parameter, the user can control the tradeoff between closeness of fit and smoothness of fit of the approximation.
If dSmoothingFactor is too large, the spline will be too smooth and signal will be lost ; if it is too small the spline will pick up too much noise.
In the extreme cases the program will return an interpolating spline if dSmoothingFactor=0 and the weighted least-squares polynomial of degree 3 if s is very large.

## Return

Return OE_NOERROR if succeed, otherwise, non-zero error code is returned.

## Examples

EX1

//Assume there is a workbook named "Book1" in the current project
void ocmath_simple_math_ex1()
{
Worksheet wks("Book1");
vector vA, vB, vC;

vA.Data(0.0, 6.0, 0.03);
int iCount = vA.GetSize();
vB.SetSize(iCount);
vC.SetSize(iCount);

for( int ii=0; ii<iCount; ii++ )
{
vB[ii] = sin(vA[ii]);
vC[ii] = cos(vA[ii]);
}

Dataset dsX(wks, 0);
Dataset dsY(wks, 1);

dsX.SetSize(iCount);
dsY.SetSize(iCount);
vector vx(iCount);
vector vy(iCount);
ocmath_simple_math(iCount, vx, vy, iCount, vA, vB, iCount, vA, vC, MATHTOOL_OPT_ADD);
dsX = vx;
dsY = vy;
}