2015-10-26 1 views
0

J'ai ce problème avec Matlab (aussi je suis nouveau à Matlab)Matlab Fonction comportement bizarre

j'ai écrit cette fonction:

function pret = p_t(i) 

    if (i<=0) 
     pret = (1/4)*exp((1/2)*i); 
    elseif ((1 <= i)) 
     if(i <=4) 
      pret = (1/9)*(i-1); 
     else 
      pret = 0; 
     end 
    else 
     pret = 0; 
    end 

fin

donc si je cours comme ça p_t (1: 4) je reçois 0; 0,111; 0,2222; 0,3333 chaque fois que basiquement il frappe la partie où il est censé être égal à zéro, il me donne tous les zéros, peu importe si certaines valeurs « valides » sont dans les INTEVAL par exemple p_t (-5: 5) me donne tous les zéros

http://puu.sh/kYEyo/6bf0574d34.png C'est la fonction que j'essaie de programmer ("sonst" est l'allemand pour "sinon" ou "else")

des idées où le problème pourrait être? Merci beaucoup!

+0

(* Juste pour les coups de pied *): Vous pouvez obtenir la même chose qu'une fonction en ligne: 'x = @ (t) (~ ((t < 1 & t > 0) | (t> 4))) * ((0.25 * exp (0.5. * t)) * (t <= 0) + ((1/9) * (t-1) * (t < 4 & t> 1))) ' –

Répondre

0

Je peux me tromper sur ce point mais -if- est une expression binaire, donc quand il est utilisé sur un vecteur avec autre chose que tous les zéros, il évaluera vrai. Ce code ne semble pas parcourir le vecteur passé. Je ne suis pas certain à quoi la réponse est censée ressembler mais cela itére à travers chaque élément de i et stocke la réponse dans le prét comme un autre vecteur.

function pret = p_t(i) 
    pret=zeros(size(i)); 
    for j=1:length(i) 
     if (i(j)<=0) 
      pret(j) = (1/4)*exp((1/2)*i(j)); 
     elseif ((1 <= i(j))) 
      if(i(j) <=4) 
       pret(j) = (1/9)*(i(j)-1); 
      else 
       pret(j) = 0; 
      end 
     else 
      pret(j) = 0; 
     end 
    end 

J'espère que c'est ce que vous cherchez.

+3

Pour donner l'explication précise de la documentation:" Une expression est vrai lorsque son résultat est non vide et ne contient que des éléments non-zéro (logique ou réel numérique). " Dès qu'un élément du vecteur ne correspond pas à la condition, il est évalué comme faux. – Daniel