Hi,
I maintain an R package, but there is one place where a symbolic
solution is needed to verify a result. I would like to write an R
function that prints proper SAGE input so that users can easily feed
it to SAGE. However, I have not yet been able to get SAGE to produce
the expected behavior for a relatively simple published example and
have run out of ideas.
The example (for anyone interested) is from
http://scholar.google.com/scholar?num=100&hl=en&lr=&q=allintitle%3A%22Uniqueness+does+not+imply+identification%22&btnG=Search
and involves a system of 10 equations and 10 unknowns. But some of the
equations are redundant, and there are multiple solutions. I was
expecting SAGE to give me a symbolic solution where at least one
unknown was expressed in terms of another unknown, but instead it says
empty set. If there were a unique solution, I would want SAGE to
express lambda_** and Theta2_** in terms of Sigma_**
Here is the input that causes [] to be outputted:
# Define variables
lambda_11, lambda_21, lambda_31, lambda_41, lambda_12, lambda_22,
lambda_32, lambda_42, Phi_11, Phi_21, Phi_22, Theta2_11, Theta2_22,
Theta2_33, Theta2_44, Sigma_11, Sigma_21, Sigma_31, Sigma_41,
Sigma_22, Sigma_32, Sigma_42, Sigma_33, Sigma_43, Sigma_44 =
var('lambda_11 lambda_21 lambda_31 lambda_41 lambda_12 lambda_22
lambda_32 lambda_42 Phi_11 Phi_21 Phi_22 Theta2_11 Theta2_22 Theta2_33
Theta2_44 Sigma_11 Sigma_21 Sigma_31 Sigma_41 Sigma_22 Sigma_32
Sigma_42 Sigma_33 Sigma_43 Sigma_44')
# Specify constraints
lambda_12 = 0/1
lambda_31 = 0/1
lambda_41 = 0/1
Phi_11 = 1/1
Phi_22 = 1/1
# Write out 10 equations from the matrix algebra
eq1 = Sigma_11 == ( (lambda_11 * Phi_11 + lambda_12 * Phi_21) *
lambda_11 + (lambda_11 * Phi_21 + lambda_12 * Phi_22) * lambda_12 ) +
Theta2_11
eq2 = Sigma_21 == ( (lambda_21 * Phi_11 + lambda_22 * Phi_21) *
lambda_11 + (lambda_21 * Phi_21 + lambda_22 * Phi_22) * lambda_12 )
eq3 = Sigma_31 == ( (lambda_31 * Phi_11 + lambda_32 * Phi_21) *
lambda_11 + (lambda_31 * Phi_21 + lambda_32 * Phi_22) * lambda_12 )
eq4 = Sigma_41 == ( (lambda_41 * Phi_11 + lambda_42 * Phi_21) *
lambda_11 + (lambda_41 * Phi_21 + lambda_42 * Phi_22) * lambda_12 )
eq5 = Sigma_22 == ( (lambda_21 * Phi_11 + lambda_22 * Phi_21) *
lambda_21 + (lambda_21 * Phi_21 + lambda_22 * Phi_22) * lambda_22 ) +
Theta2_22
eq6 = Sigma_32 == ( (lambda_31 * Phi_11 + lambda_32 * Phi_21) *
lambda_21 + (lambda_31 * Phi_21 + lambda_32 * Phi_22) * lambda_22 )
eq7 = Sigma_42 == ( (lambda_41 * Phi_11 + lambda_42 * Phi_21) *
lambda_21 + (lambda_41 * Phi_21 + lambda_42 * Phi_22) * lambda_22 )
eq8 = Sigma_33 == ( (lambda_31 * Phi_11 + lambda_32 * Phi_21) *
lambda_31 + (lambda_31 * Phi_21 + lambda_32 * Phi_22) * lambda_32 ) +
Theta2_33
eq9 = Sigma_43 == ( (lambda_41 * Phi_11 + lambda_42 * Phi_21) *
lambda_31 + (lambda_41 * Phi_21 + lambda_42 * Phi_22) * lambda_32 )
eq10 = Sigma_44 == ( (lambda_41 * Phi_11 + lambda_42 * Phi_21) *
lambda_41 + (lambda_41 * Phi_21 + lambda_42 * Phi_22) * lambda_42 ) +
Theta2_44
# Try to solve for 10 unknowns
solutions = solve([eq1,eq2,eq3,eq4,eq5,eq6,eq7,eq8,eq9,eq10],
lambda_11, lambda_21, lambda_22, lambda_32, lambda_42, Phi_21,
Theta2_11, Theta2_22, Theta2_33, Theta2_44)
solutions # empty set
But if you fill in the values from a known solution, then eq1 through
eq10 all evaluate to True
# Solution from Table 1 in paper
lambda_11 = 1/2
lambda_21 = 1/1
lambda_22 = 1/5
lambda_32 = 2/1
lambda_42 = 3/2
Phi_21 = 4/5
Theta2_11 = 1/1
Theta2_22 = 1/2
Theta2_33 = 3/2
Theta2_44 = 2/1
Sigma_11 = 5/4
Sigma_21 = 58/100
Sigma_31 = 4/5
Sigma_41 = 3/5
Sigma_22 = 186/100
Sigma_32 = 2/1
Sigma_42 = 3/2
Sigma_33 = 55/10
Sigma_43 = 3/1
Sigma_44 = 425/100
print(eq1); print(eq2); print(eq3); print(eq4); print(eq5);
print(eq6); print(eq7); print(eq8); print(eq9); print(eq10) # all True
Thus, I do not understand why SAGE says there is no solution to this
system of equations. What should I be doing differently?
Thanks in advance,
Ben