У меня есть странное поведение моих функций, и поскольку я не так привык к кодированию MATLAB, я думаю, это связано с чем-то очень легким, что я надеваю Не получишь.Выполнено различное поведение функции в цикле или при разворачивании цикла
Я не могу понять, как это может напечатать что-нибудь другое
fx(Punti(1,:),Punti(2,:))
fx(Punti(2,:),Punti(3,:))
fx(Punti(3,:),Punti(4,:))
fx(Punti(4,:),Punti(5,:))
из этого
for i_unic=1:4
fx(Punti(i_unic,:),Punti(i_unic+1,:))
end
Рассмотрим FX в качестве обобщенной функции.
Возможно ли, что fx использует некоторые переменные, которые по какой-либо причине стираются в конце каждой итерации?
EDIT
-> "Punti" просто матрица, содержащая точки а SCARA робот должен следовать
-> FX функция "Ретта", и это следующий
function retta(PuntoA,PuntoB,Asse_A,q_ini,rot,contaerro,varargin)
global SCARA40
global inizio XX YY ZZ
global seg_Nsteps
npassi = seg_Nsteps;
ipuntofin = inizio + npassi;
for ipunto = inizio : ipuntofin
P4 = PuntoA + (ipunto-inizio)*(PuntoB-PuntoA)/npassi;
q = kineinversa(Asse_A,P4,q_ini,rot);
Mec = SCARA40.fkine(q);
Pec = Mec(:,4);
if (dot((P4-Pec),(P4-Pec),3)>0.0001)
fprintf(1,'\n P4 Desid. = [%9.1f %9.1f %9.1f %9.1f ] \n',P4);
fprintf(1,'\n P4 Attuato = [%9.1f %9.1f %9.1f %9.1f ] \n',Pec);
contaerro = contaerro + 1;
else
q_ini = q;
end
SCARA40.plot(q);
XX(ipunto) = Pec(1);
YY(ipunto) = Pec(2);
ZZ(ipunto) = Pec(3);
if(nargin>6)
color = varargin{1};
else
color = 'r';
end
plot3(XX,YY,ZZ,color,'LineWidth',1);
drawnow;
hold on
end
end
функция тест с результатами
Punti = [ 10,10,0,1 ;10,-10,0,1 ;-10,-10,0,1 ; -10,10,0,1 ] ;
%inizio=1
%retta(Punti(1,:)',Punti(2,:)',Asse_A,q_ini,rot,contaerro)
%inizio=21
%retta(Punti(2,:)',Punti(3,:)',Asse_A,q_ini,rot,contaerro)
%inizio=41
%retta(Punti(3,:)',Punti(4,:)',Asse_A,q_ini,rot,contaerro)
%inizio=61
inizio=1
for i=1:length(Punti)-1
retta(Punti(i,:)',Punti(i+1,:)',Asse_A,q_ini,rot,contaerro)
inizio=inizio+20;
end
двух изображений были получены перезапуском Matlab
Настоящая причина невозможна, если вы не разместите код для 'fx' (а также для генерации' Punti'). –
Я не могу опубликовать его, он слишком длинный, и никто его не читал. Шахта была теоретическим вопросом, а не связанным с кодом .. это было: «Вы можете найти причину, по которой функция будет вести себя двумя разными способами, если она находится в цикле for или если была выполнена безотказность цикла?» В любом случае он использует глобальные переменные и классы matlab, если эта информация может помочь. – GalloCedrone
Если начальное состояние каждого из этих фрагментов точно такое же, не должно быть причин, по которым выводится что-то «другое». И не зная, как вы называете фрагменты или как используются глобалы и классы, я не могу дать вам больше информации, чем это. – TroyHaskin