Justin,
On 5/9/07, Justin C. Walker <[EMAIL PROTECTED]> wrote:
>
>
>
> On May 9, 2007, at 3:28 PM, Bobby Moretti wrote:
> > On 5/9/07, Justin C. Walker <[EMAIL PROTECTED]> wrote:
> >> On May 9, 2007, at 10:51 AM, Timothy Clemans wrote:
> >> I'm not sure these are failures, per se. This may be a in issue with
> >> the Principal of Least Surprise :-}
> > This is definitely the case here. In every one of your examples,
> > Timothy,
> > the module is doing what it's supposed to. Sorry, the documentation
> > is kind
> > of lacking in the tutorial. I'm working on it right now. For now
> > I'd suggest
> > looking at the reference manual and especially the docstring for
> > sage.calculus.calculus.
>
> Manual? Read? :-}
>
> > Now, by default, the symbols f, g, and most other single-character
> > symbols
> > are instances of SymbolicVariable. They are not callable. What you
> > really
> > are trying to do is make a formal function f, and a formal function
> > g, and
> > differentiate those. So to do that, you need to use the commands:
> >
> > sage: f = function('f')
> > sage: g = function('g')
> > sage: foo = diff(f(x) + g(x))
> > diff(g(x), x, 1) + diff(f(x), x, 1)
> >
> > and then you can do something like
> > sage: foo(f=sin, g=x^3)
> > cos(x) + 3*x^2
>
> Thanks for this. Now, David's reply makes even more sense :-} I
> cobbled up my response by communing with the ether, rather than
> actually reading something...
>
> > They are, but not as formal functions. They're defined as
> > SymbolicVariables.
>
> This is the part that I didn't really get until now.
>
> The calculus package is a great addition. It seems to 'just work'.
Thanks :). We tried to emulate the feel of language-level literals for doing
symbolics.
I have a few concerns (cf. the Principal above), since this package
> is affected by what you change during a session, but overall, I like it.
>
Here's an example of what I'm hinting at:
>
> > sage: f=c*x
> > sage: diff(f,c)
> > x
> > sage: diff(f,x)
> > c
> > sage: c=3
> > sage: type(c)
> > <type 'sage.rings.integer.Integer'>
> > sage: type(f)
> > <class 'sage.calculus.calculus.SymbolicArithmetic'>
> > sage: diff(f,c)
> > .....
> > <type 'exceptions.ValueError'>: must supply an explicit variable
> > for an expression containing more than one variable
>
> so above, the substitution 'c -> 3' takes place at the call. Below,
>
> > sage: diff(f,x)
> > c
> > sage:
>
> no substitution happens. On the other hand:
>
> > sage: a=1
> > sage: g=a*x
> > sage: diff(g,x)
> > 1
> > sage:
>
> Justin
This is indeed a caveat of doing what we're doing. I too had my initial
doubts about this, but I think it works pretty well in practice. Can you
think of a way around this design?
Also, this same error could come up anywhere in SAGE. The following, while a
bit contrived, is nonetheless possible for a novice user to input:
sage: Integer = 2
... input some code ...
...
...
... and later on:
sage: 2+2
Traceback (most recent call last):
<type 'exceptions.TypeError'>: 'sage.rings.integer.Integer' object is not
callable.
Thanks for the feedback. Keep it coming.
~Bobby
--
> Justin C. Walker, Curmudgeon-At-Large
> Director
> Institute for the Enhancement of the Director's Income
> --------
> "Weaseling out of things is what separates us from the animals.
> Well, except the weasel."
> - Homer J Simpson
> --------
>
>
>
> >
>
--
Bobby Moretti
[EMAIL PROTECTED]
--~--~---------~--~----~------------~-------~--~----~
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/sage-support
URLs: http://sage.math.washington.edu/sage/ and http://sage.scipy.org/sage/
-~----------~----~----~----~------~----~------~--~---