How to create a vector of symbolic variables with specific labeling

2 views (last 30 days)
I currently have a vector of unevenly spaced increasing values similar to this one:
v = [1 2 3 5 7 9 10 12 18 29]
What I would like to do is create a vector of symbolic variables such that
vsym = [x1 x2 x3 x5 x7 x9 x10 x12 x18 x29]
I know that I can create a function to produce symbolic variables with increasing indices from 1 to 10 lets say by using sym('x', [1 10]), however I am not able to find a way to quickly assign them different indices as I would desire, such as sym('x', v), whee v would be my vector.
Any help would be appreciated

Accepted Answer

Paul
Paul on 12 Sep 2021
v = [1 2 3 5 7 9 10 12 18 29];
vsym = sym('x',[v(1) v(end)]);
vsym=vsym(v)
vsym = 
  2 Comments
Awais Saeed
Awais Saeed on 12 Sep 2021
Edited: Awais Saeed on 12 Sep 2021
It will only work if vector v starts from 1. If vector v starts from 2, let's say, then the results would be different because the syntax requires rows and columns as sym('x', [rows columns]).
v = [2 3 5 7 9 10 12 18 29];
vsym = sym('x',[v(1) v(end)]);
vsym=vsym(v)
vsym = 
Paul
Paul on 12 Sep 2021
v = [2 3 5 7 9 10 12 18 29];
vsym = sym('x',[1 v(end)]);
vsym = vsym(v)
vsym = 

Sign in to comment.

More Answers (2)

Awais Saeed
Awais Saeed on 12 Sep 2021
Not the best way but will work good enough for small vectors
vsym = sym('x',size(v));
for col = 1:1:size(v,2)
char_str = ['x' num2str(v(col))];
vsym(col) = sym(char_str);
end
disp(vsym)
I do not know if this could be done more faster.

John D'Errico
John D'Errico on 12 Sep 2021
The simple direct way seems easiest.
v = sym('v',[1 29]);
v = v([1 2 3 5 7 9 10 12 18 29])
v = 

Categories

Find more on Creating and Concatenating Matrices 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!