Comment appeler une fonction dans une boucle for dans MATLAB?
Je voudrais l'appeler (exécuter) un m-file (fonction) dans une boucle comme ceci:
global m, r
m = 2;
for n = 2:10;
for r1 = 0:n-m;
r2 = n-m-r1;
r = [r1,r2];
[Call the function here?????????]
end
end
C'est la fonction:
function main
x0 = [-0.5403,0.5471];
fsolve(@fcn,x0)
function z = fcn(X)
rand('twister',5409);
global m, r
a = rand(m,1);
for i = 1:m
sm(i) = 0.0;
for l = m-i+1:m
sm(i) = sm(i)+r(l);
end
s = 1.0/(i+sm(i));
g(i) = (a(i))^s;
end
prod = 1.0;
for k = 1:m
prod = prod * g(m+1-k);
u(k) = 1.0-prod;
x(k) = (sqrt(3)/pi)*log(u(k)/(1-u(k)));
end
sum = 0;
sum1 = 0;
sum2 = 0;
for j = 1:m
sum = sum+(r(j)+2)*(1/(1+exp((-pi/sqrt(3))*((x(j)-X(1))/X(2)))));
sum1 = sum1+(r(j)+2)*((x(j)-X(1))/X(2))*(1/(1+exp((-pi/sqrt(3))*((x(j)-X(1))/X(2)))));
sum2 = sum2+(x(j)-X(1))/X(2);
end
z(1) = pi/(X(2)*sqrt(3))*(-m+sum);
z(2) =(-1/X(2))*(m+(pi/sqrt(3))*(sum2-sum1));
Merci beaucoup pour votre aide.
OriginalL'auteur Yang | 2009-10-14
Vous devez vous connecter pour publier un commentaire.
Les fonctions
main
etfcn
doivent être enregistrées dans un fichier appelé "principal.m". Vous devez vous assurer que ce fichier est dans votre répertoire de travail actuel ou quelque part sur le chemin MATLAB (comme mentionné dans un commentaire de Amro), de sorte que MATLAB peut l'obtenir. Depuismain
nécessite pas d'arguments d'entrée et n'a pas d'arguments de sortie, vous pouvez tout aussi bien l'appeler dans l'une quelconque des manières suivantes:Bien sûr. 😉
OriginalL'auteur gnovice
Si vous avez une fonction Principale.m
Principal.m
Vous devez appeler la fonction
Cela fait-il sens?
OriginalL'auteur MatlabDoug
Personnellement je voudrais créer votre fonction sans fonction main() de la partie.
créer un fichier appelé
fcn.m
avec votre fonction de réseau, assurez-vous que c'est dans votre répertoire de travail ou dans votre matlab chemin et ensuite l'appeler à l'intérieur de votre boucle.
OriginalL'auteur iancharest