Re: Constrained fit of a straight line: fixed intercept [message #72263] |
Fri, 27 August 2010 03:45  |
David Grier
Messages: 35 Registered: July 2010
|
Member |
|
|
On 8/27/10 4:39 AM, David Grier wrote:
> On 8/27/10 12:36 AM, Joe Daal wrote:
>> Hi,
>>
>> I am not sure how easy this problem is, but it sure gave me hell
>> today.
>> I have the following vector arrays: X, Y,& Y_errors. There are 5
>> elements in each and they do form a nice line describes by Y = A + BX.
>> I need to fit this line with B as a free parameter and constrain A to
>> pass by the the third point.
>> So the problem narrows down to one parameter as: Y = (Y0 - BX0) + BX,
>> whre Y0 and B0 and the third point values (i.e., X[2] and Y[2]).
>> I tried using MPFIT with the PARINFO keyword. It just didn't work.
>> Any ideas? Thanks....
>>
>> -Joe
>
> How about:
>
> pivot = 2
> dy = y - y[pivot]
> dx = x - x[pivot]
> w = where(dx ne 0, count)
> if count gt 0 then $
> B = mean(dy[w]/dx[w]) $
> else $
> B = 0.
... and if you want to weight the results by the experimental errors:
weights = abs(1./y_errors[w]) ; for instrumental errors
B = mean(weights * dy[w] / dx[w]) / mean(weights)
TTFN,
David
|
|
|
Re: Constrained fit of a straight line: fixed intercept [message #72264 is a reply to message #72263] |
Fri, 27 August 2010 01:39   |
David Grier
Messages: 35 Registered: July 2010
|
Member |
|
|
On 8/27/10 12:36 AM, Joe Daal wrote:
> Hi,
>
> I am not sure how easy this problem is, but it sure gave me hell
> today.
> I have the following vector arrays: X, Y,& Y_errors. There are 5
> elements in each and they do form a nice line describes by Y = A + BX.
> I need to fit this line with B as a free parameter and constrain A to
> pass by the the third point.
> So the problem narrows down to one parameter as: Y = (Y0 - BX0) + BX,
> whre Y0 and B0 and the third point values (i.e., X[2] and Y[2]).
> I tried using MPFIT with the PARINFO keyword. It just didn't work.
> Any ideas? Thanks....
>
> -Joe
How about:
pivot = 2
dy = y - y[pivot]
dx = x - x[pivot]
w = where(dx ne 0, count)
if count gt 0 then $
B = mean(dy[w]/dx[w]) $
else $
B = 0.
TTFN,
David
|
|
|
Re: Constrained fit of a straight line: fixed intercept [message #72344 is a reply to message #72263] |
Fri, 27 August 2010 13:57  |
Joe Daal
Messages: 9 Registered: May 2010
|
Junior Member |
|
|
On Aug 27, 5:45 am, David Grier <david.gr...@nyu.edu> wrote:
> On 8/27/10 4:39 AM, David Grier wrote:
>
>
>
>> On 8/27/10 12:36 AM, Joe Daal wrote:
>>> Hi,
>
>>> I am not sure how easy this problem is, but it sure gave me hell
>>> today.
>>> I have the following vector arrays: X, Y,& Y_errors. There are 5
>>> elements in each and they do form a nice line describes by Y = A + BX.
>>> I need to fit this line with B as a free parameter and constrain A to
>>> pass by the the third point.
>>> So the problem narrows down to one parameter as: Y = (Y0 - BX0) + BX,
>>> whre Y0 and B0 and the third point values (i.e., X[2] and Y[2]).
>>> I tried using MPFIT with the PARINFO keyword. It just didn't work.
>>> Any ideas? Thanks....
>
>>> -Joe
>
>> How about:
>
>> pivot = 2
>> dy = y - y[pivot]
>> dx = x - x[pivot]
>> w = where(dx ne 0, count)
>> if count gt 0 then $
>> B = mean(dy[w]/dx[w]) $
>> else $
>> B = 0.
>
> ... and if you want to weight the results by the experimental errors:
>
> weights = abs(1./y_errors[w]) ; for instrumental errors
> B = mean(weights * dy[w] / dx[w]) / mean(weights)
>
> TTFN,
>
> David
Great! Thank you.
-Joe
|
|
|