Substitute symbolic matrices into numerical matrices

3 次查看(过去 30 天)
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!

回答(1 个)

Torsten
Torsten 2022-9-25
编辑:Torsten 2022-9-25
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 个评论
Torsten
Torsten 2022-9-25
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

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Symbolic Math Toolbox 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by