Thanks a lot, Nils, for your quick and detailed reply during XMas! It's 
working fine. 
A bit of background of my question:: I am working on a Math repetitorium 
for high school math for prospective university students which makes 
systematic use of Sage. But there is no time (and students are not 
motivated)  for a systematic introduction into Sage, therefore the concept 
is to introduce Sage syntax step-by-step as needed, so I am looking always 
for the most simple solution. In fact, what I like most with Sage is that 
one can do many thigs with simple commands.
Ingo

Am Montag, 26. Dezember 2016 15:55:56 UTC+1 schrieb Nils Bruin:
>
> On Monday, December 26, 2016 at 2:55:16 AM UTC-8, Ingo Dahn wrote:
>>
>> Hi,
>> the following code works in SageCell if I remove the argument of the 
>> anonymous function and uncomment line 3.
>>
>> @interact
>> def _(f=('$f$',x^2)):
>> #    f(x)=x^2
>>     x0=1
>>     def tangent(g,z):
>>         return derivative(g,x)(z)*(x-z)+g(z)
>>     pf=plot(f,-5,5)
>>     t=tangent(g=f,z=x0)
>>     pt=plot(t,-5,5)
>>     show(pf+pt)
>>
>> But in this form I get the deprecation warning
>>
>> sagemathcell.py:8: DeprecationWarning: Substitution using function-call 
>> syntax and unnamed arguments is deprecated and will be removed from a future 
>> release of Sage; you can use named arguments instead, like EXPR(x=..., y=...)
>> See http://trac.sagemath.org/5930 for details.
>>   t=tangent(g=f,z=x0)
>>
>>
>> None of my experiments after reading related posts helped.
>>
>> Any hints?
>>
>> Ingo
>>
>>
> The input parameter as set by f=('$f',x^2) makes f the *expression* x^2. 
> When
>
> t=tangent(g=f,z=x0)
>
> gets executed, you end up evaluating f(1) and derivative(f,x)(1), which 
> trigger the warning. You could avoid this by sticking with expressions all 
> the way and using "named" substitution instead of the deprecated evaluation 
> syntax:
>
>     def tangent(g,z):
>         return derivative(g,x)(x=z)*(x-z)+g(x=z)
>
> Note that no generality is lost, since you're hardcoding the name with 
> respect to which you take the derivative anyway. For your purposes, this is 
> probably the easiest solution: just don't use "functions" and stick with 
> "expressions".
>
> Alternatively, you can turn "f" into a properly defined one argument 
> function:
>
> def _(f_in=('$f$',x^2)):
>     f=f_in(x)
>    ...
>
> and then your original works properly.
>
> The specification of your "tangent" function gets a bit funny then, 
> though: its input parameter "g" should be a one argument function, and the 
> argument should be "x".
>
> Writing a "tangent" function that takes as input a one argument function 
> and returns the corresponding tangent line as a one argument function is a 
> little more work, but can be done too:
>
> from sage.symbolic.operators import FDerivativeOperator
> def tangent(g,z):
>     der_g=FDerivativeOperator(g,[0])
>     T=der_g(z)*(x-z)+g(z)
>     return T.function(x)
>
> @interact
> def _(f_in=('$f$',x^2)):
>     f=f_in.function(x)
>     x0=1
>     pf=plot(f,-5,5)
>     t=tangent(g=f,z=x0)
>     pt=plot(t,-5,5,color="red")
>     show(pf+pt)
>
>

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

Reply via email to