First time here? Check out the FAQ!

Ask Your Question
0

automatic substitution within functions?

asked 14 years ago

ngativ gravatar image

updated 14 years ago

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

Preview: (hide)

2 Answers

Sort by » oldest newest most voted
4

answered 14 years ago

Mike Hansen gravatar image

updated 14 years ago

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.

Preview: (hide)
link

Comments

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 gravatar imagengativ ( 14 years ago )

I've updated my answer. Could you explain the annoying part? Do you mean having to do the ".function(*f.arguments())" part?

Mike Hansen gravatar imageMike Hansen ( 14 years ago )

i have updated my question, its about doing f(a=1,b=2,c=3...)

ngativ gravatar imagengativ ( 14 years ago )

Thanks, your answer is very usefull

ngativ gravatar imagengativ ( 14 years ago )
2

answered 14 years ago

kcrisman gravatar image

updated 12 years ago

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?

Preview: (hide)
link

Comments

hi, you can prefix the preformatted text with four space characters, then they will not wrap

Evgeny gravatar imageEvgeny ( 14 years ago )

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 gravatar imagekcrisman ( 14 years ago )

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 gravatar imageEvgeny ( 14 years ago )

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 gravatar imageMike Hansen ( 14 years ago )

i got it now, thanks

ngativ gravatar imagengativ ( 14 years ago )

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

2 followers

Stats

Asked: 14 years ago

Seen: 1,014 times

Last updated: Oct 23 '12