       Re: Concurrent Curve Fitting...

• To: mathgroup at smc.vnet.net
• Subject: [mg18623] Re: [mg18562] Concurrent Curve Fitting...
• From: "Wolf, Hartmut" <hwolf at debis.com>
• Date: Tue, 13 Jul 1999 01:01:40 -0400
• Organization: debis Systemhaus
• References: <199907100618.CAA03020@smc.vnet.net.>
• Sender: owner-wri-mathgroup at wolfram.com

```Hello Robert,

Robert Carneim schrieb:
>
> I have two sets of data which are related in such a way that, when plotted,
> they should have the same shape (or I want to force the curve fits to have
> the same shape), but at a different location.
> So, for example (and simplicity} suppose I have two sets of data which can
> be fit by lines, y=mx+b. I want to fit data set 1 to (y-y1)=m(x-x1)+b, and
> data set 2 to (y-y2)=m(x-x2)+b, where m and b are common and xn and yn are
> specific to the data set.
> This is a fairly easy to do indirectly, even by hand, but is there a way to
> get Mathematica to do this directly, i.e., finding the two curve fits
> concurrently? Obviously, I'm trying to do this for much more complex models.
>
I'm not quite shure whether I understand you fully, but I'll work out an
example that might help you (this is just a simple idea, but perhaps
there ar much superior methods):

We want to fit two data sets according to the functions f1 = m x + b1,
and
f2 = m x + b2, i.e. with the _same_ m, but different b.

We prepare two data sets, the first one:

In:= m1=0.77; b1=1.1;
In:= d1={#,m1 # + b1 + 1.7  Random[]}&/@(2 Range)
Out=
{{2,3.08172},{4,4.755},{6,6.6166},{8,7.43221},{10,9.896},{12,10.9624},{14,
12.5774},{16,14.343},{18,15.6232},{20,17.1432}}
In:= f1=Fit[d1,{1,x},x]
Out= 1.65091+0.781106 x

this is the _separate_ fit for set 1. We do the same for set 2:

In:= m2=0.74; b2=-4.;
In:= d2={#,m2 # + b2 + 1.5 Random[]}&/@(2 Range-1)
Out=
{{1,-2.64292},{3,-1.19437},{5,1.05521},{7,2.15956},{9,3.0965},{11,5.30787},{
13,6.80649},{15,7.87324},{17,9.56328},{19,11.4821},{21,11.756}}
In:= f2=Fit[d2,{1,x},x]
Out= -3.14419+0.742554 x

(We have chosen sligthly different m-values for each set, the fits
respect that, and both sets are shifted)

Now the idea is to tag each set, in order to join them for a single
combined fit:

In:= dd1=Transpose[Insert[Transpose[d1],Table[1,{10}],2]]
In:= dd2=Transpose[Insert[Transpose[d2],Table[2,{11}],2]]

The 'constants' b now become functions of the tag:

In:= c1[_,1]=1; c1[_,2]=0;
In:= c2[_,1]=0; c2[_,2]=1;

The separate fits work with our new representation (and give same
results):

In:= Fit[dd1,{c1[x,y],x},{x,y}]
Out= 0.781106 x+1.65091 c1[x,y]

In:= Fit[dd2,{c2[x,y],x},{x,y}]
Out= 0.742554 x-3.14419 c2[x,y]

Taking the "wrong constants" for each set gives:

In:= Fit[dd1,{c2[x,y],x},{x,y}]
Out= 0.899028 x+0. c2[x,y]

In:= Fit[dd2,{c1[x,y],x},{x,y}]
Out= 0.527733 x+0. c1[x,y]

which is the same as when you do

In:= Fit[d1,{x},{x}]
Out= 0.899028 x

In:= Fit[d2,{x},{x}]
Out= 0.527733 x

The simultanious fit now simply is:

In:= Fit[Join[dd1,dd2],{c1[x,y],c2[x,y],x},{x,y}]
Out= 0.759076 x+1.89324 c1[x,y]-3.32594 c2[x,y]

you clearly see a compromise value for m (the b have adapted too, due to
a 'false' value for m with respect to each set)

---regards, hw

```

• Prev by Date: Re: Concurrent Curve Fitting...
• Next by Date: Re: trouble with greek letter output to EPS
• Previous by thread: Re: Concurrent Curve Fitting...
• Next by thread: Re: Concurrent Curve Fitting...