Substitute symbolic matrices into numerical matrices

2 views (last 30 days)
Let's say I am solving a linear system of Equations of the form: Ax=b at each timestep. Matrix A always always has the same structure, for instance A = [a b c; -a 2b c-d; -d 2c a]. During each timestep iteration I update the values of a, b, c ,d, but the structure of A (and of b) remains the same in terms of those symbols. Is there a way to construct a symbolic matrix and then just substitute the symbols with their updated values at each timestep rather than reconstruct the whole A matrix (and b vector) at each timestep?
Many thanks!

Answers (1)

Torsten
Torsten on 25 Sep 2022
Edited: Torsten on 25 Sep 2022
Do you know Cramer's rule ?
A = sym('A',[3 3]);
b = sym('b',[3 1]);
x = sym('x',[3 1]);
sol = solve(A*x==b,x)
sol = struct with fields:
x1: (A1_2*A2_3*b3 - A1_3*A2_2*b3 - A1_2*A3_3*b2 + A1_3*A3_2*b2 + A2_2*A3_3*b1 - A2_3*A3_2*b1)/(A1_1*A2_2*A3_3 - A1_1*A2_3*A3_2 - A1_2*A2_1*A3_3 + A1_2*A2_3*A3_1 + A1_3*A2_1*A3_2 - A1_3*A2_2*A3_1) x2: -(A1_1*A2_3*b3 - A1_3*A2_1*b3 - A1_1*A3_3*b2 + A1_3*A3_1*b2 + A2_1*A3_3*b1 - A2_3*A3_1*b1)/(A1_1*A2_2*A3_3 - A1_1*A2_3*A3_2 - A1_2*A2_1*A3_3 + A1_2*A2_3*A3_1 + A1_3*A2_1*A3_2 - A1_3*A2_2*A3_1) x3: (A1_1*A2_2*b3 - A1_2*A2_1*b3 - A1_1*A3_2*b2 + A1_2*A3_1*b2 + A2_1*A3_2*b1 - A2_2*A3_1*b1)/(A1_1*A2_2*A3_3 - A1_1*A2_3*A3_2 - A1_2*A2_1*A3_3 + A1_2*A2_3*A3_1 + A1_3*A2_1*A3_2 - A1_3*A2_2*A3_1)
And now please don't tell me that in reality, your matrix A is 50x50 :-)
  2 Comments
Ali Daher
Ali Daher on 25 Sep 2022
In reality, my matrix is yeah around 100x100 =D.
Torsten
Torsten on 25 Sep 2022
And for such a matrix size, you use symbolic maths ? You will have much time to drink your coffee ...
Use numerical matrices and backslash without any structural analysis of the matrix:
A = rand(100);
b = rand(100,1);
x = A\b
x = 100×1
0.2890 0.3542 0.0288 -0.6519 -0.9014 1.1733 0.4072 0.8347 -0.2271 0.7861

Sign in to comment.

Categories

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

Community Treasure Hunt

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

Start Hunting!