MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: How to copy pattern from one expression to another?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg45357] Re: How to copy pattern from one expression to another?
  • From: drbob at bigfoot.com (Bobby R. Treat)
  • Date: Fri, 2 Jan 2004 04:23:46 -0500 (EST)
  • References: <bsbn05$lri$1@smc.vnet.net> <bsrhq7$qj7$1@smc.vnet.net> <bsu1cf$8gr$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Here's a different solution that may be useful:

ClearAll@linear
Solve[a + b #[[1]] == #[[2]] & /@ {{x1, y1}, {x2, y2}}, {a, b}] //
Simplify;
linear[{{x1_?AtomQ, y1_?AtomQ}, {x2_?AtomQ, y2_?
    AtomQ}}] = a + b #1 & /. First@%;
linear[{a__}] := linear /@ {a}

atom1 = {{a61, y61}, {a62, y62}};
atom2 = {{1, 2}, {3, 4}};
xx = {atom1, atom2};
linear[atom1]
linear[atom2]
linear[xx]
linear[{atom1, xx, atom2}]

The result at lowest level is a pure function, symbolic input is OK,
and Solve is called only once. (Versus using Fit many times.)

Bobby

drbob at bigfoot.com (Bobby R. Treat) wrote in message news:<bsu1cf$8gr$1 at smc.vnet.net>...
> Fit is defined only for numeric data, so... assuming that other kinds
> of data leads to evaluation of some function "g" which you can define,
> here's a solution:
> 
> ClearAll[f]
> f[x:{{_?NumericQ, 
>       _?NumericQ}, 
>      {_?NumericQ, 
>       _?NumericQ}}] := 
>   Block[{y}, Fit[x, {1, y}, 
>     y]]
> f[x:{{_?AtomQ, _?AtomQ}, 
>      {_?AtomQ, _?AtomQ}}] := g[x]
> f[{a__}] := f /@ {a}
> 
> Testing:
> 
> atom1 = {{a61, y61}, 
>     {a62, y62}}; 
> atom2 = {{1, 2}, {3, 4}}; 
> xx = {atom1, atom2}; 
> f[atom1]
> f[atom2]
> f[xx]
> f[{atom1, xx, atom2}]
> g[{{a61, y61}, {a62, y62}}]
> 0.9999999999999988 + 
>   1.0000000000000002*y
> {g[{{a61, y61}, {a62, y62}}], 
>   0.9999999999999988 + 
>    1.0000000000000002*y}
> {g[{{a61, y61}, {a62, y62}}], 
>   {g[{{a61, y61}, {a62, 
>       y62}}], 
>    0.9999999999999988 + 
>     1.0000000000000002*y}, 
>   0.9999999999999988 + 
>    1.0000000000000002*y}
> 
> Bobby
> 
> "Nico" <pipponep at hotmail.com> wrote in message news:<bsrhq7$qj7$1 at smc.vnet.net>...
> > Thanks you all for your replies.
> > Indeed, what you suggested only solves my partially my issue. I guess I
> > should get deeped into the problem...
> > Each xi I wrote in the previous messages represents of couple of (x,y)
> > coordinates in the form {{a1,y1},{a2,y2}} which represents the points to
> > which I have to apply function Fit[].
> > 
> > I.e. xx={{x11,x12,x13},x2,x3,x4,{x51,x52},x6,{x71,x72},x8}=
> > {...,{{a61,y61},{a62,y62}},...}
> > 
> > Now, if I set Fit[] to Listable, then I would get
> > 
> > Fit[xx,{1,x},x]={...,{{Fit[a61,{1,x},x],Fit[y61,{1,x},x]},{Fit[a62,{1,x},x],
> > Fit[y62,{1,x},x]}},...}
> > 
> > which obviously something meaningless.
> > I would therefore need something that "flattens" xx down to a list so that
> > only tokens like {{a1,y1},{a2,y2}} appear. I would then apply Fit[] in the
> > correct way, and then I would like to construct a list with the same pattern
> > that xx had...
> > Is it confusing? It is to me...
> > 
> > Please, let me know if you need further explanations. Thanks you all for
> > your help!
> > Nicola


  • Prev by Date: Re: Function interpolation
  • Next by Date: Re: RunThrough on Windows 2000
  • Previous by thread: Re: why Pi is not recognized as a positive number?
  • Next by thread: Re: Mathematica + NETLink + CodeDom- Example 2