Le dimanche 12 juin 2011 à 19:30 -0500, Tomo Lazovich a écrit : > Just for reference, this is what exists so far of the Wavefunction > class. It also has some doctests so you can see the usage. > > https://github.com/lazovich/sympy/blob/c9a3ceb0d1addd9c89c30b90cbe0e55c9467fe0a/sympy/physics/quantum/state.py#L521 > Inheriting from Lambda and Function at the same time is weird. I guess it only works because you only use the methods that are overridden by Lambda. Instances of Lambda represent mathematical functions, but instances of Function represent expressions resulting from a function application (like sin(x)), so the same object can't meaningfully be both.
> On Sun, Jun 12, 2011 at 7:25 PM, Aaron Meurer <[email protected]> > wrote: > I think it will be cleaner to make it a class, even with the > little > you are doing. Note that if you just want something to return > some > expression (i.e., eval() would always return something), you > could > just use a Python function. > > By the way, Lambda really shouldn't even be in consideration. > If you > are naming something, that's a sign that you shouldn't use > Lambda. > It's similar with Python's lambda. You would never do > > mul = lambda x, y: x*y > > instead of > > def mul(x, y): > return x*y > > Aaron Meurer > > > On Sun, Jun 12, 2011 at 4:21 PM, Tomo Lazovich > <[email protected]> wrote: > > I think Wavefunction applies more to the latter case, where > there's a known > > function that we want to return. I sort of saw it as more of > a convenience > > than anything else. For one, returning the expression > itself, like > > sin(n*pi*x/L), means that if you want to actually evaluate > it at a point you > > have to use subs() (which I guess is not too bad, but its a > little less > > intuitive than simply getting the function and being able to > call psi(2)). > > It also can provide some basic helper functions for > calculating > > probabilities (f*conjugate(f)) or normalization constants. > The final reason > > I had is that it ended up making DifferentialOperator quite > simple...as > > simple as defining an _apply_operator_Wavefunction function > (though I guess > > it's just as simple to write _apply_operator_Function or > > _apply_operator_Lambda). I can go either way on this. > > > > Tomo > > > > On Sun, Jun 12, 2011 at 4:29 PM, Brian Granger > <[email protected]> wrote: > >> > >> I am -1 on having a Wavefunction class. The reason is that > a > >> wavefunction is just a plain old function. There is no > additional > >> logic needed over a regular function. But I want to > understand what > >> you are using these functions for. I can think of two > types of > >> functions needed in quantum: > >> > >> * An undefined function for use in representing an unknown > or abstract > >> state: <x|psi> => psi(x). For this I would just use > >> Function('psi')('x'). The name of the state (psi) can just > be used > >> for the name of the function. > >> * A function for a known quantum state like the particle in > a box. > >> For this case, we should just return the special function, > such as > >> sin(n*pi*x/L), etc. > >> > >> Can you clarify how the functions you are using relate to > these two cases? > >> > >> Cheers, > >> > >> Brian > >> > >> On Sat, Jun 11, 2011 at 2:56 PM, Tomo Lazovich > <[email protected]> > >> wrote: > >> > Lambda seems to work for me except for one thing. > >> > > >> > I have a class Wavefunction for representations of states > in continuous > >> > bases. It subclasses Lambda and provides some additional > convenience > >> > functions. One thing it would like to do internally is > calculate > >> > self.expr*conjugate(self.expr). I've found, however, that > because the > >> > Lambda > >> > uses dummy variables internally, even if I initialize the > function with > >> > a > >> > symbol set to real=True, that doesn't carry over to the > internal > >> > expression > >> > and so the conjugate isn't very well simplified. Is there > a way to get > >> > around this? > >> > > >> > Thanks! > >> > > >> > On Fri, Jun 10, 2011 at 9:19 PM, Aaron Meurer > <[email protected]> > >> > wrote: > >> >> > >> >> If you just want a placeholder to keep args, use > UndefinedFunction. > >> >> If you want it to have any more advanced functionality > at all, create > >> >> a subclass of Function. I admit I don't know anything > at all about > >> >> what you are doing, but it's very likely that the case > is the latter. > >> >> > >> >> Aaron Meurer > >> >> > >> >> On Fri, Jun 10, 2011 at 5:08 PM, Vinzent Steinberg > >> >> <[email protected]> wrote: > >> >> > On 10 Jun., 02:08, Brian Granger <[email protected]> > wrote: > >> >> >> Definitely use the existing Function stuff in sympy. > I am not sure > >> >> >> you will even have to subclass to do this. > >> >> > > >> >> > There is also UndefinedFunction (BTW, I think we > should rename it to > >> >> > AbstractFunction or similar) if you want a rather > abstract function. > >> >> > If you want to implement something like sin, you > should probably use > >> >> > Function. > >> >> > > >> >> > Vinzent > >> >> > > >> >> > -- > >> >> > 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. > >> >> > > >> >> > > >> >> > >> >> -- > >> >> 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. > >> >> > >> > > >> > > >> > > >> > -- > >> > Tomo Lazovich > >> > Harvard College '11 > >> > 278 Winthrop House Mail Center > >> > Cambridge, MA 02138 > >> > > >> > -- > >> > 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. > >> > > >> > >> > >> > >> -- > >> Brian E. Granger > >> Cal Poly State University, San Luis Obispo > >> [email protected] and [email protected] > >> > >> -- > >> 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. > >> > > > > > > > > -- > > Tomo Lazovich > > Harvard College '11 > > 278 Winthrop House Mail Center > > Cambridge, MA 02138 > > > > -- > > 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. > > > > -- > 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 sympy > [email protected]. > For more options, visit this group at > http://groups.google.com/group/sympy?hl=en. > > > > > > -- > Tomo Lazovich > Harvard College '11 > 278 Winthrop House Mail Center > Cambridge, MA 02138 > > > -- > 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 sympy > [email protected]. > For more options, visit this group at > http://groups.google.com/group/sympy?hl=en. -- 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.
