How to ensure that dynamically create symbolically variables are real?
    6 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
    Kevin Bachovchin
      
 le 20 Fév 2014
  
    
    
    
    
    Modifié(e) : Kevin Bachovchin
      
 le 21 Fév 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 commentaire
  Matt Tearle
    
 le 20 Fév 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.
Réponse acceptée
  Kevin Bachovchin
      
 le 20 Fév 2014
        2 commentaires
  Walter Roberson
      
      
 le 21 Fév 2014
				Now try again with variable names that are more than one character long.
  Kevin Bachovchin
      
 le 21 Fév 2014
				
      Modifié(e) : Kevin Bachovchin
      
 le 21 Fév 2014
  
			
		Plus de réponses (2)
  Matt Tearle
    
 le 20 Fév 2014
        
      Modifié(e) : Matt Tearle
    
 le 20 Fév 2014
  
      This, maybe?
names = strcat(List,index,{' '})
eval(['syms ',names{:},'real'])
eval(['A = [',names{:},']'])
Ergh. I shall now go take a shower...
2 commentaires
  Kevin Bachovchin
      
 le 20 Fév 2014
				
      Modifié(e) : Kevin Bachovchin
      
 le 20 Fév 2014
  
			
		
  Matt Tearle
    
 le 21 Fév 2014
				
      Modifié(e) : Matt Tearle
    
 le 21 Fév 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
      
      
 le 21 Fév 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 commentaire
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!