How can I call a value in side the a function which is already evaluated.
2 次查看(过去 30 天)
显示 更早的评论
%% knt i calculated here.
nf=max(elem(:,4));
maxfl=max(elf(:,1));
for flno = 1:1:maxfl
for i=elf(1,1)
for j=1:1:nf
p=CGx(j)-CGx(i);
au=[1,0,0;0,1,p;0,0,1];
bu=(au)';
kse=eval(['KSE',num2str(flno),'l']);
k1=kse(1:nodof,1:nodof);
eval(['Ktts',num2str(flno),'l','=[k1,-k1*au;-bu*k1,bu*k1*au]']); %Transformed Stiffness matrix of each floor (6x6)
end
end
end
%% I have to call the knt inside the loop, how can i call please suggest me.
function [t,k_hat, R, keyp, key,Keyp,Key, delu, k_T, delF_hat, deludot, u0, udot0, uddot0] = NewmarkNon( t,Ug, delF, dt, u_t, u_c,F1, KGf, C, MGf, Rt, Rc, R, gamma, beta, key, k_T,u,udot,uddot)
knt=eval(['Ktts',num2str(n),'l']);
end
29 个评论
采纳的回答
Bruno Luong
2022-9-27
If you want to retrieve value of a variable from the parent workspace inside a function without passing it as argument onstead of normal eval do this
knt = evalin('caller','Ktts',num2str(n),'l'])
8 个评论
Walter Roberson
2022-9-27
Postponing fixing your code by locking in using a hack like this is just going to result in it taking even longer to fix your code later.
更多回答(1 个)
Walter Roberson
2022-9-26
It is not possible to do what you want to do using eval(). You will need to rewrite your code.
2 个评论
Walter Roberson
2022-9-26
Do not store variables like KSE3l -- use a cell array like KSEl{n} instead. Or possibly a multidimensional array.
Likewise do not store into Ktts*l -- use a cell array like Kttsl{n} instead.
%% knt i calculated here.
nf=max(elem(:,4));
maxfl=max(elf(:,1));
for flno = 1:1:maxfl
for i=elf(1,1)
for j=1:1:nf
p=CGx(j)-CGx(i);
au=[1,0,0;0,1,p;0,0,1];
bu=(au)';
kse = KSEl{flno};
k1 = kse(1:nodof,1:nodof);
Kttsl{flno} = [k1,-k1*au;-bu*k1,bu*k1*au]']); %Transformed Stiffness matrix of each floor (6x6)
end
end
end
When you call your function (not shown in your code) pass in Kttsl as well.
%% I have to call the knt inside the loop, how can i call please suggest me.
function [t,k_hat, R, keyp, key,Keyp,Key, delu, k_T, delF_hat, deludot, u0, udot0, uddot0] = NewmarkNon( t,Ug, delF, dt, u_t, u_c,F1, KGf, C, MGf, Rt, Rc, R, gamma, beta, key, k_T, u, udot, uddot, Kttsl)
n = something appropriate
knt = Kttsl{n};
end
Walter Roberson
2022-9-26
Please read http://www.mathworks.com/matlabcentral/answers/304528-tutorial-why-variables-should-not-be-named-dynamically-eval for information about why we strongly recommend against creating variable names dynamically.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Deployment, Integration, and Supported Hardware 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!