I have a symbolic matrix of size 20x3, which I have created using the sym() function. I have another matrix B which is calculated using certain rows of A, or in general the matrix B is a function of A i.e., . Once I obtain all the numerical entries of A, how can I evaluate B after substituting A with the obtained numerical values?
A = sym('a', [20, 3]); % Create a 20x3 symbolic matrix
% Create a matrix B whose values depend on some function of A's elements
B(1, :) = cross(A(1, :), A(3, :));
B(2, :) = A(5, :) .* A(10, :) .* A(20, :);
% Substitute A with numerical values
A = subs(A, A, rand(20, 3)); % Now, A is a 20x3 matrix with random entries
% How do I evaluate the matrix B?
subs(B) ?
subs(B, A) ? % Both commands aren't working

 Akzeptierte Antwort

Nishanth Rao
Nishanth Rao am 10 Jul. 2021

0 Stimmen

After some hit and trials, I found the solution:
A = sym('a', [20, 3]); % Create a 20x3 symbolic matrix
% Create a matrix B whose values depend on some function of A's elements
B(1, :) = cross(A(1, :), A(3, :));
B(2, :) = A(5, :) .* A(10, :) .* A(20, :);
% Substitute B with A, where A is substitued with 20x3 numerical entries:
B = subs(B, A, rand(20, 3));

7 Kommentare

Nishanth Rao
Nishanth Rao am 10 Jul. 2021
You can use eval(B) later to simplify the entries of B
Walter Roberson
Walter Roberson am 10 Jul. 2021
eval() of a symbolic expression can give you error messages or can give you unexpected results. eval() of a symbolic expression is the same as eval(char()) of the expression, but char() of a symbolic expression is in a language that is not MATLAB and is not the internal symbolic language, MuPAD.
You can simplify() or vpa() (or sometimes, double()) symbolic expressions, but eval() is risky.
Nishanth Rao
Nishanth Rao am 11 Jul. 2021
Oh.. I see. Thanks a lot for the information.
zym
zym am 22 Jul. 2022
Bearbeitet: zym am 22 Jul. 2022
Thanks for this! I was just wondering if you happen to know why subs does not work with multiple matrices? It seems I need to use subs twice to evaluate the expression
clear;
A = sym('a', [2, 2]);
B = sym('b', [2, 2]);
C=A*B;
%this does not works
subs(C, {A, B}, {rand(2, 2), rand(2, 2)})
%this works
Ceval1 = subs(C, A, rand(2, 2))
Ceval3 = subs(Ceval1, B, rand(2, 2))
Torsten
Torsten am 22 Jul. 2022
Bearbeitet: Torsten am 22 Jul. 2022
Works.
A = sym('a', [2, 2]);
B = sym('b', [2, 2]);
C=A*B;
%this does not works
subs(C, [A, B], [rand(2, 2), rand(2, 2)])
ans = 
It is a syntax restriction. When you use the {} form of subs(), the second parameter must be a cell array in which each entry is a scalar symbolic variable, and the third parameter must be a cell array the same size as the second parameter
A = sym('a', [2, 2]);
B = sym('b', [2, 2]);
C=A*B;
Anum = rand(2,2);
Bnum = rand(2,2);
Ac = num2cell(A);
Bc = num2cell(B);
Anc = num2cell(Anum);
Bnc = num2cell(Bnum);
subs(C, [Ac, Bc], [Anc, Bnc])
ans = 
note here that [Ac, Bc] is a cell array, and [Anc, Bnc] is a cell array the same size
zym
zym am 27 Jul. 2022
Thank you for the clarification. This is very useful

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

KSSV
KSSV am 10 Jul. 2021

0 Stimmen

Read about double.
A = subs(A, A, rand(20, 3));
A = double(A) ;

3 Kommentare

Nishanth Rao
Nishanth Rao am 10 Jul. 2021
Please go through the question, I am asking how to evaluate matrix B, and not A
KSSV
KSSV am 10 Jul. 2021
subs(B) what you want to substitute here? In the above line you have substituted in A. Also the dimensions of A and B are different. How you want to substitute?
Nishanth Rao
Nishanth Rao am 10 Jul. 2021
Bearbeitet: Nishanth Rao am 10 Jul. 2021
Please look at the accepted answer. I am sorry if the question isn't clear. For your convenience, I'll explain it here.
I have a symbolic matrix A. Now the matrix B (may have different size than A), is some function of the matrix A. Or to be even clearer, the matrix B depends on some of the elements of A. In general, I can write it mathematically as . Now, lets say from say sensor measurements (for eg.,), I will get all the numerical entries of A. How do I calculate the matrix B?

Melden Sie sich an, um zu kommentieren.

Produkte

Version

R2020b

Gefragt:

am 10 Jul. 2021

Kommentiert:

zym
am 27 Jul. 2022

Community Treasure Hunt

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

Start Hunting!

Translated by