Rechercher : dans
Par :

[Matlab] Incrémentation variable fonction

Dernière réponse le 24 mai 2009 à 14:41:55 galere-en-stage, le 22 mai 2009 à 11:49:28 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Firefox 3.0.10

Meilleures réponses pour « [Matlab] Incrémentation variable fonction » dans :
Représentation des courbes sous Matlab VoirLa fonction plot permet essentiellement de tracer des courbes sous Matlab. Dans cette astuce, nous allons essayer de détailler le fonctionnement de cette commande. Simple utilisation Vecteur Matrice Vecteur en fonction d'un autre Autres...
La vectorialisation sous MatLab VoirVectorialisation sous Matlab Sommaire I. Le logiciel MatLab II. Configuration matérielle pour les tests III. Comment vectorialiser un calcul IV. Expérience sur un exemple concret IV.1. Exemple concret choisi IV.2. Programme non...
Concaténer les vecteurs ou les matrices sous Matlab VoirL'opération de concaténation des variables de Matlab consiste à regrouper ces variables dans une seule (vecteur ou matrice). Exemple : |2 3 4| X= |1 2 5| |0 2 7| Avec : |9 6 8| Y= |5 6 2| |3 2 1| Donne...
Javascript - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Cette notion de sous-programme est généralement appelée fonction...
Perl - Les fonctions VoirLa notion de fonction et de procédure On appelle procédure un sous-programme qui permet d'effectuer un ensemble d'instruction par simple appel de la procédure dans le corps du programme principal. Les procédure permettent d'exécuter dans plusieurs...
Java: les opérateurs VoirQu'est-ce qu'un opérateur? Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire effectuer des opérations, les évaluer, ... On distingue plusieurs types d'opérateurs : les opérateurs de calcul les...

1

poukkid, le 22 mai 2009 à 15:19: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.

Répondre à poukkid

2

poukkid, le 22 mai 2009 à 15:35:31

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.

Répondre à poukkid

3

poukkid, le 22 mai 2009 à 16:02:51

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/node1­1.html

Répondre à poukkid

4

Fee Fay, le 22 mai 2009 à 17:27:11

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 ;-) Tous les animaux criaient bien haut
Qu’il était le crapaud le plus beau, quand il jouait du banjo

Répondre à Fee Fay

5

galere-stage, le 24 mai 2009 à 14:36:20

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

Répondre à galere-stage

6

 Fee Fay, le 24 mai 2009 à 14:41:55

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 ! Tous les animaux criaient bien haut
Qu’il était le crapaud le plus beau, quand il jouait du banj­o

Répondre à Fee Fay
Collection CommentÇaMarche.net