[Matlab] Incrémentation variable fonction
Résolu
galere-en-stage
-
Fee Fay Messages postés 1036 Statut Membre -
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
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:
- [Matlab] Incrémentation variable fonction
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
6 réponses
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.
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.
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.
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.
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
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
Bonjour mes amis !
Le problème est juste que le f=(x-3).^2; est mal placé ;-)
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 ;-)
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 ;-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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 !
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 !