Yes, the application of a non-trivial transformation within simplify(), like for sin(2*x) in your example, is perfectly acceptable. In that case I would consider that the user asked for simplification, so it is a good thing to perform transformations.
I think we actually agree on the application of trivial transformations automatically. Sorry for the confusion. Le mercredi 25 mars 2015 16:55:35 UTC-4, Xiang Gao a écrit : > > > > On Wednesday, March 25, 2015 at 4:02:31 PM UTC-4, [email protected] > wrote: >> >> Hi, >> >> You mean that a+|0> would return an explicit first-quantized wavefunction >> if possible ? >> > > Yes you are right. I want to combine first quantization and second > quantization together and use a unique framework. > > >> >> For the application of the Wicks theorem, you would like to somehow >> include it into the simplify() routines ? Depending on the case, the user >> may not want to apply Wicks theorem in some particular formula. >> > >> In general, I think SymPy should not apply non-trivial transformations >> unless explicitly asked to do so, but maybe others can comment on that too. >> > > Yes you are right, I want to include it into routines like simplify(). Bun > simplify() don't always use Wicks theorem. Whether to use depends on > guessing what the user want. I don't quite agree with that "I think SymPy > should not apply non-trivial transformations unless explicitly asked to do > so", below is an example: > > For example: > >>>a = sin(2*x)-2*sin(x)*cos(x) > >>>print(a) > -2*sin(x)*cos(x)+sin(2*x) > >>>print(simplify(a)) > 0 > > sin(2*x) is non-trivial, but it is applied. > > For me, I think trivial transformations is always applied automatically, > for example x+x always 2*x, and whether non-trivial transformations is > applied depends. > > >> Le mercredi 25 mars 2015 13:39:26 UTC-4, Xiang Gao a écrit : >>> >>> Hi, >>> >>> Thank you for your example. I know that sympy.physics support second >>> quantization. What I want to do is trying to make a uniform interface to do >>> both first quantization and second quantization. For example, if I tell the >>> computer that (a+) is the operator that put one electron into the (1 >>> particle) ground state, when I put (a+)|0>, the computer automatically >>> returns the ground state of system . I also hope that the computer is more >>> smart, for example, the computer should know when to apply wicks theorem to >>> do further calculation and you don't have to explicitly tell it to do so. >>> >>> Answer your question: >>> I will make symbolic density matrix (if approved by GSoC). >>> >>> On Monday, March 23, 2015 at 11:27:35 AM UTC-4, [email protected] >>> wrote: >>>> >>>> Hi Xiang, >>>> >>>> I am not familiar with GSoC and I can't comment on that, but SymPy does >>>> support second quantization. There is a second quantization module with >>>> fermionic and bosonic annihilation/creation operators, Wicks theorem, >>>> support for contractions and normal ordering as well as evaluation of >>>> Kronecker deltas. There is also a sample demonstrating derivation of the >>>> CCSD (Coupled Cluster Singles and Doubles) equations here: >>>> https://github.com/sympy/sympy/blob/master/examples/intermediate/coupled_cluster.py >>>> >>>> I am currently working to extend the second quantization module to >>>> support different Fock spaces. I adopted a very simple and practical >>>> approach which is to associate a Fock space label to the indices of >>>> creation/annihilation operator. The indices already carry the information >>>> whether they are above/below the Fermi level, hence it seemed convenient >>>> to >>>> simply add the Fock space info there. >>>> >>>> Apparently you want to work with different Hilbert spaces in first >>>> quantization, so I guess your ideas of creating new classes to handle that >>>> seem good to me there. Would your density matrices be able to work with >>>> completely symbolic quantities ? >>>> I am going to need symbolic density matrices for my work, but I have >>>> not really thought yet about how to get them into SymPy. Maybe I could >>>> derive a class from Indexed which would support the special algebraic >>>> operations I need. >>>> >>>> Le jeudi 19 mars 2015 20:04:03 UTC-4, Xiang Gao a écrit : >>>>> >>>>> Hi, >>>>> >>>>> Below are my initial thought on what to do for sympy.physics. I didn't >>>>> wrote plans about second quantization because it require more thinking >>>>> and >>>>> discussing and it's better to work on this part first. Since there are a >>>>> lot of changes, I think I need to discuss first. Do you have any >>>>> suggestions about that? >>>>> >>>>> *Current status:* >>>>> >>>>> The relationship of wavefunction, bra, ket, operator, Hilbert space, >>>>> and second quantization are not dealt in a good way. For example, in >>>>> sympy.physics.hydrogen, sympy.physics.qho_1d, and sympy.physics.sho, >>>>> the wavefunctions and energy levels are defined, however there is no >>>>> corresponding object of class Ket is defined. It is impossible for me to >>>>> get the corresponding Ket object of the eigenstates of these systems. >>>>> Another example is that, it is impossible for me to do the following >>>>> calculation: |a> is in space A, |b> is in space B, I want to deal with >>>>> the >>>>> direct product |a>|b> and calculate the Hilbert space it is in. Another >>>>> example is, in Configuration Interaction and Coupled Cluster theory in >>>>> theoretical chemistry, creation and annihilation operator is used to >>>>> populate electrons of a molecule to excited state, there are a lot of >>>>> algebra in this area on second quantization, but sympy don’t support it >>>>> yet. >>>>> >>>>> *Ways of Improvement: * >>>>> >>>>> To solve these problems, reorganize maybe helpful. I suggest reorganize >>>>> in the following way: >>>>> >>>>> 1. The class HilbertSpace takes a string parameter to denote different >>>>> spaces. >>>>> >>>>> 2. When a Ket is initialized, two parameters must be given: one is the >>>>> Hilbert space that this Ket is in another is can be a string or a Symbol. >>>>> If the Ket is initialized with a string, the behavior of this Ket is >>>>> similar to numbers (the members in sympy.core.numbers) in sympy. If the >>>>> Ket is initialized with a Symbol, the behavior will be similar to a >>>>> symbol (the members in sympy.core.symbol) in sympy. >>>>> >>>>> 3. Implement |x>, |p>, operator x, operator p, in the class >>>>> sympy.physics.quantum.Space1D; implement |xyz>, |rθφ>, |pxpypz> and >>>>> operators in the class sympy.physics.quantum.Space3D. The constructor of >>>>> class Space1D and class Space3D takes the Hilbert space as its parameter. >>>>> Implement angular momentums as sympy.physics.quantum.AngularMomentum. >>>>> >>>>> 4. Override the operator “in” in python, so that whether a Ket belongs to >>>>> a space can be tested by: “myket in myspace” >>>>> >>>>> 5. Implement all exact solutions in quantum mechanics and quantum field >>>>> theory as classes in package sympy.physics.quantum.ExcatSolutions. >>>>> >>>>> 6. Implement partial trace and trace >>>>> >>>>> >>>>> >>>>> *Expected Result:* >>>>> >>>>> Sample Code 1 >>>>> >>>h1 = HilbertSpace(“H1”) >>>>> >>>h2 = HilbertSpace(“H2”) >>>>> >>>myket1 = Ket(h1,’a’) >>>>> >>>myket2 = Ket(h2,’b’) >>>>> >>>myket1 in h1 >>>>> True >>>>> >>>myket2 in h1 >>>>> False >>>>> >>>myket1*myket2 in h1*h2 #direct product >>>>> True >>>>> >>>myket1*myket1 >>>>> Error: undefined operation >>>>> >>>myket1+myket2 >>>>> Error: undefined operation >>>>> >>>>> Sample code 2: >>>>> >>>h1 = HilbertSpace(“H1”) # Hilbert space of particle 1 >>>>> >>>sp1 = Space3D(h1) >>>>> >>>hydrogen1 = HydrogenLike(h1) >>>>> >>>h2 = HilbertSpace(“H2”) # Hilbert space of particle 1 >>>>> >>>sp2 = Space3D(h2) >>>>> >>>ho2 = HarmonicOscillator3D(h2) >>>>> >>>sp1.r_theta_phi_bra*hydrogen1.eigenstate(n=0,l=0,m=0) >>>>> Should output the wave function with variable r,theta,phi here >>>>> >>>sp2.xyz_bra*ho2.coherent_state(n=0,l=0,m=0) >>>>> Should output the wave function with variable x,y,z of coherent state >>>>> of quantum harmonic oscillator. >>>>> >>> sp1.r_theta_phi_bra*ho2.coherent_state(n=0,l=0,m=0) >>>>> Error, incompatible space >>>>> >>>>> Sample code 3: >>>>> >>>h1 = HilbertSpace(“H1”) >>>>> >>>h2 = HilbertSpace(“H2”) >>>>> >>>a1 = AngularMomentum(h1) >>>>> >>>a2 = AngularMomentum(h2) >>>>> >>>total_L = a1 + a2 >>>>> >>>total_L.hilbert_space() >>>>> should output direct product of h1 and h2 >>>>> >>>(a1.eigenbra(j=1/2,m=1/2)*a2.eigenbra(j=3,m=0)) * >>>>> total_L.eigenket(j=3/2,m=1/2) >>>>> Should output Clebsch-Gordan coefficient >>>>> >>>>> Sample code 4: >>>>> >>>h1 = HilbertSpace(“H1”) >>>>> >>>h2 = HilbertSpace(“H2”) >>>>> >>>h3 = HilbertSpace(“H3”) >>>>> >>>h4 = HilbertSpace(“H4”) >>>>> >>>density_matrix = … # codes that defines density matrix here >>>>> >>>density_matrix.trace() >>>>> Should output the trace >>>>> >>>density_matrix.trace(h1,h2) >>>>> Should output the result of the partial trace >>>>> >>>> -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/e31a3b8e-e0d8-4b81-8d15-ca66e34b1c90%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
