On Sun, Dec 2, 2012 at 9:46 AM, Chris Smith <[email protected]> wrote: > I don't follow you...if the function or Indexed has a different name then > it's different from others, and if the argument(s) of any function or > Indexed are different they represent different objects. > >>>> eqs=Tuple(f(1,2)+f(i)-3,f(1,2)-f(i)-4) >>>> solve(eqs, eqs.atoms(Function)) > {f(i): -1/2, f(1, 2): 7/2}
But as I said in my previous mail, I would expect a subscripted symbol (which IndexedBase intends to be) to be treated as a first-classs symbolic object equal to i,j etc without resorting to any additional effort like atoms, dummies, zip etc. On Sun, Dec 2, 2012 at 4:14 PM, Chris Smith <[email protected]> wrote: > What about this? > class Syms(object): > def __new__(cls, name): > obj = object.__new__(cls) > obj.name = name > return obj > def __getitem__(self, *i): > return Indexed(self.name, *i) > def __call__(self, *i): > return Indexed(self.name, *i) > >>>> eqs=Tuple(a[i]+a[j]-3,a[i]-a[j]+4) >>>> idx=eqs.atoms(Indexed) >>>> dum=[Dummy() for ii in idx] # don't use i as loop variable >>>> Dict(solve(eqs.subs(zip(idx, dum)), dum)).subs(zip(dum,idx)) > {a[i]: -1/2, a[j]: 7/2} >>>> Sum(a[i],(i,1,4)) > Sum(a[i], (i, 1, 4)) >>>> _.doit() > a[1] + a[2] + a[3] + a[4] But the above still needs all that atoms and dummies and subs and zip stuff stuff! :-( Too complicated for what should be elementary usage. And I did myself try your suggeested implementation, but observe my comments inlined: from sympy import Indexed class SymList ( object ) : def __new__ ( cls, name ) : obj = object . __new__ ( cls ) obj . name = name return obj def __getitem__ ( self, * i ) : return Indexed ( self . name, * i ) def __call__ ( self, * i ) : return Indexed ( self . name, * i ) Sorry if I am mistaken but the above seems little more than a thin wrapper around Indexed. What does it provide that Indexed does not? a=SymList('a') a[1] Out[4]: a[1] a(1) Out[5]: a[1] So far so good, but see: from sympy import symbols i,j=symbols('i,j') a[i,j] Out[8]: a[(i, j)] a(i,j) Out[9]: a[i, j] This discrepancy is an infecility: if for single items you provide [] and () as equal (which is not necessary and IMHO [] would be enough) then the same must be true for tuples, but a[i,j] reads *args as a tuple of a tuple (of i and j), whereas a(i,j) reads *args as a tuple of i and j. from sympy import solve solve([a[i]+a[j]-3,a[i]-a[j]+4]) Out[12]: [] :-( So still my desired behaviour doesn't happen... Sorry for being persistent, but really I'd very much like to use some like (hopefully IndexedBase) in this manner without resorting to "tricks" like atoms, dummies etc etc. I hope it would not be a serious problem to provide that in SymPy. Since subscripted (i.e. indexed) variables (and in some case even super+sub-scripted or i.o.w. multi-index variables) are widely used in mathematics I hope I would not be the only person to be benefited. -- Shriramana Sharma -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.
