question about how to avoid using eval

Hello, all.
I got to know that using "eval" is not efficient and may cause several problems. I have used "eval" a lot in my previous codes.
If I want to replace the following expression without using "eval", would anyone help me one this? Thank you very much.
for jjjj=1:5
for iiii=1:40
for kkkk=1:3
x1(kkkk,:) = (1:10)*kkkk;
eval(['Resp.Phi',num2str(jjjj),'.Mu',num2str(iiii),'.Respx1(kkkk,:) = x1(kkkk,:);']);
end
end
end

 Akzeptierte Antwort

Walter Roberson
Walter Roberson am 22 Nov. 2016

0 Stimmen

Resp.(sprintf('Phi%d',jjjj).(sprintf('Mu%d',iiii)),.Respx1(kkkk,:) = x1(kkkk,:);

5 Kommentare

Baozai
Baozai am 22 Nov. 2016
Thank you, Walter.
But it seems it doesn't work properly. I got the following error in Matlab (matlab 2014b)
Undefined variable "sprintf" or class "sprintf".
Resp.(sprintf('Phi%d',jjjj)).(sprintf('Mu%d',iiii)),.Respx1(kkkk,:) = x1(kkkk,:);
KSSV
KSSV am 22 Nov. 2016
I think comma before .Respx1 is not needed. It throws error.
You are right,
Resp.(sprintf('Phi%d',jjjj)).(sprintf('Mu%d',iiii)).Respx1(kkkk,:) = x1(kkkk,:);
Baozai
Baozai am 22 Nov. 2016
This works, thank you very much.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

KSSV
KSSV am 22 Nov. 2016

0 Stimmen

iwant = cell(5,40,3) ;
for jjjj=1:5
for iiii=1:40
for kkkk=1:3
x1(kkkk,:) = (1:10)*kkkk;
iwant{jjjj,iiii,kkkk}= ['Resp.Phi',num2str(jjjj),'.Mu',num2str(iiii),'.Respx1(kkkk,:) = x1(kkkk,:);'] ;
end
end
end

3 Kommentare

Baozai
Baozai am 22 Nov. 2016
Hi, KSSV:
Thank you very much for replying. But I am afraid this is not what I want.
Resp is actually a structure that contains different vectors. The Structure is like:
Resp.Phi1.Mu1.Respx1 = [1 2 3 4 5 6 7 8 9 10; 2 4 6 8 10 12 14 16 18 20; 3 6 9 12 15 18 21 24 27 30]
Resp.Phi1.Mu2.Respx1 = [1 2 3 4 5 6 7 8 9 10; 2 4 6 8 10 12 14 16 18 20; 3 6 9 12 15 18 21 24 27 30]
Resp.Phi1.Mu3.Respx1 = [1 2 3 4 5 6 7 8 9 10; 2 4 6 8 10 12 14 16 18 20; 3 6 9 12 15 18 21 24 27 30]
..........
Resp.Phi5.Mu40.Respx1 = [1 2 3 4 5 6 7 8 9 10; 2 4 6 8 10 12 14 16 18 20; 3 6 9 12 15 18 21 24 27 30]
And the values in these matrices are different since the statements inside the loop are more complicated than listed here.
KSSV
KSSV am 22 Nov. 2016
Bearbeitet: KSSV am 22 Nov. 2016
Resp = struct ;
for jjjj=1:5
for iiii=1:40
for kkkk=1:3
x1(kkkk,:) = (1:10)*kkkk;
% iwant{jjjj,iiii,kkkk}= ['Resp.Phi',num2str(jjjj),'.Mu',num2str(iiii),'.Respx1(kkkk,:) = x1(kkkk,:);'] ;
end
for llll = 1:3
Resp(jjjj).Phi1(iiii).Mu1(llll).Respx1 = x1 ;
end
end
end
Resp(1).Phi1(1).Mu1
Baozai
Baozai am 22 Nov. 2016
This one also works, thank you very much for your help.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange

Tags

Gefragt:

am 22 Nov. 2016

Kommentiert:

am 22 Nov. 2016

Community Treasure Hunt

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

Start Hunting!

Translated by