Ganesh Krishnan wrote:
> Hey all,
>
>
>
> I am trying to use the PDL::Fit::LM module to fit a 2D circle to some
> data. The equation of a 2D circle is y=(r^2-(x-x0)^2)^0.5+y0. I am
> running into problems. I get my guess parameters back as the optimal
> parameters. Is there anything that jumps out at you as wrong? I have
> appended the code below.
You don't seem to be using a value for $r.
Sometimes trying out a *very* simple problem
or one of the examples can help sort things
out. Good luck.
--Chris
>
> Thanks
>
> Ganesh.
>
>
>
> use PDL;
>
> use PDL::Fit::LM;
>
>
>
> my $xdata=pdl [3,0,5];
>
> my $ydata=pdl [4,5,0];
>
> my $initp=pdl [1,1,1];
>
> my $wt=1;
>
> my ($yf,$pf,$cf,$if) = lmfit $xdata, $ydata, $wt, \&circlefit, $initp,
> {Maxiter => 300, Eps => 1e-3};
>
>
>
> print "Parameters are ",$pf,"\n";
>
>
>
> sub circlefit {
>
> # leave this line as is
>
> my ($x,$par,$ym,$dyda) = @_;
>
>
>
> # $m and $b are fit parameters, internal to this function
>
> # call them whatever make sense to you, but replace (0..1)
>
> # with (0..x) where x is equal to your number of fit parameters
>
> # minus 1
>
> my ($x0, $y0, $r) = map { $par->slice("($_)") } (0..2);
>
>
>
> # Write function with dependent variable $ym,
>
> # independent variable $x, and fit parameters as specified above.
>
> # Use the .= (dot equals) assignment operator to express the
> equality
>
> # (not just a plain equals)
>
> $ym .= ($r**2 - ($x - $x0)**2)**0.5 + $y0;
>
>
>
> # Edit only the (0..1) part to (0..x) as above
>
> my (@dy) = map {$dyda -> slice(",($_)") } (0..2);
>
>
>
> # Partial derivative of the function with respect to first
>
> # fit parameter ($m in this case). Again, note .= assignment
>
> # operator (not just "equals")
>
> $dy[0] .= ($r**2 - ($x - $x0)**2)**(-0.5)*($x - $x0);
>
>
>
> # Partial derivative of the function with respect to next
>
> # fit parameter ($b in this case)
>
> $dy[1] .= 1;
>
> $dy[2] .= $r*($r**2 - ($x - $x0)**2)**(-0.5);
>
>
>
> # Add $dy[ ] .= () lines as necessary to supply
>
> # partial derivatives for all floating paramters.
>
> }
_______________________________________________
Perldl mailing list
[email protected]
http://mailman.jach.hawaii.edu/mailman/listinfo/perldl