Découvrir Scilab/Calcul numérique
Un livre de Wikibooks.
3. Calcul numérique
Sections |
[modifier] Définition de fonctions extérieures
Une fonction extérieure est une fonction numérique définie par l'utilisateur.
La fonction deff permet de définir de nouvelles fonctions pouvant s’exprimer avec les opérateurs déjà prédéfinis (les « fonctions internes » ou « primitives »). On passe deux chaînes de caractères comme paramètre :
- la première indique le nom de la fonction et les variables utilisées en entrée et en sortie, et
- la deuxième indique la formule.
Par exemple, la fonction
- ƒ(x) = 2 · x
peut se définir par
deff('[y] = f(x)', 'y = 2 * x')
On peut aussi utiliser l'instruction function sous la forme
-->function [y] = f(x) --> … --> endfunction
la formule, sous la forme y = expression, étant placée à la place des trois points. Avec l'exemple ci-dessus, cela donne :
-->function [y] = f(x) -->y=2*x -->endfunction
(voir aussi le chapitre Programmation).
La fonction s'utilise par la suite de la même manière qu'une fonction interne (sur l'exemple ci-dessus) :
-->f(2)
ans =
4.
-->feval(1,f) // calcule f(1)
ans =
2.
[modifier] Intégration
Scilab peut calculer l'intégrale numérique d'une fonction entre deux bornes :
integrate('expression', 'x', x0, x1)
calcule l’intégrale de la fonction décrite par expression ; expression est une chaîne de caractères interprétable par Scilab, comme par exemple 'sin(x)'. Le paramètre x est la variable d’intégration, et les bornes sont x0 et x1.
[modifier] Affichage d'une fonction
Il est souvent utile de pouvoir afficher des fonctions, ainsi voici un exemple de la syntaxe Scilab pour afficher une Fonction.
t=[1:0.1:30]; // le ; sert à ne pas afficher les valeurs de t, t est un vecteur des valeurs de 1 à 30 par pas de 0,1
deff('[y] = f(x)', 'y = cos(x)./x') // ici je définit la fonction f et j'utilise ./ au lieu de / car cos(t) est un nombre et t est un vecteur
plot(t,f(t))
scf(1) // Je crée une nouvelle fenêtre de graphique
clf() // J'efface ce qu'il y a dans cette nouvelle fenêtre avant de tracer un autre graphique
plot(t,cos(t))
(voir aussi le chapitre Graphiques_et_sons)
[modifier] Résolution d'équations
Scilab dispose de plusieurs primitives permettant la résolution d'équations. Nous présentons ci-après quatre fonctions internes, mais il en existe d'autres pour des systèmes spécifiques.
[modifier] Système d'équations quelconque
Scilab permet la résolution numérique d'un système d'équations quelconques, avec la fonction fsolve.
[modifier] Système d'équations linéaires
Scilab permet la résolution numérique d'un système d'équations linéaires, avec la fonction linsolve
[x0,kerA]=linsolve(A,b)
où A est la matrice réelle des coefficients du système d'équations, et b un vecteur de constantes ; les solutions de A×x + b = 0 sont de la forme x0 + w×kerA, w étant un réel arbitraire ;
- Exemple
- Le système d'équation
- est décrit par
- donc
-->A=[3 1 ; 4 -1];
-->b=[-5 ; -9];
-->linsolve(A,b)
ans =
2.
- 1.
- le vecteur
- représente la solution x = 2 et y = -1.
- Si maintenant on tape
-->[x0,kerA]=linsolve(A,b)
kerA =
[]
x0 =
2.
- 1.
- indiquant que la solution est unique.
- Exemple
- S'il y a plus d'inconnues que d'équations :
- 3x + y = 5
-->A=[3 1];b=-5;
-->linsolve(A,b)
ans =
1.5
0.5
-->[x0,kerA]=linsolve(A,b)
kerA =
- 0.3162278
0.9486833
x0 =
1.5
0.5
- la première commande renvoit une seule solution ; la deuxième commande indique que les solutions sont de la forme
- notons qu'il s'agit d'une solution approchée, puisque la vraie solution est du type :
Si le système n'admet pas de solution, Scilab affiche le message d'erreur : WARNING:Conflicting linear constraints!.
Scilab permet également la résolution symbolique d'un système linéaire avec la fonction solve
w = solve(A,c)
où A est une matrice triangulaire supérieure de chaînes de caractères (les coefficients du système d'équation), c est un vecteur de chaînes de caractères (la partie à droite des signes égal), et w est la matrice résultat de A×w = c.
- Exemple
- Le système d'équation
- est décrit par
-->A=['1','1';'0','1'];c=['a1';'a2']; -->solve(A,c) ans = !a1-a2 ! ! ! !a2 !
- indiquant que la solution est x = a1 − a2 et y = a2.
[modifier] Équation différentielle ordinaire
Une d'équation différentielle ordinaire (ordinary differential equation) peut être résolue de manière numérique avec la fonction ode. Soit une fonction y(t) ; si l'équation différentielle est
- dy/dt = ƒ(t,y),
alors ƒ ayant été définie (fonction externe), la syntaxe pour déterminer y(t) est
y = ode(y0,t0,t,f)
où
- y0 et t0 sont les valeurs initiales du système, y(t0) = y0,
- t est un vecteur de valeurs pour lesquelles on calcule les solutions, et
- y est le vecteur de solutions (
plot(t,y)permet de tracer le graphique des solutions).
La fonction interne ode admet des arguments permettant de résoudre des situations spécifiques :
'roots'pour rajouter une équation g(t,y) = 0,'discrete'pour calculer de manière récursive y(k+1)=ƒ(k,y(k)) à partir d'un état initial y(k0).
- Exemple
- On se place sur un segment [0,5;1] ; on veut déterminer les valeurs numériques de la fonction y vérifiant
et y(0) = 0
- on a donc en fait ƒ(t,y) = t , t0 = y0 = 0
-->t=[0.5:0.1:1]; // points de [0,5;1] espacés de 0,1 le ; sert à ne pas afficher les 5 valeurs de t lors de l'exécution du code
-->deff('[u] = f(t,y)', 'u = t') // définition de la fonction f
-->ode(0,0,t,f)
ans =
0.125 0.18 0.245 0.32 0.405 0.5
- qui sont bien les valeurs de 1/2×t²
[modifier] Voir aussi
- Dans Wikipédia






