2
$\begingroup$

Trying to solve a system of equations in Maple and I have some assumptions. However, I get a warning that says "Solve may be ignoring assumptions on input variables."

The goal is to find the kinetic rate constants of a series of coupled enzymatic reactions.

$$ V + S_0 <=> W <=> X <=> Y <=> Z $$ The chemistry package doesn't work here, but each arrow has an associated rate constant: the first forward (V to W) is $k_1$, first reverse (W to V) is $k_2$, the second set of arrows (between W and X) are $k_3$ and $k_4$ etc.

This system has an associated set of differential equations: $$\frac{dV}{dt}=-k_1S_0Vk_2W$$ $$\frac{dY}{dt}= k_1S_0V -(k_2 + k_3)W + k_4X$$ $$etc...$$ Which can be expressed as a matrix: $$ \begin{bmatrix} -k_1S_0&k_2&0&0&0\\ k_1S_0&-k_2-k_3&k_4&0&0\\ 0&k_3&-k_4-k_5&k_6&0\\ 0&0&k_5&-k_6-k_7&k_8\\ 0&0&0&k_7&-k_8\\ \end{bmatrix} \begin{bmatrix} V\\W\\X\\Y\\Z \end{bmatrix} $$ The coefficent matrix has an associated characteristic polynomial (for simplification I have made $k_1S_0 -> a, k_2 -> b,$ etc)

$$x^5-(-d-e-f-g-h-b-c-a)x^4-(-ac-ad-ae-af-ag-ah-bd-be-bf-bg-bh-ce-cf-cg-ch-df-dg-dh-eg-eh-fh)x^3-(-ace-acf-acg-ach-adf-adg-adh-aeg-aeh-afh-bdf-bdg-bdh-beg-beh-bfh-ceg-ceh-cfh-dfh)x^2-(-aceg-aceh-acfh-adfh-bdfh)x$$

I don't particularly care about the roots of this equation, so I don't want to solve for the eigenvalues. Instead, I am using Vietas formulas to look at just the coefficients of the polynomial.

$$1. k_{obs_1}+k_{obs_2}+k_{obs_3}k_{obs_4} = a+b+c+d+e+f+g+h$$ $$2. k_{obs_1}k_{obs_2}+k_{obs_1}k_{obs_3}+k_{obs_1}k_{obs_4}+k_{obs_2}k_{obs_3} ... = (ac+ad+ae+af+ag+ah+bd+be+bf+bg+bh+ce+cf+cg+ch+df+dg+dh+eg+ehfh)$$ $$3. k_{obs_1}k_{obs_2}k_{obs_3}+k_{obs_1}k_{obs_2}k_{obs_4}+ ... = (ace+acf+acg+ach+adf+adg+adh+aeg+aeh+afh+bdf+bdg+bdh+beg+beh+bfh+ceg+ceh+cfh+dfh)$$ $$4. k_{obs_1}k_{obs_2}k_{obs_3}k_{obs_4} = aceg+aceh+acfh+adfh+bdfh$$

Because $a = k_1S_0$ we note that each of these equations is linear in terms of $S_0$. Splitting these 4 equations into 8 gives us 8 equations and 8 unknowns so it should be solvable.

From here am solving for c, d, e, f, g, h in terms of s, u, v, w, x, y, z. I already have expressions of a and b from equation 1. Here is what I have in a Maple worksheet, note that for each expression, I have already substituted a and b where they belong within the system.

a := s:
b := t - (u/s):
u := s*(c+d+e+f+g+h):
v := (t-(u/s))*(d+e+f+g+h)+c*(e+f+g+h) + d*(f+g+h) + e*(g+h) + f*h:
w := s*(c*(g+e+f+h)+d*(f+g+h)+e*(g+h)+f*h):
x := (t-u/s)*(d*(f+g+h)+e*(g+h)+f*h)+c*(e*(g+h)+f*h)+d*f*h:
y := s*(c*(e*g+e*h+f*h)+d*f*h):
z := (t-u/s)*d*f*h:

I have the following as the assumptions. Before, I was using just greater than zero instead of not equal to, but I get the same issues anyway.

Assume(c <> 0, d <> 0, e <> 0, f <> 0, g <> 0, f <> 0, h <> 0):

