Problem renaming variable in loop
2 次查看(过去 30 天)
显示 更早的评论
Problem renaming variable in loop
In the last loop, suppose I want to get the Hilbert transform from the 150 variables Is1...Is150 in the commented part of the loop.
What should I do????
clc
clear
close all
Rf1=[0.001 10 50 100 200];
L_line1=[4 50 100 140 150 196];
tetta1=[10 -15 20 30 40];
%% read data
for i=1:150
if i<=30
f1(i)=Rf1(1);
elseif i<=60
f1(i)=Rf1(2);
elseif i<=90
f1(i)=Rf1(3);
elseif i<=120
f1(i)=Rf1(4);
else
f1(i)=Rf1(4);
end
end
for i=1:30
if i<=5
f2(i)=L_line1(1);
elseif i<=10
f2(i)=L_line1(2);
elseif i<=15
f2(i)=L_line1(3);
elseif i<=20
f2(i)=L_line1(4);
elseif i<=25
f2(i)=L_line1(5);
else
f2(i)=L_line1(6);
end
end
for i=1:150
f1_1=num2str(f1(i));
prt1=strcat(f1_1,'_');
for i2=1:30
f2_2=num2str(f2(i2));
prt2=strcat(f2_2,'_');
for i3=1:5
f3_3=num2str(tetta1(i3));
prt3=strcat(f3_3,'\');
print=strcat('C:\Users\MASHHADSERVICE\Downloads\data\SPS\S_',prt1,prt2,prt3,'Fi_',prt1,prt2,f3_3,'.mat');
load(print);
If=cell2mat(Y);
If_1=If(1999:2401);
eval(['If', num2str(i) , ' =If_1;']);
print1=strcat('C:\Users\MASHHADSERVICE\Downloads\data\SPS\S_',prt1,prt2,prt3,'Si_',prt1,prt2,f3_3,'.mat');
load(print1);
Is=cell2mat(Y);
Is_1=Is(1999:2401);
eval(['Is', num2str(i) , ' =Is_1;']);
end
end
end
load('C:\Users\MASHHADSERVICE\Downloads\data\SPS\S_0.001_4_10\time.mat');
t1=cell2mat(Y);
time=t1(2001:2400);
%% D
for i=1:150
eval(['Is1', num2str(i) , '= hilbert'(eval(['Is', num2str(i)]))]);
end
3 个评论
KALYAN ACHARJYA
2023-7-5
编辑:KALYAN ACHARJYA
2023-7-5
Additionally, you may utilize the piecewise function, which will help reduce the number of if-else statements.
John D'Errico
2023-7-5
编辑:John D'Errico
2023-7-5
Please don't use an answer to do nothing more than say thanks to someone unspecified. And then worse, ACCEPT IT AS THE CORRECT ANSWER.
I deleted your acepted answer, since it was not in fact even remotely an answer. Learn to use comments.
回答(1 个)
Nathan Hardenberg
2023-7-5
编辑:Nathan Hardenberg
2023-7-6
Having 150 variables all having to do with one thing is not good coding. You should use a matrix/array/cells instead. Also using eval() to assign or call a variable is not very good as well. You should avoid those practices.
But here is hopefully a possible solution, instad of your for-loop:
Is1 = -1; Is2 = 4; Is3 = 3; Is4 = 2; % "your" variables
N = 4; % N=150 in your example
xr = zeros(1,N); % predefine matrix
for i=1:N
xr(i) = eval(['Is', num2str(i)]); % write all your variables into the matrix
end
X = hilbert(xr) % do the hilbert transform
Edit: To be more clear, since @Stephen23 posted a very useful link in the comments. This style of coding using eval() should not be done! My answer is just a working solution, with the given situation, without changing the intire code. But changing the intire code would be recommended with reasons written in the link.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!