Solve system of equations with the symbolic matrix

4 views (last 30 days)
I have a 4x4 matrix T, and I know its last row to be [0 0 0 1]. I also know these equations:
After solving these by hand, I find that third column has no solution (except for [4,3], which i know to be 0).
My question is how can I keep these unsolved variables symbolic while solving the system?
I tried the following code:
T = sym('x', [4 4]);
T(4,:) = [0 0 0 1];
T
p_new1 = [2 0 0 1].';
p_old1 = [0 0 0 1].';
p_new2 = [3 0 0 1].';
p_old2 = [1 0 0 1].';
p_new3 = [2 0 1 1].';
p_old3 = [0 1 0 1].';
eqn1 = p_new1 == T*p_old1;
eqn2 = p_new2 == T*p_old2;
eqn3 = p_new3 == T*p_old3;
sol = solve([eqn1, eqn2, eqn3])
This results in a strut with 9 elements that are solved. It completely excludes third column which i want to remain symbolic like x13 x23 x33. How can I do this?

Accepted Answer

Walter Roberson
Walter Roberson on 26 Feb 2021
T = sym('x', [4 4]);
T(4,:) = [0 0 0 1];
T
T = 
p_new1 = [2 0 0 1].';
p_old1 = [0 0 0 1].';
p_new2 = [3 0 0 1].';
p_old2 = [1 0 0 1].';
p_new3 = [2 0 1 1].';
p_old3 = [0 1 0 1].';
eqn1 = p_new1 == T*p_old1;
eqn2 = p_new2 == T*p_old2;
eqn3 = p_new3 == T*p_old3;
s = solve([eqn1, eqn2, eqn3], reshape(T(1:3,[1:2,4]),1,[]))
s = struct with fields:
x1_1: [1×1 sym] x2_1: [1×1 sym] x3_1: [1×1 sym] x1_2: [1×1 sym] x2_2: [1×1 sym] x3_2: [1×1 sym] x1_4: [1×1 sym] x2_4: [1×1 sym] x3_4: [1×1 sym]
subs(T,s)
ans = 
  3 Comments
Walter Roberson
Walter Roberson on 26 Feb 2021
T = sym('x', [4 4]);
T(4,:) = [0 0 0 1];
T
T = 
p_new1 = [2 0 0 1].';
p_old1 = [0 0 0 1].';
p_new2 = [3 0 0 1].';
p_old2 = [1 0 0 1].';
p_new3 = [2 0 1 1].';
p_old3 = [0 1 0 1].';
eqn1 = p_new1 == T*p_old1;
eqn2 = p_new2 == T*p_old2;
eqn3 = p_new3 == T*p_old3;
M = [eqn1, eqn2, eqn3]
M = 
s = solve(M)
s = struct with fields:
x1_1: [1×1 sym] x1_2: [1×1 sym] x1_4: [1×1 sym] x2_1: [1×1 sym] x2_2: [1×1 sym] x2_4: [1×1 sym] x3_1: [1×1 sym] x3_2: [1×1 sym] x3_4: [1×1 sym]
subs(T,s)
ans = 
You can see here that I didn't have to do anything special -- solve() automatically worked it out in terms of variables actually present, and subs() back into T is enough to get nice matrix form.
But if you want more certainty:
vars = symvar(M);
[A,b] = equationsToMatrix(M, vars)
A = 
b = 
vars(:) == A\b
ans = 

Sign in to comment.

More Answers (0)

Categories

Find more on Symbolic Math Toolbox in Help Center and File Exchange

Products


Release

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!