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 жалуется на "Ошибка проверки измерения векторной операции".

Любой комментарий будет высоко ценится.

0 ответов

Другие вопросы по тегам