[MATLAB] intégration de fonctions "logiqu
mndmvieira
Messages postés
2
Statut
Membre
-
visitor -
visitor -
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??
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??
Configuration: Windows Vista Firefox 3.5.6
1 réponse
-
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)));
++