2016-05-19 7 views
0

ich auf einem Matlab-Skript arbeite und ich in folgendem Problem leite:MATLAB: Ändern einer bekannten Zeichenfolge zu einem Variablennamen

Innerhalb einer Schleife ich eine Zeichenfolge Erstellen von strcat verwenden. Diese Zeichenfolge ist eigentlich der Name einer Variablen. Allerdings wird es immer noch als String klassifiziert und deshalb kann ich es nicht in meiner while-Schleife verwenden.

Daher meine Frage ist: Wie ändere ich eine Zeichenfolge in eine Variable im Rahmen von MATLAB?

Dies bezieht dich auf das folgende Stück Code:

WingType = strcat(Airfoiltype,TwistType); 
AR = Input.Surface.AR; 
Sweep =Input.Surface.SweepQC; 
AR_vec = [5 6 8 10]; 


switch WingType 


case 'UncamberedUntwisted' %% ---------------------------------------------------------------------------------------------------------------------------- 
Data_vec =['X5' 'X6' 'X8' 'X10']; 
load('UnsweptUncambered.mat') 

if Sweep <= 0 || Sweep >= 50 

     Inflex_Ratio = 1; 



elseif Sweep > 0 && Sweep < 50 


       if sum(ismember(AR_vec,AR)) == 1; 

        pos = find(ismember(AR_vec,AR)==1); 
        AR_data = Data_vec(pos); 
        interpvec1 = strcat(AR_data,'(:,1)'); 
        interpvec2 = strcat(AR_data,'(:,2)'); 

        Inflex_Ratio = interp1(interpvec1,interpvec1,Sweep,'linear'); 

       end 

zum Beispiel: Ich mag die Variable X5(:,1) und X5(:,2) erstellen. Diese sind jetzt in den Variablen interpvec1 bzw. interpvec1 gespeichert. Sie bleiben jedoch eine Zeichenfolge und ich kann sie daher nicht mit dem Befehl interp1 verwenden.

Vielen Dank!

+0

Bitte tun Sie dies nicht. Verwenden Sie ein Zellen-Array oder eine andere Struktur, um Ihre Daten zu speichern. – Suever

+0

@Suever Möchten Sie es erklären? Warum wird das nicht empfohlen? –

+0

Bitte lesen Sie den verlinkten Beitrag oben. Es gibt drei Links zu der MATLAB-Dokumentation und zugehörigen Blogs, die erklären, warum es eine schlechte Idee ist. – Suever

Antwort

0

Um den Wert von z.B. X5(:,1) in interpvec1 können Sie den eval Befehl verwenden:

eval(['interpvec1 = ' AR_data '(:,1);']); 

Ich hoffe, dass dies Ihr Problem löst. Beachten Sie jedoch, dass der Befehl eval im Allgemeinen nicht sehr schnell ist, schwer zu lesen und zu debuggen ist.

+0

Danke, das scheint jetzt für mich zu funktionieren. Allerdings verstehe ich die Nachteile der Verwendung des Eval-Befehls. Trotzdem, danke –

+0

@BalrajBoyal Sie erwähnten zwei Gründe in ihrem Beitrag und wenn Sie tatsächlich gehen lesen [http://stackoverflow.com/a/36966657/670206] des Pfostens, den ich oben erwähnt habe, werden Sie verstehen . – Suever

+2

@BalrajBoyal Der unmittelbarste Grund ist, dass es sehr wahrscheinlich ist, dass die nächste Frage, die Sie stellen werden, "Ich habe diese Variablen' X5', 'X6',' X8' und 'X10' und ich muss auf alle zugreifen in einer Schleife. Wie mache ich das? " Und die einzige Antwort wird mehr "eval" sein, als einfach die Indizes einer Matrix zu durchlaufen, wie Sie es in einem richtig strukturierten Programm tun würden. – beaker

Verwandte Themen