Ask Your Question
1

Substituting a particular value for a parameter

asked 2014-02-11 18:38:22 +0100

Alasdair gravatar image

This question is a follow-on to this one I asked earlier. Suppose I have a return value (a list called sols) to a solve command which includes an extra parameter, like

[2+r1,2-r1,2*r1]

If I want to substitute a value for r1, I need to, for example:

var('r1')
[xx.subs(r1=2/3) for xx in sols]

However, if I happen to run the solve command again, the new parameter changes to r2, and then I have to change the above commands to work with r2 instead of r1. And of course if other parameters have been created in the course of my Sage session, the r1 above could be anything.

What I need is some way of both isolating that extra parameter, and substituting for it. One way seems to be something like:

params = [xx.variables()[0] for xx in sols]
[xx.subs_expr(p==2/3) for xx,p in zip(sols,params)]

which works if the extra parameter is listed first in each variable list. The command

solvars = reduce(lambda x,y:union(x,y),[xx.variables() for xx in svals])

produces a list in which the extra parameter is last. So I could use

[xx.subs_expr(solvars[-1]==2/3) for xx in sols]

But none of these particularly automatic, in terms of isolating the extra parameter. They seem to require some extra knowledge of where the parameter is in the variables list.

So what is the best way of doing this, which is robust and automatic?

edit retag flag offensive close merge delete

Comments

To my knowledge, there isn't a particularly robust way of doing this. We've discussed doing various things with the auto-generated variables of Maxima, but there hasn't been consensus on what the "right" thing to do is - we don't want them overwriting pre-existing user-defined variables, but we also want accessibility, and this is not easily resolvable.

kcrisman gravatar imagekcrisman ( 2014-02-11 20:57:31 +0100 )edit

I thought that might be the case... well, I'll just have to make do with what I've got. Could I isolate, do you think, the "non-parameter" variables using `locals` in some way?

Alasdair gravatar imageAlasdair ( 2014-02-11 22:25:21 +0100 )edit

Maxima should have a list of things like this - https://www.ma.utexas.edu/pipermail/maxima/2013/033850.html - but I had trouble accessing it. Also, you may find setting the `nicedummies` Maxima option useful here.

kcrisman gravatar imagekcrisman ( 2014-02-12 11:02:58 +0100 )edit

1 Answer

Sort by ยป oldest newest most voted
0

answered 2014-02-12 02:15:35 +0100

ndomes gravatar image

A suggestion.

import re
var('x y z r')
eqns = [x+y==1, x-z==0]
sol=solve(eqns,[x,y,z])[0]
S=str(sol)
eval(S.replace(re.search('r[0-9]+',S).group(),'r'))
edit flag offensive delete link more

Your Answer

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

Add Answer

Question Tools

Stats

Asked: 2014-02-11 18:38:22 +0100

Seen: 782 times

Last updated: Feb 12 '14