# Unable to calculate market equilibrium

Here is a huge notebook, but as the error arrives just at the end I am obliged to show that if Sage lacks of an assume() about a variable, I can't see which hypothesis is missing. The object of the notebook is to calculate the equilibrium price.

We begin by the demand side

var('a x y p_x p_y D Rev R l')
assume(a,'real')
assume(x,'real')
assume(y,'real')
assume(p_x,'real')
assume(p_y,'real')
assume(D,'real')
assume(Rev,'real')
assume(R,'real')
assume(l,'real')
assume(p_x,'real')
assume(p_y,'real')
assume(l,'real')
assume(l>0)
#assume(a>-1)
assume(a>0)
assume(p_x>0)
assume(p_y>0)
assume(R>0)
U =(1/(1-(1/a)))*x^(1-(1/a))+y
show(LatexExpr(r"""\text{La fonction d'utilité est }U(x,y) = """),U)
D= x*p_x + y*p_y
show(LatexExpr(r'\text{La Dépense } D = '),D)
Rev= R
show(LatexExpr(r'\text{Le Revenu } Rev = '),R)
L=U+l*(Rev-D)
show(LatexExpr(r'\text{Le lagrangien est } \mathcal{L}(x, y, λ) = '),L)
FOC = [diff(L,x),diff(L,y),diff(L,l)]
show(LatexExpr(r'\text{Les condition du premier ordre sont } \left\{\begin{array}{c}\mathcal{L}_x= 0\\\mathcal{L}_y= 0\\\mathcal{L}_λ= 0\end{array}\right. '))
show(LatexExpr(r'\text{soit }'))
show(LatexExpr(r'\mathcal{L}_x= 0 \Longleftrightarrow '),FOC[0]==0)
show(LatexExpr(r'\mathcal{L}_y= 0 \Longleftrightarrow '),FOC[1]==0)
show(LatexExpr(r'\mathcal{L}_λ= 0 \Longleftrightarrow '),FOC[2]==0)
sol = solve([FOC[0]==0,FOC[1]==0,FOC[2]==0],x,y,l, algorithm="sympy")
xs=sol[0][x]
ys=sol[0][y]
ls=sol[0][l]
show(LatexExpr(r"""\text{À l'optimum, on a :}"""))
show(LatexExpr(r'  \,\,\,\,\,\,\,\,\,         x^d = '),xs)
show(LatexExpr(r'  \,\,\,\,\,\,\,\,\,         y^d = '),ys)
show(LatexExpr(r'  \,\,\,\,\,\,\,\,\,         \lambda^\star = '),ls)
show(LatexExpr(r'\text{Si le bien } y \text{ sert de numéraire, on  a : }p_y =1 \text{ et, ainsi :}'))
xsn=xs.substitute(p_y=1).factor()
ysn=ys.substitute(p_y=1).factor()
lsn=ls.substitute(p_y=1).factor()
show(LatexExpr(r'  \,\,\,\,\,\,\,\,\,         x^\star = '),xsn)
show(LatexExpr(r'  \,\,\,\,\,\,\,\,\,         y^\star = '),ysn)
show(LatexExpr(r'  \,\,\,\,\,\,\,\,\,         \lambda^\star = '),lsn)
show(LatexExpr(r'\text{On a :}'))
x_p=diff(xsn,p_x).simplify()
show(LatexExpr(r'x_p = '),x_p,LatexExpr(r'< 0.'))


Then follows the offer side

var('C c')
assume(c, 'real')
assume(c>0)
C= (1/2)*c*x^2
show(LatexExpr(r'\text{On suppose que la fonction de coût du producteur est  :  } C(x) ='), C)
pi=(p_x *x- C)
show(LatexExpr(r'\text{ Le profit est :  } \pi(x) = '), pi)
pip= diff(pi,x)
show(LatexExpr(r'\text{ Le profit marginal est :  } \pi^\prime(x) = '), pip, LatexExpr(r'( = 0\text{  à l}^\prime\text{optimum})'))
pipp= diff(pi,x,2)
show(LatexExpr(r"""\text{Il s'agit bien d'un maximum puisque :  } \pi^{\prime\prime}(x) = """),pipp,LatexExpr(r'<0'))
prod=solve(pip==0,x)[0].rhs()
show(LatexExpr(r"""\text{L'offre de produit est :  } x^o = """),prod)


And now the market equilibrium where Sage seems to lack an hypothesis :

show(LatexExpr(r'\text{L}^\prime\text{équilibre de concurrence pure et parfaite est caractérisé par le système d}^\prime\text{équations :  } '))
show(LatexExpr(r'x^d = x^o'))
show(LatexExpr(r'x^d = '),xsn)
show(LatexExpr(r'x^o = '),prod)
pem= solve(xsn==prod, p_x)[0].rhs()
show(pem)


Also I would like to have the inverse demand fonction directly that is from the notebook if

$x_s= (1/p_x)^a \Longrightarrow p_x = (1/x_s)^{1/a}$, I have tried

def symbolic_inverse(f, x):
y = SR.var('y')
g = (f - y).roots(x, multiplicities=False)
return [expr.subs(y=x) for expr in g]

symbolic_inverse(SR(1/(x^(1/a))),x)


but even there it seem to lack an assumption.

edit retag close merge delete

Sort by » oldest newest most voted

Initial question :

sage: with assuming(a,"noninteger"):(xsn==prod).solve(p_x)
[p_x == c^(1/(a + 1))]


Second question :

sage: with assuming(x>0, a,"noninteger"):
....:     fp_x(x)=(x==(1/p_x)^a).solve(p_x)[0].rhs()
....:
sage: fp_x
x |--> 1/(x^(1/a))


A generic solution to this second question raises a lot of questions :

• Is f an expression or a callable expression ?

• What is the relevant argument ?

• What are the necessary assumptions ?

And there are probably others...

Generic notes :

• You should lighten and densify your notations (e. g. var("x, y") ; assume (x, "real") ; assume(x>0) ; assume(y, "real") ; assume (y>0) can be lightened into var("x,y", domain="positive").

• You should distinguish what you want to use as expressions and what you deem functions, distinguishing further arguments and parameters in the latter case...

Learn Python ; learn Sage (a sound time investment, in both cases...). But I repeat myself...

more

Emmanual, I have now stayed a very long time on Sage but docs are not always up to date and when you do not know what to search for it's often rude. For instance, in the doc named assumptions, (https://doc.sagemath.org/html/en/refe...) there is no motion of the option domain. And believe it or not I normaly use to search a lot before asking a question.

( 2021-12-10 22:31:44 +0200 )edit

there is no motion of the option domain

var?


FWIW :

sage: assume(x,"xyzzy")


[ Snip.. ]

ValueError: xyzzy not a valid assumption, must be one of ['analytic', 'antisymmetric', 'commutative', 'complex', 'constant', 'decreasing', 'even', 'evenfun', 'imaginary', 'increasing', 'integer', 'integervalued', 'irrational', 'lassociative', 'noninteger', 'odd', 'oddfun', 'one_to_one', 'posfun', 'rassociative', 'rational', 'real', 'symmetric'].


sage: maxima_calculus.assume?
sage: maxima_calculus.declare?


and the Maxima documentation (current Sage assumption system is a wrapping around Maxima's...).

( 2021-12-11 18:41:52 +0200 )edit

So I must apologize but unfortunately I have not always the good way to search.

( 2021-12-14 12:39:03 +0200 )edit

## Stats

Seen: 66 times

Last updated: Dec 10 '21