How to ensure that dynamically create symbolically variables are real?

조회 수: 3 (최근 30일)
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
Matt Tearle
Matt Tearle 2014년 2월 20일
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.

댓글을 달려면 로그인하십시오.

채택된 답변

Kevin Bachovchin
Kevin Bachovchin 2014년 2월 20일
clear all
index = {'1'};
List = {'A','B','C'};
A=sym(sym(strcat(List,index)),'real')
  댓글 수: 2
Walter Roberson
Walter Roberson 2014년 2월 21일
Now try again with variable names that are more than one character long.
Kevin Bachovchin
Kevin Bachovchin 2014년 2월 21일
편집: Kevin Bachovchin 2014년 2월 21일
It seems to work fine even when the variables names in List are more than one character.
clear all
index = {'1'};
List = {'AR','BRR','C'};
A=sym(sym(strcat(List,index)),'real')

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Matt Tearle
Matt Tearle 2014년 2월 20일
편집: Matt Tearle 2014년 2월 20일
This, maybe?
names = strcat(List,index,{' '})
eval(['syms ',names{:},'real'])
eval(['A = [',names{:},']'])
Ergh. I shall now go take a shower...
  댓글 수: 2
Kevin Bachovchin
Kevin Bachovchin 2014년 2월 20일
편집: Kevin Bachovchin 2014년 2월 20일
I'm looking to obtain a symbolic matrix A such as
clear all
index = {'1'};
List = {'A','B','C'};
A=sym(strcat(List,index))
Is there a way I can modify this to force A to a matrix of real syms? I don't understand why A=sym(strcat(List,index),'real') doesn't work.
Matt Tearle
Matt Tearle 2014년 2월 21일
편집: Matt Tearle 2014년 2월 21일
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
Walter Roberson 2014년 2월 21일
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
Kevin Bachovchin
Kevin Bachovchin 2014년 2월 21일
The following code works fine
clear all
index = {'1'};
List = {'A','B','C'};
A=sym(sym(strcat(List,index)),'real')

댓글을 달려면 로그인하십시오.

태그

Community Treasure Hunt

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

Start Hunting!

Translated by