Re: Re: Solving for coefficients...
- To: mathgroup@smc.vnet.net
- Subject: [mg12252] Re: [mg12204] Re: Solving for coefficients...
- From: "Jrgen_Tischer" <jtischer@pitagoras.univalle.edu.co>
- Date: Tue, 5 May 1998 03:29:48 -0400
Paul, puzzled as I was about this seemingly wonderful solution, I checked it on an example: In[1]:= nn={10,24,45,12,1,38,21,1}; In[2]:= data0={1.0002,1.2303,2.3456,4.5326,5.2113,40.3456,59.24,100.4321}; In[3]:= data=Flatten[{data0,data0.nn}] Out[3]= {1.0002,1.2303,2.3456,4.5326,5.2113,40.3456,59.24,100.4321,3082.29} In[4]:= dd=Rationalize[#]&@Transpose[Append[IdentityMatrix[Length[data]],10000data]] ; sol=LatticeReduce[dd] Out[4]= {{1,3,-2,0,0,0,0,0,0,-1}, {1,1,2,0,-1,-4,1,1,0,1}, {-1,0,-1,-3,-4,-2,2,0,0,0}, {4,-3,-1,-3,3,0,0,0,0,4}, {-2,2,2,-4,2,3,-2,0,0,4}, {-2,-1,-1,5,1,-1,2,-1,0,3}, {-1,-1,1,0,-1,0,-5,3,0,1}, {3,2,2,-2,-4,4,1,-2,0,2}, {1,1,4,0,-2,-8,-11,-21,1,0}} When I tried TranscendentalRecognize, the answer was Power::infy : Infinite expression 1/0 encountered. Out[101]= ComplexInfinity Did I miss the point? Jürgen -----Original Message----- From: Paul Abbott <paul@physics.uwa.edu.au> To: mathgroup@smc.vnet.net Subject: [mg12252] [mg12204] Re: Solving for coefficients... >Paul Abbott wrote: > >> Here is one approach which uses LatticeReduce (see the Mathematica >> Journal 6(2): 29-30). Define NValues for a, b, c etc., e.g., > >Here is a much simpler (and direct) approach to that I outlined before. >Write the experimentally determined values > > 59.2406 == 1.2303 a + 4.5326 b + 5.2113 c, as > > In[1]:= data={1.2303,4.5326,5.2113,59.2406}; > In[2]:= 10000 Rationalize[data] > Out[2]= {12303, 45326, 52113, 592406} > >Appending this vector (of length 4) to a 4x4 identity matrix and use >LatticeReduce: > > In[3]:= Append[IdentityMatrix[Length[data]],%]; > In[4]:= LatticeReduce[Transpose[%]] > Out[4]= {{-8, -4, -6, 1, 0}, {-13, 12, 4, -1, 19}, > {-21, -13, 39, -2, -6}, {-4, 36, -19, -1, -29}} > >In this case, the vector with last element 0, i.e., {-8, -4, -6, 1, 0} >expresses the exact (to this precision) solution, i.e., > > 59.2406 == 1.2301 (8) + 4.5327 (4) + 5.2113 (6) > >The other vectors are approximate solutions with the last element of >each vector showing the size of the error. Of course, in your problem, >all the multipliers must be positive. > >We combine the above steps into a procedure: > > In[5]:= identify[data_]:= LatticeReduce[ > Transpose[Append[IdentityMatrix[Length[data]],10000 >Rationalize[data]]]] > >and get the same answer as before: > > In[6]:= identify[data] > Out[6]={{-8, -4, -6, 1, 0}, {-13, 12, 4, -1, 19}, > {-21, -13, 39, -2, -6}, {-4, 36, -19, -1, -29}} > >If we perturb the data slightly, say > > In[7]:= data={1.2301,4.5327,5.2113,59.2406}; > In[8]:= identify[data] > Out[8]= {{-8, -4, -6, 1, 12}, {-20, 7, 10, -1, -7}, > {-4, -40, 13, 2, -3}, {11, 24, 22, -4, 21}} > >we now find two possible "solution" vectors: > > 1.2301 (8) + 4.5327 (4) + 5.2113 (6), and > 1.2301 (11) + 4.5327 (24) + 5.2113 (22), > >with errors of 12/10000 == 0.0012 and 0.0022 respectively. > >Cheers, > Paul > >____________________________________________________________________ >Paul Abbott Phone: +61-8-9380-2734 >Department of Physics Fax: +61-8-9380-1014 >The University of Western Australia Nedlands WA 6907 >mailto:paul@physics.uwa.edu.au AUSTRALIA >http://www.pd.uwa.edu.au/~paul > > God IS a weakly left-handed dice player >____________________________________________________________________ >