Re: Solve or LinearSolve or ...?

*To*: mathgroup at smc.vnet.net*Subject*: [mg46394] Re: Solve or LinearSolve or ...?*From*: bobhanlon at aol.com (Bob Hanlon)*Date*: Mon, 16 Feb 2004 23:43:02 -0500 (EST)*References*: <c0qitm$k72$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Here's a start: FindCoefficients[basis_?VectorQ, expr_, f_Symbol] := Module[{var, uvar, r, soln, p}, var = Union[Cases[basis, f[__], Infinity]]; uvar=Table[Unique[],{Length[basis]}]; r=Flatten[Solve[Thread[uvar==basis], var]]; soln=CoefficientList[expr /. r, uvar]; p=Join[Table[1,{Length[basis]-1}],{All}]; Table[Last[soln[[Sequence@@(p=RotateRight[p])]]], {Length[basis]}]]; FindCoefficients[{f[a,a],f[a,b],f[b,a],f[b,b]}, f[a,a]+(1/2)f[b,a],f] {1, 0, 1/2, 0} FindCoefficients[{f[a]+f[b],f[a]-f[b]},f[a],f] {1/2, 1/2} Bob Hanlon In article <c0qitm$k72$1 at smc.vnet.net>, semorrison_ at hotmail.com wrote: << I'm trying to write a function to calculate coefficients in a basis; for example FindCoefficients[{f[a,a],f[a,b],f[b,a],f[b,b]}, f[a,a]+(1/2)f[b,a], _f] should produce {1,0,1/2,0}. The third argument there means `assuming all objects matching _f are linearly independent'. More difficult, it should produce FindCoefficients[{f[a]+f[b],f[a]-f[b]},f[a], _f] == {1/2,1/2}. And finally, it should work with rational functions as coefficients, not just numbers, and it should run fast enough to be useful with bases with thousands of elements. :-) I've spent quite some time trying to write something like this, and I'm finding it really difficult! I can't seem to use LinearSolve in any way -- it seems to trip up when I use rational functions as coefficients. I've been trying to work around Solve, but the only things that work are glacial in pace! Any ideas or suggestions?