OriginLab Origin C error "Ошибка проверки измерения векторной операции"
Я использую OriginPro 2017 и определяю функцию свертки для своих данных.
Мы все знаем, что нам нужны две функции f и g для свертки, поэтому я определяю f(x) как тело функции следующим образом (я устанавливаю 5 параметров c1, c2, c3, c4 и c5):
if(x<=0){
y=sqrt(c1/c2)*exp(-1*sqrt(c4));
}else if(0<x<c2){
y=sqrt(c1/(-1*x+c2))*exp(-1*sqrt(-1*c3*x+c4));
}else{
y=c5;
}
Затем я его скомпилирую, ошибки не возникает. Сохранить эту функцию как myfunc
, мы назовем это в функции подгонки свертки.
Создайте другую функцию, установите ее имя как cf
, Включить заголовочные файлы:
#include <ONLSF.H>
#include <fft_utils.h>
Ниже приведено тело функции моей функции свертки, и здесь, как вы можете видеть, я определяю g(x) как гауссову функцию (я также добавляю два параметра w1 и y1, поэтому у нас в этой функции всего семь параметров).
NLFitContext *pCtxt = Project.GetNLFitContext();
if ( pCtxt )
{
// Vector for the output in each iteration.
static vector vX, vY;
static int nSize;
BOOL bIsNewParamValues = pCtxt->IsNewParamValues();
// If parameters were updated, we will recalculate the convolution result.
if ( bIsNewParamValues )
{
//Sampling Interval
double dx = 0.05;
vX.Data(-16.0, 16.0, dx);
nSize = vX.GetSize();
vector vF, vG;
//Function f(x)
vF = nlf_myfunc(vX, c1, c2, c3, c4, c5);
//Function g(x)
vG = 1/(w1*sqrt(pi/2))*exp(-2*vX^2/w1^2);
//Pad zeroes at the end of f and g before convolution
vector vA(2*nSize-1), vB(2*nSize-1);
vA.SetSubVector( vF );
vB.SetSubVector( vG );
//Perform circular convolution
int iRet = fft_fft_convolution(2*nSize-1, vA, vB);
//Truncate the beginning and the end
vY.SetSize(nSize);
vA.GetSubVector( vY, floor(nSize/2), nSize + floor(nSize/2)-1 );
//Fitted Y
vY = dx*vY + y1;
}
//Interpolate y from x for the fitting data on the convolution result.
ocmath_interpolate( &x, &y, 1, vX, vY, nSize );
}
И это также не имеет ошибки, если вы скомпилируете его.
Но когда я использую его для своих данных, Origin жалуется на "Ошибка проверки измерения векторной операции".
Любой комментарий будет высоко ценится.