Vecteurs sous Scilab

Bonjour,

j'ai un petit souci avec les vecteurs de Scilab, problème que les nombreux manuels et documentation sur le net éludent.
J'aimerais calculer $\displaystyle \sum_{k=1}^n f(k)$ lorsque n est un lui-même un vecteur, autrement dit, si n prend toutes les valeurs entre 1 et p, je voudrais obtenir le vecteur $\displaystyle \Bigg[ \sum_{k=1}^1 f(k) , ..., \sum_{k=1}^p f(k) \Bigg]$ Les boucles for ne permettent pas de prendre en compte un vecteur comme borne supérieure...

Merci pour vos suggestions...

Réponses

  • Tu peux le faire avec des boucles "for" si tu le souhaites mais ce n'est pas très efficace. La fonction "cumsum" est la bonne fonction pour faire ce que tu souhaites, si j'ai bien compris ta question.
  • bonsoir

    n est un vecteur ???? je n'arrive pas à comprendre ....

    Paul
  • Scilab permet d'appliquer des fonctions à des vecteurs (des listes...). Par exemple, si f(x)=x², f([0,1, 1/2,e]) renvoie [0,1,1/4,e²].

    En revanche, la réponse de H répond à ma question mais je crois avoir mal posé ma question ^^
    Je vais donc vous tacher d'exposer tout mon problème.

    Je voudrais obtenir le graphe de $$\ln \Bigg| \int_0^1 f(x) \mathrm{d}x - \dfrac{1}{n}\sum_{k=1}^n f(\frac{k}{n})\Bigg|$$ en fonction de $\ln(n)$
    pour n variant de 1 à 10 ou 100 ou 1000 peu importe...f fonction continue sur [0;1]...

    Pour cela, j'entre en abscisse log(X) où X=1:1:10 (le vecteur [1;...;10]) et en ordonnée, j'aurais besoin de l'image du vecteur X par la fonction $$n \mapsto \Bigg| \int_0^1 f(x) \mathrm{d}x - \dfrac{1}{n}\sum_{k=1}^n f(\frac{k}{n})\Bigg|$$. J'ai donc en réalité simplement besoin de l'image de X par $$n \mapsto \sum_{k=1}^n \dfrac1n f(\frac{k}{n})$$

    Sauf erreur de ma part (je ne connais pas encore très bien Scilab), si je fais une boucle for de borne supérieure n pour calculer la somme, je ne peux pas après demander à Scilab de remplacer n entier par un vecteur d'entiers. Je ne vois pas en quoi la fonction cumsum peut m'aider puisqu'il y a aussi du $n$ dans ma somme, chose que j'avais complètement oubliée dans mon premier post..

    Voilà, j'espère que ma requête vous paraîtra plus claire...Merci pour vos réponses !
  • Il y a peut-être une manière de procéder comme tu le souhaites en scilab, je ne connais pas toutes les subtilités.

    Le plus simple me semble être de procéder dans l'autre sens. Par exemple pour la fonction carrée et pour n de 1 à 10 :

    for n=1:10
    y=abs(mean([1:n^(-1):1].^2)-3^(-1));
    end;
  • J'ai finalement fait deux boucles... Une qui calcule la somme à n entier fixé et une autre qui remplace le vecteur X = [1,...,10] par l'image par la fonction ci-dessus. J'espère ne pas avoir trop formalisé le problème et l'avoir rendu incompréhensible. Vous trouverez par exemple ci-dessous ce que ça donne sur l'approximation numérique d'une intégrale d'une fonction continue sur [a;b] par la méthode du point milieu (mais en pratique, je dois tester plusieurs méthodes de Newton-Cotes, et conjecturer graphiquement les ordres de convergences...). Ma fonction milbis prend effectivement comme argument un vecteur...

    http://www.ilemaths.net/img/forum_img/0599/forum_599908_1.gif
  • Pour plus d'efficacité, tu aurais vraiment intérêt à remplacer la boucle de milieu par une somme comme je l'ai fait.

    Quelque chose comme

    pas=(b-a)/n;
    y=pas*sum(f([0:n-1]*pas+a+pas/2));
  • C'est noté, c'est donc comme ça qu'on fait une somme sans boucle for... merci beaucoup... Je suppose que ça améliore la vitesse des calculs (?) mais pour mes besoins je ne pense pas que ça change grand chose mais merci quand même !

    Du coup, les fonctions élémentaires de chaque méthodes ne me servent plus alors qu'elles font parties des questions du TP... Je suppose que ça n'a pas d'importance. Merci beaucoup en tout cas !
  • Quand n est grand (avec les notations de mon précédent message), l'utilisation de "sum" et de vecteurs est effectivement beaucoup plus rapide à l'execution (en tout cas quand on manipule des fonctions usuelles, je n'ai jamais utilisé les fonctions définies par l'utilisateur comme ton f). Avec l'habitude c'est aussi plus rapide à écrire mais ça demande une certaine gymnastique. Ce n'est effectivement peut-être pas très important pour toi.
  • D'accord ! En revanche, je viens de comprendre que vous avez dû faire un petit calcul pour avoir la formule que vous venez de me donner dans la méthode du point milieu certes pas méchant (moyenne des points consécutifs équidistants dans [a;b]). Je dois cependant tester mon programme également pour la méthode des trapèzes, de Simpson et de Boole-Villarceau...
    J'ai donc peur que cela devienne très indigeste à calculer et encore plus à taper en Scilab sans erreur (bon Scilab identifie les parenthèses qui s'ouvre et se ferment mais bon...)
Connectez-vous ou Inscrivez-vous pour répondre.