How to ensure that dynamically create symbolically variables are real?
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Kevin Bachovchin
am 20 Feb. 2014
Bearbeitet: Kevin Bachovchin
am 21 Feb. 2014
Hello,
I'm creating symbolic variables dynamically and I wanted to ensure that the symbolic variables are real.
I have the code
clear all
index = {'1'};
List = {'A','B','C'};
A=sym(strcat(List,index))
How can I modify this to make sure that the symbolic variables stored in A are real? I have tried changing to A=sym(strcat(List,index),'real'), but this doesn't work.
I'm looking to do something like
syms A1 B1 C1 real
A = [A1 B1 C1]
except I want to declare the variable names dynamically.
(I can't assume that List will contain alphabetically ordered letters. It is whatever list the user inputs.)
Thank you, Kevin
1 Kommentar
Matt Tearle
am 20 Feb. 2014
I'm assuming you know that dynamically created variable names make for hideous programming, right? ( Obligatory link )
But maybe you have a reason, involving users and symbolic stuff, so... answer below.
Akzeptierte Antwort
Kevin Bachovchin
am 20 Feb. 2014
2 Kommentare
Walter Roberson
am 21 Feb. 2014
Now try again with variable names that are more than one character long.
Kevin Bachovchin
am 21 Feb. 2014
Bearbeitet: Kevin Bachovchin
am 21 Feb. 2014
Weitere Antworten (2)
Matt Tearle
am 20 Feb. 2014
Bearbeitet: Matt Tearle
am 20 Feb. 2014
This, maybe?
names = strcat(List,index,{' '})
eval(['syms ',names{:},'real'])
eval(['A = [',names{:},']'])
Ergh. I shall now go take a shower...
2 Kommentare
Kevin Bachovchin
am 20 Feb. 2014
Bearbeitet: Kevin Bachovchin
am 20 Feb. 2014
Matt Tearle
am 21 Feb. 2014
Bearbeitet: Matt Tearle
am 21 Feb. 2014
I don't understand the objection. You said:
I'm looking to do something like
syms A1 B1 C1 real
A = [A1 B1 C1]
except I want to declare the variable names dynamically.
As far as I can see, that's exactly what my code does -- I get A1, B1, and C1 as real symbolic variables, then A is a 1x3 sym created from them.
Walter Roberson
am 21 Feb. 2014
A(1:length(List),1) = sym(0);
for K = 1 : length(List)
A(K) = sym(List{K});
end
A = sym(A, 'real');
The behavior you are trying to use does not work because there is no functionality for sym() that even approximates it. You can pass a single string (horizontal char vector) or you can pass an existing symbolic array or you can pass a numeric array. No syntax for multiple strings. No syntax for multiple existing symbolic arrays.
1 Kommentar
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!