The Origin Forum
File Exchange
Try Origin for Free
The Origin Forum
Home | Profile | Register | Active Topics | Members | Search | FAQ | Send File to Tech support
 All Forums
 Origin Forum
 Origin Forum
 Increase fitted datapoints

Note: You must be registered in order to post a reply.
To register, click here. Registration is FREE!

Screensize:
UserName:
Password:
Anti-Spam Code:
Format Mode:
Format: BoldItalicizedUnderlineStrikethrough Align LeftCenteredAlign Right Horizontal Rule Insert HyperlinkUpload FileInsert Image Insert CodeInsert QuoteInsert List
   
Message:

* HTML is OFF
* Forum Code is ON
Smilies
Smile [:)] Big Smile [:D] Cool [8D] Blush [:I]
Tongue [:P] Evil [):] Wink [;)] Clown [:o)]
Black Eye [B)] Eight Ball [8] Frown [:(] Shy [8)]
Shocked [:0] Angry [:(!] Dead [xx(] Sleepy [|)]
Kisses [:X] Approve [^] Disapprove [V] Question [?]

 
Check here to subscribe to this topic.
   

T O P I C    R E V I E W
StephanLom Posted - 07/02/2009 : 05:26:19 AM
Hello everyone,
I'm fitting several datasets with a NLFit using a user definded fitting function.
The tricky part is, that I have to build two numerical integrals, while one is the integral
of the fitted function. Even though I use the trapezoid rule, the intergal's accuracy is
not satisfying. I have around 2000 datapoints, but when I look at the fitted data Origin
seems to use only 100 datapoints. Can anyone tell me how I can increase the number of
fitted datapoints to increase the solutions accuracy?

Thanks
Stephan



#include <stdio.h>
#include <data.h>
#include <math.h>
#include <utilities.h>

#include <origin.H>
#include <ONLSF.H>

//----------------------------------------------------------
//
void _nlsfManasOriginlabs(
// Fit Parameter(s):
double Ap, double Ep, double n, double b, double Ad, double Ed, double R, double Iq, double I0,
double Htot, double cf,
// Independent Variable(s):
double T,
// Dependent Variable(s):
double& alp, double& Y, double& H)
{
// Beginning of editable part
NLFitContext *pCtxt = Project.GetNLFitContext();
// The idea is the following: whenever parameter values change during fitting, we want to recalculate
// the values for all three dependent variables and store them in the static vectors vY, valp, vH.
// Then we use them to get individual values on every call.

NLSFCURRINFO stCurrInfo;
if ( pCtxt->GetFitCurrInfo(&stCurrInfo) )
{
// These three vectors contain the current computed values of the dependent variables:
static vector vY, valp, vH;

if ( stCurrInfo.bNewParamValues ) // if parameter values changed
{
// Must recalculate:
///////////////////////////////////////
// Get the independent data from the context:
vector vT;
pCtxt->GetIndepData(&vT);
int nSize = vT.GetSize();

///////////////////////////////////////
// Compute vY:
vY.SetSize(nSize);
vH.SetSize(nSize);
valp.SetSize(nSize);
// Here I assume that vY[0], vH[0], and valp[0] are 0, since ii-1 is negative if ii = 0
vY[0] = 0.;
vH[0] = 0.;
valp[0] = 0.;
for (int ii = 1; ii < nSize; ii++)
{
vY[ii]=0.5*(vT[ii]-vT[ii-1])*Ad*b*(exp(-Ed/(R*vT[ii]))+exp(-Ed/(R*vT[ii-1])))+vY[ii-1];
valp[ii]=(Ap*exp(-Ep/(R*vT[ii]))*(Iq-(I0*exp(-vY[ii])))*(1-(vH[ii-1]/Htot))*(1-(vH[ii-1]/(cf*Htot)))^n)*Htot;
vH[ii]=0.5*(vT[ii]-vT[ii-1])*(valp[ii] + valp[ii-1])*b+vH[ii-1];
}
//printf("vY[nSize]");
}

// Just return the already calculated quantities:
int index = stCurrInfo.nCurrDataIndex;
Y = vY[index];
alp = valp[index];
H = vH[index];
}
// End of editable part
}

I'm using:
Origin 8G SR4 v8.0951
1   L A T E S T    R E P L I E S    (Newest First)
StephanLom Posted - 07/02/2009 : 05:48:00 AM
Solved it, thanks though :)

The Origin Forum © 2020 Originlab Corporation Go To Top Of Page
Snitz Forums 2000