# numerical computation of roots (maple equivalent of fsolve) of a system of nonlinear equations with multiple variables parameters

Hi All, the following is my code:

### Begin Code#####

#Parameters:
k0 = 0.1
kd = 0.05
k1 = 20
j1 = 0.1
km1 = 0.2
jm1 = 0.1
k2 = 0.055
j2 = 0.1
pPTEN = 0.001
dPTEN = 0.0054
k3 = 0.006
j3 = 2
k4 = 0.15
j4 = 0.1
km4 = 73
jm4 = 0.5
pMdm2 = 0.018
dMdm2 = 0.015
dMdm2s = 0.015
k5 = 0.024
j5 = 1
k6 = 10
j6 = 0.3
km6 = 0.2
jm6 = 0.1
n1 = 3
n2 = 3
PIPtot = 1
AKTtot = 1

#Variables to solve
p53 = var('p53')
AKTs = var('AKTs')
Mdm2 = var('Mdm2')
Mdm2s = var('Mdm2s')
PIP3 = var('PIP3')
PTEN = var('PTEN')

AKT = AKTtot - AKTs
PIP2 = PIPtot - PIP3

#Rate Equations
v0 = k0
v1 = (k1 * PIP3 * AKT) / (j1 + AKT)
vm1 = (km1 * AKTs) / (jm1 + AKTs)
v2 = (k2 * Mdm2s * p53) / (j2 + p53)
v3 = (k3 * ((p53)^n1))/(((j3)^n1) + ((p53)^n1))
v4 = (k4 * PIP2)/(j4 + PIP2)
vm4 = (km4 * PTEN * PIP3)/(jm4 + PIP3)
v5 = (k5 * ((p53)^n2))/(((j5)^n2) + ((p53)^n2))
v6 = (k6 * Mdm2 * AKTs)/(j6 + Mdm2)
vm6 = (km6 * Mdm2s)/(jm6 + Mdm2s)

ss_p53 = v0 - v2 - kd*p53
ss_AKTs = v1 - vm1
ss_PIP3 = v4 - vm4
ss_PTEN = pPTEN + v3 - dPTEN * PTEN
ss_Mdm2s = v6 - vm6 - dMdm2s*Mdm2s
ss_Mdm2 = pMdm2 + v5 - v6 + vm6 - dMdm2*Mdm2

#Equation to Solve
z = solve([ss_p53==0, ss_AKTs==0, ss_PIP3==0, ss_PTEN==0, ss_Mdm2s==0, ss_Mdm2==0],\ [p53, AKTs, PIP3,PTEN, Mdm2s, Mdm2])

End Code


I tried using Sage "solve" to analytically solve the system of equations. I got a "FloatingPointError: Floating point exception"

I thought of ways to get round this exception by 1) using log and exp in my math equations -- I can't work round this 2) I have no idea how to create exceptions for this since I can't access the sub-solutions while the solutions are still underway 3)Then I tried maxima.solve --> no roots could be found

Maybe, this problem can't be solved analytically, so I thought maybe I could do so numerically. Hence my following question,

I can only find functions that tackle univariate equations. Is there a sage equivalent of maple's f-solve which numerically computes all roots of multivariate system of nonlinear equations without the need of initial conditions?

Thanks a lot! I would really appreciate this

Rgds Samantha

edit retag close merge delete

Sort by ยป oldest newest most voted

I suggest using a solver from scipy. You can look here: http://docs.scipy.org/doc/scipy-0.17....

Below is some code to try. It does not successfully solve the equations, but I have no idea what a reasonable guess would be to start the solver with. I imagine that you have some idea of a good starting guess.

import numpy as np
import scipy.optimize as spo

#Variables to solve
p53 = var('p53')
AKTs = var('AKTs')
Mdm2 = var('Mdm2')
Mdm2s = var('Mdm2s')
PIP3 = var('PIP3')
PTEN = var('PTEN')

def G(x):
p53=x[0]
AKTs=x[1]
PIP3=x[2]
PTEN=x[3]
Mdm2s=x[4]
Mdm2=x[5]

#Parameters:
k0 = 0.1
kd = 0.05
k1 = 20
j1 = 0.1
km1 = 0.2
jm1 = 0.1
k2 = 0.055
j2 = 0.1
pPTEN = 0.001
dPTEN = 0.0054
k3 = 0.006
j3 = 2
k4 = 0.15
j4 = 0.1
km4 = 73
jm4 = 0.5
pMdm2 = 0.018
dMdm2 = 0.015
dMdm2s = 0.015
k5 = 0.024
j5 = 1
k6 = 10
j6 = 0.3
km6 = 0.2
jm6 = 0.1
n1 = 3
n2 = 3
PIPtot = 1
AKTtot = 1

AKT = AKTtot - AKTs
PIP2 = PIPtot - PIP3

#Rate Equations
v0 = k0
v1 = (k1 * PIP3 * AKT) / (j1 + AKT)
vm1 = (km1 * AKTs) / (jm1 + AKTs)
v2 = (k2 * Mdm2s * p53) / (j2 + p53)
v3 = (k3 * ((p53)^n1))/(((j3)^n1) + ((p53)^n1))
v4 = (k4 * PIP2)/(j4 + PIP2)
vm4 = (km4 * PTEN * PIP3)/(jm4 + PIP3)
v5 = (k5 * ((p53)^n2))/(((j5)^n2) + ((p53)^n2))
v6 = (k6 * Mdm2 * AKTs)/(j6 + Mdm2)
vm6 = (km6 * Mdm2s)/(jm6 + Mdm2s)

ss_p53 = v0 - v2 - kd*p53
ss_AKTs = v1 - vm1
ss_PIP3 = v4 - vm4
ss_PTEN = pPTEN + v3 - dPTEN * PTEN
ss_Mdm2s = v6 - vm6 - dMdm2s*Mdm2s
ss_Mdm2 = pMdm2 + v5 - v6 + vm6 - dMdm2*Mdm2

return(np.array([ss_p53, ss_AKTs, ss_PIP3, ss_PTEN, ss_Mdm2s, ss_Mdm2]))

guess=[1,1,1,1,1,1]

spo.newton_krylov(G,guess)

more

Hey thanks!

Is there a way to try out multiple guesses(in an array) for multiple variables? Or any function that can do away with initial guesses or set a boundary of solutions within an interval?

( 2016-07-04 05:55:39 +0200 )edit

I am not aware of any. You can probably use a loop to try out multiple guesses, but will need to use Python's try...except command to prevent errors from stopping your loop.

( 2016-07-04 18:52:55 +0200 )edit