On 18 November 2014 15:19, Ondřej Čertík <ondrej.cer...@gmail.com> wrote:
> On Tue, Nov 18, 2014 at 12:14 PM, Bill Page <bill.p...@newsynthesis.org> 
> wrote:
>>
>>   abs(x).diff(x)
>>
>> would return the symbolic expression
>>
>>   conjugate(x)/(2*abs(x)) + conjugate(x)/(2*abs(x))* e^{-2*i*theta}
>
> I think you made a mistake, the correct expression is:
>
> conjugate(x)/(2*abs(x)) + x/(2*abs(x)) * e^{-2*i*theta}
>

Yes, sorry.

>> ...
>> I thought rather that what you were proposing was to set theta=0
>> from the start.  If you did that, then I think you still have problems
>> with the chain rule.
>
> For a CAS, I was leaning towards using theta=0. But given your
> objections, I first needed to figure out the most general case that
> covers everything. I think that's now sufficiently clarified.
>

OK.

>> Let me add that the kind of solution to this problem that I did
>> imagine was to implement two derivatives, for example both
>>
>>   f.diff(z) = df/dz + df/d conjugate(z)
>>
>> and
>>
>>   f.diff2(z) = df/dz - df/d conjugate(z)
>>
>> diff(z) would equal diff2(z) for all analytic functions and diff would
>> reduce to the derivative of real non-analytic functions as you desire.
>
> Right, diff() is for theta = 0. diff2() is for theta=pi/2, i.e. taking
> the derivative along the imaginary axis.
>
>> Note that for abs we have
>>
>>   abs(z).diff2(z) = 0
>
> Actually, for abs you have:
>
> abs(z).diff2(z) = (conjugate(z)-z)/(2*abs(z))
>

Yes again, sorry.  Of course 0 only if conjugate(z)=z.

>> but not in general.  There would be no need to discuss this 2nd
>> derivative with less experienced users until they were ready to
>> consider more "advanced" mathematics.
>>
>> Clearly we could implement the chain rule given these two derivatives.
> ...

On 18 November 2014 15:46, Ondřej Čertík <ondrej.cer...@gmail.com> wrote:
> On Tue, Nov 18, 2014 at 1:19 PM, Ondřej Čertík <ondrej.cer...@gmail.com> 
> wrote:
> ..
>>
>> So I think that functions can return their own correct derivative, for
>> example analytic functions just return the unique complex derivative,
>> for example:
>>
>> log(z).diff(z) = 1/z
>>
>> This holds for all cases. Non-analytic functions like abs(f) can return:
>>
>> abs(f).diff(z) = (conjugate(f)*f.diff(z) +
>> f*conjugate(f).diff(z)*e^{-2*i*theta}) / (2*abs(f))
>
> Actually, I think I made a mistake. Let's do abs(f).diff(x) again for
> the most general case. We use:
>
> D f(g) / D z =
>
> = df/dg * (dg/dz + dg/d conjugate(z) * e^{-2*i*theta}) + df/d
> conjugate(g) * (d conjugate(g)/dz + d conjugate(g)/d conjugate(z) *
> e^{-2*i*theta}) =
>
> = df/dg Dg/Dz + df/d conjugate(g) D conjugate(g) / Dz
>
> Which we derived above. We have f(g) -> |g| and g(z) -> f(z). So we get:
>
> D |f| / Dz = d|f|/df * Df/Dz + d|f|/d conjugate(f) * D conjugate(f) / Dz =
>
> = (conjugate(f) * Df/Dz + f * D conjugate(f) / Dz) / (2*abs(f))
>
> And then:
>
> Df/Dz = f.diff(z)
> D conjugate(f) / Dz = conjugate(f).diff(z)
>
> So I think the formula:
>
> abs(f).diff(z) = (conjugate(f)*f.diff(z) + f*conjugate(f).diff(z)) / 
> (2*abs(f))
>
> is the most general formula for any theta. The theta dependence is hidden
> in conjugate(f).diff(z), since if "f" is analytic, like f=log(z), the
> conjugate(f) is not analytic, and so the derivative is theta dependent.
>
> The below holds though:
>
>>
>> I think that's the correct application of the chain rule. We can set
>> theta=0, so we would just return:
>>
>> abs(f).diff(z) = (conjugate(f)*f.diff(z) + f*conjugate(f).diff(z)) / 
>> (2*abs(f))
>>
>> Which for real "f" (i.e. conjugate(f)=f) simplifies to (as a special case):
>>
>> abs(f).diff(z) = (f*f.diff(z) + f*f.diff(z)) / (2*abs(f)) = f/abs(f) *
>> f.diff(z) = sign(f) * f.diff(z)
>>
>> So it all works.
>>
>> Unless there is some issue that I don't see, it seems to me we just
>> need to have one diff(z) function, no need for diff2().
>>

Hmmm... So given only f(z).diff(z) as you have defined it above, how
do I get Df(z)/D conjugate(z), i.e. the other Wirtinger derivative?
Or are you claiming that this is not necessary in general in spite of
the Wirtinger  formula for the chain rule?

Bill.

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to