Découvrir Scilab/Calcul numérique

Un livre de Wikibooks.

Table des matièresIndex



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)

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
\begin{cases}
3x+y=5\\
4x-y=9
\end{cases}
est décrit par
A = \begin{pmatrix}
3 & 1 \\
4 & -1 \\
\end{pmatrix}
,\ b = \begin{pmatrix}
-5 \\
-9 \\
\end{pmatrix}
donc
-->A=[3 1 ; 4 -1];

-->b=[-5 ; -9];

-->linsolve(A,b)
 ans  =

    2.
  - 1.
le vecteur
\begin{pmatrix}
2 \\
-1 \\
\end{pmatrix}
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
\begin{cases}
x = 1,5 - 0,316\,227\,8 \cdot t\\
y = 0,5 + 0,948\,683\,3 \cdot t
\end{cases}
notons qu'il s'agit d'une solution approchée, puisque la vraie solution est du type :
\begin{cases}
x = 1,5 - \frac{1}{3} \cdot t \simeq 1,5 - 0,33\ldots \cdot t\\
y = 0,5 + t
\end{cases}

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)

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
\begin{cases}
x + y = a_1\\
y = a_2
\end{cases}
est décrit par
A = \begin{pmatrix}
1 & 1 \\
0 & 1 \\
\end{pmatrix}
,\ c = \begin{pmatrix}
a_1 \\
a_2 \\
\end{pmatrix}
-->A=['1','1';'0','1'];c=['a1';'a2'];

-->solve(A,c)
 ans  =

!a1-a2  !
!       !
!a2     !
indiquant que la solution est x = a1a2 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)

  • 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
\frac{dy}{dt} = t 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

[modifier] Notes



Calculs élémentaires < > Graphiques et sons