- #1

a.mlw.walker

- 148

- 0

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:

The original surface that the model was trying to fit was:

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 doesn't 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

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;
```

Code:

```
double f( double tx, double tz, const double *p )
{
return p[0] + p[1]*tx + p[2]*tz;
}
```

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