[Matlab] Incrémentation variable fonction

Résolu
galere-en-stage -  
Fee Fay Messages postés 1036 Statut Membre -
Bonjour,

je veux tester une fonction pour savoir la position d'une valeur de f en x en fonction de la valeur de f en (x+1) et pour cela je fais quelque chose dans ce genre

for x=1:5
f=(x-3).^2;
if f(x)>f(x+1)
disp('fonction decroissante') ;
else
disp('fonction croissante') ;
end
end

Malheureusement ca marche pas et je suis obligée de passer par l'expression de la fonction:

for x=1:5
f=(x-3).^2;
if (x-3).^2>(x+1-3).^2
disp('fonction decroissante') ;
else
disp('fonction croissante') ;
end
end
Dans ce cas ca marche. Mais le problème c'est que la fonction que j'ai ecrite n'est qu'un exemple et ma fonction est beaucoup plus compliquée et dépend d'autres paramètres alors je ne peux absolument pas utiliser son expression dans la boucle if.
Il faut vraiment que j'utilise quelque chose du style: "if f(x)>f(x+1)" mais je vois pas où est mon problème
A voir également:

6 réponses

poukkid Messages postés 108 Statut Membre 11
 
Salut

Je suis pas certain d'avoir parfaitement compris ton problème, néanmoins je te conseillerais d'utiliser deux variables f, soit f1 et f2, afin de sauvegarder f(x) et f(x+1)

quel langage utilise tu?

en pseudo-code semblable au tiens(si c'est un langage, je ne connais pas désolé), je serais tenté de ne pas faire de boucle for, mais d'incrémenter la variable x entre les sauvegardes de f(x) et f(x+1) :

x=1
while (x<=5)
f1=(x-3).^2;
x=x+1
f2=(x-3).^2;
if f1>f2
disp('fonction decroissante') ;
else
disp('fonction croissante') ;
end
end

Je fais deux trois tests et si j'ai mieux je te préviens...
Précise le langage s'il te plaît.
0
poukkid Messages postés 108 Statut Membre 11
 
Mmmh je suis habitué aux langages type C et j'ai interprété
f=(x-3).^2;
comme une déclaration de variable or c'est une fonction, évidemment.

Quoi qu'il en soit la méthode que je t'ai donné avec 2 variables fonctionne de la même façon que la fonction, mais est un peu plus lourde évidemment.

Par contre si f=(x-3).^2; déclare bel et bien une fonction, je ne vois pas ou pourrait être le problème, il semble être uniquement relatif au langage que tu utilises, en C c'est très simplement implémentable.
0
poukkid Messages postés 108 Statut Membre 11
 
J'ai cru comprendre que c'était du Matlab.

Tes problèmes viennent peut-être de ta façon d'utiliser les fonctions,

j'ai trouvé ce lien qui pourrait peut-être t'aider, je ne peux pas faire mieux, j'utilise pas Matlab, déosle.

http://ufrmeca.univ-lyon1.fr/~buffat/COURS/MATLAB_HTML/node11.html
0
Fee Fay Messages postés 1036 Statut Membre 377
 
Bonjour mes amis !

Le problème est juste que le f=(x-3).^2; est mal placé ;-)
x=(1:5);
f=(x-3).^2;
for p=1:4
if f(p)>f(p+1)
disp('Fonction décroissante') ;
else
disp('Fonction croissante') ;
end
end
Cependant, l'exemple est quelque peu biaisé par le fait que la variable x et l'indice p du vecteur f prennent les mêmes valeurs, voici donc un exemple où l'on verra mieux la différence :
x=linspace(1,5,25);
f=(x-3).^2;
for p=1:numel(f)-1
if f(p)>f(p+1)
disp('Fonction décroissante') ;
else
disp('Fonction croissante') ;
end
end
Comme tu dois le savoir, Matlab tourne assez souvent plus vite lorsqu'on utilise au mieux la vectorialisation. Ici, la version vectorialisée est moins rapide que la version avec boucle que j'ai écrite (il y a probablement mieux cela dit) mais si tu désires voir ce que cela pourrait donner (c'est toujours intéressant et cela peut resservir), je proposerais ceci par exemple :
n=25;
x=linspace(1,5,n);
f=diff((x-3).^2);
%%
increase=repmat('Fonction croissante  ',n-1,1);
decrease=repmat('Fonction décroissante',n-1,1);
screen=repmat('Fonction constante   ',n-1,1);
%%
screen(f>0,:)=increase(f>0,:); clear increase;
screen(f<0,:)=decrease(f<0,:); clear decrease;
disp(screen);
Je te souhaite une bien bonne journée !

PS : Comme poukkid le mentionnait, le langage de programmation n'est pas précisé dans le message initial, ni dans le titre d'ailleurs. Je vais demander un changement de titre à la modération, comme cela ce sera plus clair si un jour quelqu'un cherche quelque chose et que le sujet apparaît dans la liste des résultats ;-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
galere-stage
 
c'est bien du matlab, j'étais sure de l'avoir précisé mais bon, désolée. En tout cas merci pour l'aide, je pense que ca devrait marcher maintenant
0
Fee Fay Messages postés 1036 Statut Membre 377
 
Ce n'est pas grave ;-)
Un oubli peut arriver quand on écrit un message aussi long. Mais ce qui est dommage c'est quand l'oubli concerne une information importante :-D
Cela dit, lorsqu'un message contient un morceau de code, les personnes habituées au langage en question cernent assez vite la demande, donc c'est beaucoup moins gênant que pour un message du type :
Bonjour
Je voudrais programmer ceci.
Merci d'avance


En tout cas il n'y a pas de quoi ;-)
Bonne fin de week-end et à la prochaine !
0