automatic substitution within functions?

i like this post (click again to cancel)
0
i dont like this post (click again to cancel)

what i do to do this?

sage: var('t w')
sage: f(t) = sin(w*t)
t |--> sin(t*w)
sage: w = 2
sage: f
t |--> sin(2*w)

Without doing f(w=2)!!! imagine that the function is f->f(a,b,c,d,f....,t) like doing this:

...
...
sage: aw1=aw1(m1=1,m2=0.5,l1=1,l2=0.5,g=9.8)
sage: aw2=aw2(m1=1,m2=0.5,l1=1,l2=0.5,g=9.8)
sage: aw4=aw4(m1=1,m2=0.5,l1=1,l2=0.5,g=9.8)
...
...

etc

asked Aug 25 '10

ngativ gravatar image ngativ
83 1 6 15

updated Aug 25 '10

2 Answers:

i like this answer (click again to cancel)
4
i dont like this answer (click again to cancel)

The w in sin(t*w) does not refer to whatever the object with identifier w in the current scope. There isn't a way to get Python to work like this. You need to do something like:

sage: var('t, w')
(t, w)
sage: params = {w: 2}
sage: f(a,b,c,d,e,f,g,t) = sin(t*w)
sage: f.subs(params)
(a, b, c, d, e, f, g, t) |--> sin(2*t)

You just have to define the replacements you want once in a dictionary. You still have to call subs once for every function you want to change.

link

posted Aug 25 '10

Mike Hansen gravatar image Mike Hansen flag of United States
3675 19 43 81

updated Aug 25 '10

thanks, :( thats exactly what i don't want. what if f->f(a,b,c,d,f....,t)? it would be a little annoying to do that. ngativ (Aug 25 '10)
I've updated my answer. Could you explain the annoying part? Do you mean having to do the ".function(*f.arguments())" part? Mike Hansen (Aug 25 '10)
i have updated my question, its about doing f(a=1,b=2,c=3...) ngativ (Aug 25 '10)
Thanks, your answer is very usefull ngativ (Aug 25 '10)
i like this answer (click again to cancel)
2
i dont like this answer (click again to cancel)

I think I'm just explaining Mike's answer a little, but I think that you should be able to define a dictionary

sage: params = {m1:1,m2:0.5,l1:1,l2:0.5,g:9.8}

and then do f.subs(params) as above. In his example,

var('t, w')
params = {w: 2,d:1,c:1}
f(a,b,c,d,e,f,g,t) = sin(t*w*d-c)
g=f.subs(params)
g

should do it. Mike, is that extra thing necessary, given that the arguments are the same in both cases?

link

posted Aug 25 '10

kcrisman gravatar image kcrisman
6639 13 66 150

updated Oct 23 '12

hi, you can prefix the preformatted text with four space characters, then they will not wrap Evgeny (Aug 25 '10)
Okay, but then there should be much more information about the wiki formatting somewhere (FAQ?). Maybe even a little button for multiline code, sort of like the backticks for inline code? Sorry for us all requesting so many new things! kcrisman (Aug 25 '10)
You are right, we keep track of all these issues and will fix them. Thanks. Actually the button with a whole bunch of zeroes and ones helps format both multiline and inline code. Evgeny (Aug 25 '10)
Actually, you don't need. However, if you did `f(w=2) then that doesn't return a CallableSymbolicExpression, but `f.subs(params)` does return one. I'll update my answer. Mike Hansen (Aug 25 '10)
i got it now, thanks ngativ (Aug 25 '10)
see 1 more comment

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[hide preview]

Question tools

1 follower

Tags:

Stats:

Asked: Aug 25 '10

Seen: 238 times

Last updated: Oct 23 '12

powered by ASKBOT version 0.7.22
Copyright Sage, 2010. Some rights reserved under creative commons license.