solve({u, v, w, x, y, z}, {c, d, e, f, g, h})

Finally I get this when I compute:

Warning, solve may be ignoring assumptions on the input variables.
{c=0, d=d, e=e, f= (d^2+2de+e^2)/e, g=(d(d+e))/e, h=0}
{c=0,d=0,e=0,f=-g,g=h,h=0}
{c=0,d=-e,e=e,g=-h,h=h}

Especially the latter solutions are not helpful at all. Am I setting up my assumptions or solve incorrectly? Again, thanks in advance.

  • 0
    How can you solve for c,d,e,f,g,h in terms of s,u,v,w,x,y,z? The variables u,v,w,x,y,z are no longer unknowns. The only unknowns in your equations are s,c,d,e,f,g,h. So did you want to solve for c,d,e,f,g,h in terms of s?2017-02-14
  • 0
    Well no, I solved for a and b by hand. Everything needs to be in terms of the set {s,z} because these terms are experimentally measured where {a,h} are not, but we want {a,h}.2017-02-14
  • 0
    My point was that when you invoked the solve command, the variables u,v,w,x,y,z have values -- they are not unknown.2017-02-14
  • 0
    Where do the equations come from?2017-02-14
  • 0
    They come from the coefficients of a characteristic polynomial. But I'm using vieta's formula to get these equations.2017-02-15
  • 0
    So you have a system of nonlinear equations in many variables. Rather than just posting Maple code, I suggest that you also post the problem as a math problem as an actual system of equations.2017-02-16
  • 0
    In fact, to give a potential responder more options, I suggest that you also post the problem in its pre-Vieta form (i.e., a problem about some matrix and its characteristic polynomial).2017-02-16
  • 0
    I have posted in on MathOverflow so I could more easily write out the math in LaTex http://mathoverflow.net/questions/262388/solving-vietas-formuas-in-maple2017-02-16

1 Answers 1

2

The solve command does not automatically take advantage assumptions made on the solution variables (for various technical and legacy reasons), that is what the warning is telling you.

You can instruct solve to convert assumptions into inequations that it adds to the system by passing the option "useassumptions" to solve:

solve({u, v, w, x, y, z}, {c, d, e, f, g, h}, useassumptions);

It is probably better practice to avoid assumptions altogether and just include those constraints directly in the system:

solve({u, v, w, x, y, z, c<>0, d<>0, e<>0, f<>0, g<>0, h<>0}, {c, d, e, f, g, h});

That said, looking at the solutions that come out of solve when it ignores your constraints, there do not appear to be any solutions that actually satisfy them.

When I made my best guess at correcting the typo in your input equations (I made the fourth equation: v:=(t-u/s))*... ), I get no solutions satisfying those constraints when I run solve in Maple 2016.2.

Perhaps something else is not formulated correctly? It looks like you may want to create a system of equations with x,y... as the left-hand sides instead of assigning them values, but I cannot say for sure.


This is my best guess at what you are trying to do. solve oeqs in terms of vars:

oeq := [
s = a,
t = b + c+d+e+f+g+h,
u = a*(c+d+e+f+g+h),
z = (b)*d*f*h,
y = a*(c*(e*g+e*h+f*h)+d*f*h),
w = a*(c*(g+e+f+h)+d*(f+g+h)+e*(g+h)+f*h),
v = (b)*(d+e+f+g+h)+c*(e+f+g+h)+d*(f+g+h)+e*(g+h)+f*h,
x = (b)*(d*(f+g+h)+e*(g+h)+f*h)+c*(e*(g+h)+f*h)+d*f*h
];
vars := [a, b, c, d, e, f, g, h];

Solve kind of chokes on this if you call it directly, but you can solve it a piece at a time and back-substitute as you go:

eq := oeq: fullsol := {}: n := 1;
while n <= nops(vars) do
 sols := solve(eq[1 .. n], {vars[1 .. n][]});
 tmpsol := remove((x)->has(rhs(x), {a, b, c, d, e, f, g, h}), sols);
 fullsol := fullsol union tmpsol;
 eq := simplify(eval(eq, fullsol));
 if nops(tmpsol) = 0 then n := n+1 end if;
end do:
fullsol;

The full solution is very large, so I don't include it here.