[MATLAB] intégration de fonctions "logiqu

Fermé
mndmvieira Messages postés 2 Date d'inscription samedi 19 décembre 2009 Statut Membre Dernière intervention 21 décembre 2009 - 21 déc. 2009 à 11:46
 visitor - 4 oct. 2012 à 02:49
Bonjour,
J'essaye de calculer quelques intégrales en utilisant matlab mais je n'arrive pas.

Je reçoit toujours l'erreur "Operands to the || and && operators must be convertible to logical scalar values."

Mes fonctions sont les suivantes:

function v = phi(x,i)
global xt; //xt est un vecteur contenant des valeurs
if ((x<=xt(i)) && (x>=xt(i-1)))
v = ((x-xt(i))/(xt(i)-xt(i-1)));
else
v = 0;
end
end

et

function v = F(x)
v = exp(x);
end


J'ai besoin de calculer l'intégrale de F(x)*phi(x,i) entre 0 et 1. i est fixe!

j'ai essayé QUAD et TRAPZ mais elles donnent la même erreur:
"Operands to the || and && operators must be convertible to logical scalar values."

Je pense que c'est parce qu'on donne une intervalle (0:1/1000:1 par exemple) comme paramètre pour x au lieu de donner un nombre, ce qui fait que ma fonction phi n'arrive pas à faire ses calculs...

Quelqu'un peut m'aider svp??

1 réponse

damlegone32 Messages postés 74 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 31 mai 2011 29
22 déc. 2009 à 22:50
Salut,

Oui tu as la bonne explication. Rajoute une boucle for dans la fonction phi qui parcours toutes les valeurs de x.
Ou alors tu peut utiliser la fonction find à la place de ton if/else :
v = zeros(size(x)); %initialisation du vecteur v
indices = find( (x<=xt(i)) && (x>=xt(i-1)));
v(indices) = ((x(indices)-xt(i))/(xt(i)-xt(i-1)));

++
0
find est trop lent, utilise l'indexage logique.
0