## levenberg marquardt C coding algorithm

HI guys. Haven't been here in a while...
I have an algorithm attached that uses the levenberg marquardt non linear curve fitting alogrithm to fit a surface.
My C coding skills are reasonable, however I am struggling to adjust the model so that I can fit my curve to it. I want to use this algorithm as its a nice standalone algorithm as opposed to some of these otherones that come as part of much larger packages.
I have a simple dataset:
double tx[5] = {1, 2, 3, 4, 5};
double tz[5] = {1.2, 2.693, 4.325, 6.131, 8.125};
that I am trying to fit to the following function:
Code:
 for (i = 0; i <sizeof(tz)-1; i++)
{
invtrig = arcsinh(sinh(p[2])*exp(p[0]*(i+1)*2*3.145));
Fitted_Curve[i] = (1/(p[0]*p[1]))*(p[2]-invtrig);
x += pow((tz[i]-Fitted_Curve[i]), 2);

}
return x;
The original surface that the model was trying to fit was:
Code:
double f( double tx, double tz, const double *p )
{
return p[0] + p[1]*tx + p[2]*tz;
}
Due to the simplicity of this algorithm I am struggling to see how to "convert" it all over so that it will successfully solve mine (which i have the solution to). I can get it to compile if I force it to, but it doesnt converge on the correct results at all - heads to #NAN#
I have attached the code, there is one file called myalgorithm.c which I have been working on to get mine to work, and then there is surface1.c which is the example. Obviously only bring one into a project at a time as they both have a main in.
Thanks
Attached Files
 myalgorithm.zip (22.6 KB, 1 views)

 PhysOrg.com science news on PhysOrg.com >> 'Whodunnit' of Irish potato famine solved>> The mammoth's lament: Study shows how cosmic impact sparked devastating climate change>> Curiosity Mars rover drills second rock target