Creating vector of symbols

For example, A = sym('A%d%d', [3 3]) generates the 3-by-3 symbolic matrix A with the elements A11, A12, ..., A33

 Accepted Answer

Walter Roberson
Walter Roberson on 4 Mar 2011
Edited: Walter Roberson on 22 Feb 2017
For example, for a P x Q x R matrix,
[x,y,z]=ndgrid(1:P,1:Q,1:R);
A = sym( reshape( ...
cellfun(@sym, ...
strcat('A', ...
cellstr(num2str(x(:))), ...
cellstr(num2str(y(:))), ...
cellstr(num2str(z(:)))), ...
'Uniform', 0), ...
P, Q, R ) );
The code is not as long as it looks; I formatted it for display purposes.
Trim to two dimensions or expand to the number of dimensions needed.

4 Comments

Update: This is wrong as of 16a. The answer below is correct. Walter, could you edit your answer please?
This code is the generalized version for more than 2 dimensions. The version that looks like
A = sym('A', [P Q]);
can only handle 2 dimensions.
I was missing a sym() call around the cell array generation; I have added that now.
No, >2 dim works in R2016a (unless I misunderstand you).
>> A = sym('A', [2 2 2])
A(:,:,1) =
[ A1_1_1, A1_2_1]
[ A2_1_1, A2_2_1]
A(:,:,2) =
[ A1_1_2, A1_2_2]
[ A2_1_2, A2_2_2]
Ah, then I think that advance is best left as a comment rather than by editing the response which was appropriate for the time it was written and continues to be required by people using older versions.

Sign in to comment.

More Answers (3)

A = sym('A%d', [3 1]);
or just
A = sym('A', [3 1]);
Brian
Brian on 4 Mar 2011

0 votes

The first gives the following errors
??? Error using ==> sym.sym>expression2ref at 2408 Error: Unexpected '
Error in ==> sym.sym>char2ref at 2378 s = expression2ref(x);
Error in ==> sym.sym>tomupad at 2147 S = char2ref(x);
Error in ==> sym.sym>sym.sym at 114 S.s = tomupad(x,a);
and the second gives.
??? Error using ==> error Formatted arguments cannot be non-scalar numeric matrices.
Error in ==> sym.sym>assumptions at 2180 error('symbolic:sym:sym:errmsg1','Second argument %s not recognized.',a);
Error in ==> sym.sym>tomupad at 2148 assumptions(S,x,a);
Error in ==> sym.sym>sym.sym at 114 S.s = tomupad(x,a);

3 Comments

Which version are you using? Those syntaxes are documented for 2010b,
http://www.mathworks.com/help/toolbox/symbolic/sym.html
Ah I have 7.10.0 (R2010a). I take it that's the problem then...
It does appear that supplying a size is a new feature as of 2010b; the 2010a documentation does not show it.
http://www.mathworks.com/help/releases/R2010a/toolbox/symbolic/sym.html

Sign in to comment.

A=[3 3]; %create any numeric vector or matrix
A=sym(A) %convert it to symbolic
A=double(A) %convert it back to numeric (double in this case)

2 Comments

Can numbers be converted to symbols?
If you do something like...
A=[1 2]
A = sym(A)
A(1) + 1
Then you get 2 as an answer.
One thing you should always have open in your matlab is the Workspace window so you can see what variables are create and their details, other ways is to do
class(A) or in the case of your small code class(ans).
In a way they can, that small code of yours gives the ans=2 but it's a symbolic response not numeric. My1=sym('1'); 2*My1 gives ans=2, again it's a symbolic value. There are other ways to make symbolic values but you should look first in your documentation.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!