comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » MPFITFUN .TIED
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: MPFITFUN .TIED [message #94694 is a reply to message #94684] Fri, 25 August 2017 07:12 Go to previous message
Craig Markwardt is currently offline  Craig Markwardt
Messages: 1869
Registered: November 1996
Senior Member
On Tuesday, August 22, 2017 at 4:28:58 AM UTC-4, tackm...@gmail.com wrote:
> Op maandag 21 augustus 2017 12:18:15 UTC+2 schreef Markus Schmassmann:
>> On 08/18/2017 02:47 PM, xxx@gmail.com wrote:
>>> I'm having some issues using fitting constraints using the MPFITFUN
>>> package in IDL.
>>>
>>> Basically, I have several parameters that I'm fitting, some of which
>>> are constrained to a single parameter (P[0]) as a factor of that
>>> parameter. As such, I set parinfo[*].tied so that, after printing,
>>> they read as follows: '0.662104 * P[0]' '0.245035 * P[0]' ...
>>>
>>> After fitting I read out the parameters, and even though P[0] has an
>>> appropriate value, it appears the constrained parameters have
>>> obtained the values (in this case) 0.66210400 0.24503500 (and P[0] is
>>> not 1., it is somewhere around 475 for my case) As such, the
>>> constraint does not seem to work for me. It just seems to return the
>>> factor with which I wanted to multiply P[0], but does not actually
>>> multiply it.
>>>
>>> Does anyone have an idea how to resolve this, or why it does not seem
>>> to work? Am I somehow using the wrong syntax for the .TIED keyword
>>> etc.? Any help is welcome. Many thanks!
>>
>> I haven't used MPFITFUN before, but from reading the code and your
>> problem description I have a few guesses what could have gone wrong.
>>
>> Any chance you have the TIED assigned to the wrong parameters?
>> e.g. parinfo[0].tied='0.662104 * P[0]'
>>
>> Any chance you use in the TIED definition a parameter with a higher number?
>> e.g. parinfo[1].tied='0.245035 * P[2]'
>>
>> Any chance that the result is correct except for the tied parameters?
>> If you use the other parameters to calculate the tied ones and then use
>> the forward function are you at a minimum?
>> You might have to get the derivatives (numerical or analytical) to verify.
>>
>> If none of that helps, write here a complete minimal working example of
>> the problem. Hopefully Craig has time to look into it.
>>
>> Good Luck, Markus
>
> Hi Markus,
>
> Many thanks for the feedback. However, turns out my problem was a much more basic one. I simply defined the syntax of the TIED string wrong.
>
> I defined it basically as follows: " '0.662104 * P[0]' ", so that after printing it would indeed say '0.662104 * P[0]', as I understood it from the manual.
> However, I should have just defined it as a string as follows: '0.662104 * P[0]' so that after printing it writes 0.662104 * P[0] (without the '). It's the presence of these quotation marks that somehow screwed up the MPFIT code (although I would've expected an error message in that case)
>
> So all's fine in the end :) Thanks for the help!

Glad you found your answer. MPFIT just EXECUTE()'s your .TIED expression something like this.
EXECUTE('P[1] = '+PARINFO[1].TIED)
So your tied expression should be an actual arithmetic expression. If you make it into a string, then IDL will happily try to coerce the string into a number. Try doing DOUBLE("0.662104") and you will get an answer!

Craig
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: IDL background job quits without error message
Next Topic: MPFITFUN multiple variable

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 20:10:39 PDT 2025

Total time taken to generate the page: 0.00352 seconds