# simple numerical solve (2-variables!!)

Hello,

Thanks for the help, I'm trying to move from Mathematica to Sage, but I'm still having some trouble with the basics. Specifically, I'm moving from 1-var to 2-var numerical optimization/solver. I want to optimize function g or, equivalently, solve the system of first-order conditions, f. So far, I have not been able to get any of the scipy routines to work. Is there a simple way to do this? (Note: the objective function is concave wrt to both arguments.)

Thanks! jv

# Constants

y_a = 50 y_b = 50 x = 40 alpha_a = .2 alpha_b = .2

# Functions

v(n)= n^.5 v1(n) = derivative(v(n),n) u(n)= n^.5 u1(n) = derivative(u(n),n)

# Variables

var('g_a') var('x_a')

# Optimization (over [0, x])

g = (v(g_a+alpha_b(x-g_a))-u(y_a)+u(y_a-x_a))(v(x-g_a+alpha_a*(g_a))-u(y_b)+u(y_b-(x-x_a)))

f1 = ((1-alpha_b)v1(g_a+alpha_b(x - g_a)))/((1-alpha_a)v1(x-g_a+alpha_a(g_a)))==(v(g_a+alpha_b(x-g_a))-u(y_a)+u(y_a-x_a))/(v(x-g_a+alpha_a(g_a))-u(y_b)+u(y_b-(x-x_a)))

f2 = (u1(x_a)/u1(x-x_a)) == (v(g_a+alpha_b(x-g_a))-u(y_a)+u(y_a-x_a))/(v(x-g_a+alpha_a(g_a))-u(y_b)+u(y_b-(x-x_a)))

f(g_a, x_a) = (f1, f2)

edit retag close merge delete

2

Did you completely change your question? If you have another question to ask, please revert this one to its first version and ask your second question as a separate topic.

1

Hi mattias. If you restore the first question and ask the second as a separate one I can show how to obtain (20,20) as the answer

Sort by » oldest newest most voted
var('g_a')
eq=g_a == -31375155/31496372*sqrt(-4/5*g_a + 1) + 31375155/31496372*sqrt(4/5*g_a + 8) - 35/8
solve(eq,g_a,to_poly_solve=True)
[g_a == (-35/8)]
bool(eq.subs(g_a=-35/8))
#True

more

What function are you using to do this? simplify? Showing us a minimal example might be helpful.

If you're not using it already, I recommend find_root for numerical solutions to 1-variable equations.

As far as I can tell, Maxima is used primarily for symbolic manipulations in Sage, and other things are used for numerical optimization. So if you're using a function that uses Maxima, you might only get symbolic output.

more

Thanks, this is exactly what I was looking for. I was using solve with a rather messy function. After a bit of troubleshooting I was able to get find_root to work for me.