27
ALIA. Med Symbolique mathématique Matlab 1 % SYMBOLIC MATHEMATIQUE TOOLBOX % % --------------------------------- % % **S Chapitre : % CALCULS : % Les boîtes à outils de la symbolique mathématique fournissent des fonctions pour faire les % opérations de base des calculs de différentiation, de limites, d'intégration, d'addition, et de % développement en séries de Taylor. Les sections suivantes décrivent ces fonctions. % %**S1. Différentiation : % ================== % Créons une expression symbolique : % syms a x % f = sin(a*x^2) % % Ensuite pour calculer la différentielle de f % % diff(f) % ans= % 2*cos(a*x^2)*a*x % Différencie f par rapport à sa variable symbolique (dans ce cas-ci x), qui est déterminé par la % "findsym". C'est à dire pour trouver les paramètres et les variables il faut taper: findsym(f) % ans % a, x % % % %**S1.2. Différencier par rapport une variable donnée: % % La commande "diff(f,z)" nous retourne la différentielle de f par rapport à z,(c’est-à-dire df/dz ) % % % Ex : syms a b c d x y z % f=x*y+z*cos(d*x*z/y)+exp(x.^3)+sqrt(z*y); % diff(f,x) % ans = % y-z^2*sin(d*x*z/y)*d/y+3*x^2*exp(x^3); % ------------ % diff(f,z) % ans = % cos(d*x*z/y)-z*sin(d*x*z/y)*d*x/y+1/2/(z*y)^(1/2)*y % ------------ % diff(f,y) % ans = % x+z^2*sin(d*x*z/y)*d*x/y^2+1/2/(z*y)^(1/2)*z % %**S1.3. Calculer la 2ème différentiation : % % Pour calculer la deuxième dérivés /x ; la commande est : % diff(f,2) ou diff(f,x,2) % % Ex : syms a x % f=cos(a*x) % diff(f,2) % --------------- % Ex : syms a x % f=sin(a*x) % diff(f,x,2) % Définir a, b, x, n, t, et thêta dans la zone de travail de MATLAB, en % utilisant la commande "sym".La table ci-dessous illustre % la commande de "diff": % % f | diff(f) % --------------|--------- % x^n | x^n*n/x % sin(a*t+b) | cos(a*t+b)*a % exp(i*theta) | i*exp(i*theta) % %**S1.4. Différentiation des fonctions de Bessel :

Symbolic Mathematique Toolbox_matlab

Embed Size (px)

DESCRIPTION

computer programming

Citation preview

Page 1: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

1

% SYMBOLIC MATHEMATIQUE TOOLBO X % % ----------------------------- ---- % % **S Chapitre : % CALCULS : % Les boîtes à outils de la symbolique mat hématique fournissent des fonctions pour faire les % opérations de base des calculs de différ entiation, de limites, d'intégration, d'addition, e t de % développement en séries de Taylor. Les s ections suivantes décrivent ces fonctions. % %**S1. Différentiation : % ================== % Créons une expression symbolique : % syms a x % f = sin( a*x^2) % % Ensuite pour calculer la différentielle de f % % diff(f) % ans= % 2*cos(a *x^2)*a*x % Différencie f par rapport à sa variable symboliqu e (dans ce cas-ci x), qui est déterminé par la % "findsym". C'est à dire pour trouver les paramètr es et les variables il faut taper: findsym(f) % ans % a, x % % % %**S1.2. Différencier par rapport une variable donn ée: % % La commande "diff(f,z)" nous retourne la différen tielle de f par rapport à z,(c’est-à-dire df/dz ) % % % Ex : syms a b c d x y z % f=x*y+z*cos(d*x*z/y)+exp(x.^3)+sqrt (z*y); % diff(f,x) % ans = % y-z^2*sin(d*x*z/y)*d/y+3*x^2*e xp(x^3); % ------------ % diff(f,z) % ans = % cos(d*x*z/y)-z*sin(d*x *z/y)*d*x/y+1/2/(z*y)^(1/2)*y % ------------ % diff(f,y) % ans = % x+z^2*sin(d*x*z/y)*d*x /y^2+1/2/(z*y)^(1/2)*z % %**S1.3. Calculer la 2ème différentiation : % % Pour calculer la deuxième dérivés /x ; l a commande est : % diff(f,2) ou diff(f,x,2) % % Ex : syms a x % f=cos(a*x) % diff(f,2) % --------------- % Ex : syms a x % f=sin(a*x) % diff(f,x,2) % Définir a, b, x, n, t, et thêta dans la zone de travail de MATLAB, en % utilisant la commande "sym".La table ci- dessous illustre % la commande de "diff": % % f | diff(f) % --------------|--------- % x^n | x^n*n/x % sin(a*t+b) | cos(a*t+b)*a % exp(i*theta) | i*exp(i*theta) % %**S1.4. Différentiation des fonctions de Bessel :

Page 2: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

2

% % Pour différencier la fonction de Bessel de la première espèce, % "besselj(nu, z)", par rapport à z, la co mmande est : % % syms nu z % b = besselj(nu,z); % db = diff(b) % % Ce qui retourne : % % db= % -besselj(nu+1,z)+nu/z*besselj( nu,z) % %**S1.5. Différentions d'une matrice donnée sous fo rme symbolique : % % La fonction de "diff" peut également prendre une matrice symbolique en tant qu’entrée. Dans ce cas-% % ci, la différentiation est faite élément-par-élém ent. % Considérer l'exemple : % % syms a x % A = [cos(a*x),sin(a* x);-sin(a*x),cos(a*x)] % Ce qui retourne % % A = % [ cos(a*x), sin(a*x) ] % [ -sin(a*x), cos(a*x) ] % La commande % % diff(A) % % Retourne % % ans = % [ -sin(a*x)*a, cos(a*x )*a] % [ -cos(a*x)*a, -sin(a*x )*a] % % On peut également effectuer la différentiation d' un vecteur colonne par rapport à un vecteur ligne. % Considérer la transformation euclidienne : % (x, y, z) en coordonnées sphériques(r,la bda,phi) , données par: % % x=r*cos(labda)*cos(phi) % y=r*cos(labda)*sin(phi) % z=r*sin(labda) % Note: % labda= élevation =latitude % phi=longitude=angle azimutha l. % % Pour calculer la matrice de Jacobi, J, d e cette transformation, utilisation % la fonction Jacobéenne. La notation math ématique de cette matrice de % transformation est J : % % J=d(x,y,z)/d(r,labd a,phi) % % Pour les besoins de la syntaxe de la boî te à outils, nous employons % l pour "labda" et petit f pour phi. % Les commandes: % % syms r l f % x = r*cos(l)*cos(f); y = r *cos(l)*sin(f); z = r*sin(l); % J = jacobian([x; y; z], [r l f]) % % Retourne le Jacobien j % % J = % [ cos(l)*cos(f), -r*sin(l )*cos(f), -r*cos(l)*sin(f)] % [ cos(l)*sin(f), -r*sin(l )*sin(f), r*cos(l)*cos(f)] % [ sin(l), r*cos(l), 0] % % Et la commande "det=simple(det(J))" nous calcule le déterminant de J % simplifié :(la commande "simlpe" simplif ié les expressions % symbolique math)

Page 3: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

3

% % Ex : syms r l f % x = r*cos(l)*cos(f); y = r*cos(l)*s in(f); z = r*sin(l); % J = jacobian([x; y; z], [r l f]); % det=simple(det(J)) % % Ce qui retourne : % % det = % -cos(l)*r^2 % % Ex : syms r l f % x = r*cos(l)*cos(f); y = r*cos(l)*s in(f); z = r*sin(l); % J = jacobian([x; y; z], [r l f]); % det(J) % % Ce qui retourne : % % det(J) % ans = % -cos(l)^3*cos(f)^2*r^2-co s(l)^3*sin(f)^2*r^2... % -r^2*sin(l)^2*cos(f)^2*co s(l)-r^2*cos(l)*sin(f)^2*sin(l)^2. % % Ex : syms r l f % x = r*cos(l)*cos(f); y = r*cos(l)*s in(f); z = r*sin(l); % J = jacobian([x; y; z], [r l f]); % simple(det(J)) % % Ce qui retourne : % detJ = % -cos(l)*r^2 % -- REMARQUE : % Noter que le premier argument de la fonction Jacobéenne doit être un vecteur colonne e t le % deuxième argument est un vecteur ligne. D'ailleur s, la détermination du Jacobien est le plus souvent % une expression trigonométrique plutôt compliquée ; afin de la simplifier on emploie la commande % "simple" qui opère les substitutions et les réduc tions trigonométriques (simplifications).La section " % Simplifications and Substitutions" discute les si mplifications pour plus de détail. Une table % récapitulant : % % les champs d'application de la "diff " et le jacobien : % % |Opérateurs mathématique | Comman de de MATLAB % ----------------------------|------- ---------------- % df/dx (1ére dérivée f/x) | diff(f ) ou diff(f,x) % ----------------------------|------- ---------------- % df/da (1ére dérivée f/a) | diff(f ,a) % ----------------------------|------- ---------------- % d2f/dy2 (2émme dérivée f/y)| diff(f ,y,2) % ----------------------------|------- ---------------- % J=d(r,t)/d(u,v) |J=jacob ian([r:t],[u,v]) % ----------------------------|------- ---------------- % % %**S2. Limite : % ========= % L'idée fondamentale dans le calcul est d'effectu er des calculs sur des fonctions comme une % variable "au voisinage de" ou approcher une certa ine valeur. Se rappeler que la définition de la % dérivé est donnée par une limite : % % f'(x)=Lim(f(x+h)-f(x))/h ave c h-->0 Si cette limite existe. % % La boîte à outils "symbolique de maths" nous permet de calculer les limites % des fonctions d'une façon directe. % Les commandes : % % syms h n x % limit((cos(x+h)-cos(x))/h,h, 0 ) % % Qui nous retourne la limite : %

Page 4: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

4

% ans = % -sin(x) % % Ex : % syms n x inf % limites((1+x/n)^n,n,inf) % ans = % exp(x) % % Ces deux exemples illustrer deux des lim ites les plus importantes dans % les mathématiques : la dérivé (dans ce c as-ci de cos( x)) et de la fonction % exponentielle(e^x). % Parfois beaucoup de limites Limf(x),x--> a à droit ou à gauche % de (a)" représentent des singularités, l es limites aux singularités de f(x) % ne sont pas toujours égales .Par conséqu ent, les trois limites de : % % lim(1/x), x--->0 ; lim(1/x) ,x--->0- et limi(1/x),x--->0+ % % donnent trois résultats distincts : non défini, "-infini", et"+infini", % respectivement. % Dans le cas des limites non définies, la boîte à outils symbolique de maths % renvoie NaN (pas un nombre). % % La commande : % limit(1/x,x,0) % ou % limit(1/x) % % Nous renvoit la méme réponse; à savoir % % ans= % NaN % La commande : % limit(1/x,x,0,'left') % % Retourne le résultat % % ans= % -inf % Par contre la commande % % limit(1/x,x,0,'right') % ans = % inf % % Observer que le caspar défaut, limit(f) est identique à limit(f,x, 0). % Explorer les options pour la commande de "limite" dans cette table. % Ici, nous supposons que f est une foncti on de l'objet symbolique x. % % |Opérateurs mathématique | Comman de de MATLAB % ----------------------------|------- ---------------- % Lim f(x) , x--->0 | limit( f) % ----------------------------|------- ---------------- % Lim f(x) , x--->a | limit( f,x,a) ou limit(f,a) % ----------------------------|------- ---------------- % Lim f(x) , x--->0- | limit( f,x,a,'left') % ----------------------------|------- ---------------- % Lim f(x) , x--->0+ |limit(f ,x,a,'right') % ----------------------------|------- ---------------- % % %**S3. Intégration : % ============ % Si f est une expression symbolique, puis la commande" int(f)" essaye de trouver une autre % expression symbolique, F, de sorte que la diff(F) = f. % C'est-à-dire,"int(f)" renvoie l'intégral indéfini ou antiderivée de f % % (fourni une intégrale forme fermée?). Se mblable à la différentiation: % % int(f,v) %

Page 5: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

5

% On emploie l'objet symbolique v comme va riable de l'intégration, plutôt que la variable dét erminée % par le "findsym". Voir commentaire sur la command e "int". % % La table suivante vous aide à passer de l’opérateur mathématique aux commande de MATLAB % % | Opérateurs mathématique | Commande de MATLAB | % ----------------------------------- ----|----------------------- % Intégrale de (x^n)*dx=(x^(n+1)/(n+1 ) | int(x^n) ou int(x^n,x) % ----------------------------------- ----|----------------------- % Intégrale de sin(2*x)*dx,[0;pi/2] | int(sin(2*x),0,pi/2) % | ou % | int(sin(2*x),0,pi/2) % ----------------------------------- ----|----------------------- % g=cos(at+b); | g=cos(a*t+b); % intégrale g(t)dt=sint(at+b)/a | int(g) ou int(g,t) % ----------------------------------- ----|----------------------- % intégrale de J1(z)dz=-J0(z) | int(besselj(1,z)) % | ou % | int(besselj(1,z),z) % ----------------------------------- ----|----------------------- % % Contrairement à la différentiation, l'intégratio n symbolique est une tâche plus compliquée. Un % certain nombre de difficultés peuvent surgir en c alculant l'intégrale. L'antiderivative, F, peut ne % pas exister sous la "forme fermée" ;il peut défin ir une fonction peu familière ;il se peut qu'elle % existe, mais le logiciel ne peut pas trouver l'an tiderivative ; le logiciel peut la trouver sur un % ordinateur, qui a une mémoire et une vitesse suf fisantes. Néanmoins, dans beaucoup de cas, MATLAB p eut % effectuer l'intégration symbolique avec succès. P ar exemple, créer les variables symboliques : % % syms a b theta x y n x1 u z % % Ces tables illustrent l'intégration des expressions contenant ces variables. % % | f | int(f) % ---------------------|------------- -------- % x^n | x^(n+1)/(n+1 ) % ---------------------|------------- -------- % y^(-1) | log(y) % ---------------------|------------- -------- % n^x | 1/log(n)*n^x % ---------------------|------------- -------- % sin(a*theta+b) | -1/a*cos(a*t heta+b) % ----------------------------------- -------- % exp(-x1^2) | 1/2*pi^(1/2) *erf(x1) % ---------------------|------------- -------- % 1/(1+u^2) | atan(u) % ----------------------------------- -------- % % Les dernières expositions d'exemple ce qui se pr oduit, si la boîte à outils ne peut pas % trouver l'antiderivative ; elle renvoie simplemen t la commande, y compris la variable de % l'intégration, "unevaluated". L'intégration défin ie est également possible. % Les commandes : % % int(f,a,b) % Et % % int(f,v,a,b) % % Sont utilisées pour évaluer les expressi ons symboliques : % % intégrale de f(x)dx entre (a)et(b); et i ntégrale de f(v)dv entre a et b respectivement. % % D'autres exemples : % % | f | a, b | int (f,a,b) % |-----------------|--------|------- ------------------------ % x^7 | 0, 1 | 1/8 % ------------------|--------|------- ------------------------ % 1/x | 1, 2 | log(2) % ------------------|--------|------- ------------------------ % log(x)*sqrt(x) |0, 1 | -4/9 % ------------------|--------|------- ------------------------

Page 6: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

6

% exp(-x^2) |0, inf | 1/2*pi ^(1/2) % ------------------|--------|------- ------------------------ % besselj(1,z) |0, 1 |1/4*hyp ergeom([1],[2, 2],-1/4) % ------------------|--------|------- ------------------------ % % Pour l'exemple de fonction de Bessel (be sselj), il est possible calcule une % approximation numérique de la valeur de l'intégral, en utilisant la % fonction "double". % % Ex : a = int(besselj(1,z),0,1) % % Retourne le résultat : % % a = % 1/4*hypergeom([1],[2, 2],-1/4) % % Et la commande % a=double(a) % % Retourne le résultat : % % a = % 0.2348 % %**S3.1 Intégration avec des paramètres réels : % % Une des subtilités impliquées dans l'int égration symbolique est l'"valeur" de divers paramè tres. % Par exemple, l’expression : exp(-(kx)^2) est positif, la courbe formée par la cloche qui ten d vers 0 % pendant que x tend vers l' - l'infini ou +l'inf ini pour tout nombre réel k. Un exemple de cette co urbe % est décrit ci-dessous avec k=1/sqrt(2) est produi te, en utilisant ces commandes : % % syms x % k = sym(1/sqrt(2)); % f = exp(-(k*x)^2); % ezplot(f) % % Cependant les expressions k^2 et x^2 ne sont pas traiter, a priori, en tant que nombres pos itifs. % À l'effet contraire, le Maple(Charger du calcul)s uppose que les variables symboliques x et k sont a % priori indéterminés. C'est-à-dire, ils sont des v ariables purement formelles sans propriétés % mathématiques. En conséquence, la tentative, init iale, de calculer l'intégrale de exp(-(kx)^2)dx dan s % la boîte à outils symbolique de maths, en utilisa nt les commandes. % % syms x k; % f = exp(-(k*x)^2); % int(f,x,-inf,inf) % % Il en résulte une sortie : % % definite integration: Can't determine if the inte gral is convergent: % Need to know the sign of --> k^2 % Will now try indefinite integration and then take limits. % % Warning: Explicit integr al could not be found. % ans = % int(exp(-k^2*x^2),x= -in f..inf) % % dont la traduction est : % % Intégration définie : Ne peut pas déterminer si l 'intégrale est convergente. Besoin de connaître le % signe du --> k^2. Nous essayons maintenant l'inté gration indéfinie et prennent alors des limites. % % Avertissement : L’intég rale explicite n'a pas pu être trouvée. % % ans=(american national s tandard) % int(exp(-k^2*x^2), x = - inf..inf) % % Dans la prochaine section, on verrat comment pren dre "k" comme variable réel et par conséquent le % nombre positif "k^2". % %**S3.2 Les variables réelle par l'intermédiaire d e "sym" %

Page 7: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

7

% Noter que "Maple" ne peut pas déterminer le signe de l'expression k^2.Comment faire pour surmonter c et % obstacle ? .La réponse est que l'on doit définir k comme une variable réelle, en utilisant la comma nde % "sym".Un dispositif % % % particulier et utile de "sym"; à savoir la vraie option, nous permet de déclarer k comme une % variable réelle. En conséquence, l'intégrale ci-d essus est calculée, dans la boîte à outils, en % utilisant la commande : % % syms x k real % f = exp(-(k*x)^2); % int(f,x,-inf,inf) % % Retourne le résultat : % % ans = % signum(k)/k*pi^(1/2 ) % % Noter que k est maintenant un objet symbolique d ans la zone de travail de MATLAB et une % variable réelle dans la zone de travail "Maple k ernel" ; (Chargé de calculer l'intégrale).En tapant % "clear k" on efface seulement k dans la zone de t ravail de MATLAB. Pour s'assurer que k n'a aucune % propriété % % % % formelle (c'est-à-dire, assurer k est un e variable purement formelle),taper : % % syms k unreal % % C'est varieté de commande "syms"pour éff acer k de la zone de travail % de Maple. On peut également déclarer une séquence des variables % symboliques w, y, x, z, comme variables réelles, en utilisant : % % syms w y x z real % % Dans ce cas-ci, toutes les variables ent re les mots "syms" et les mots % réelle "real" sont assignées de la propr iété réelle. C'est-à-dire, elles sont % des variables réelles dans la zone de tr avail de Maple. % %**S4. Symbolique pour la sommation (Symbolic Summ ation): % =========================================== ======= % % On peut calculer des additions symboliqu es, quand elles existent, en employant la commande de % "symsum".Par exemple, les p-séries : % % 1+1/2^2+1/3^2+...+1/n^2, Cette somme a pour valeu r pi^2/6 % et la série :1+x+x^2+x^3+x^4+...+x^k % qui a pour somme : % -1/(x-1) avec la condition |x|<1 % % Ces sommations sont indiquées par les co mmandes: % % syms x k % s1 = symsum(1/k^2,1,inf) % s2 = symsum(x^k,k,0,inf) % % La réponse est : % % s1 = % 1/6*pi^2 % s2 = % -1/(x-1) % %**S5. Series de Taylor: % ================== % La déclaration : % % syms x % f = 1/(5+4*cos(x)) % T = taylor(f,8) %

Page 8: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

8

% Retourne le résultat : % % T = % 1/9+2/81*x^2+5/1458*x^4 +49/131220*x^6 % % Cette commande génère une série de Taylo r au voisinage de zéro c.-à-d. de Maclaurin. Génére r une % suite de Taylor au voisinage de (a)on doit procéd er de la sorte: % % Ex : % syms x % g=exp(x*sin(x)) % H=taylor(g,12,2) % % Où g : Est la fonction à développer % 12 : Les 12 premiers termes non nuls de la série % 2 : le voisinage (a) % % Traçons ensemble, sur le même graphe, la fonction originale et sont développement pour les comparer : % % syms x % g = exp(x*sin(x)) % t = taylor(g,12,2); % xd = 1:0.05:3; yd = subs(g,x,xd ); % ezplot(t, [1,3]); hold on; % plot(xd, yd, 'r-.') % title('Taylor approximation vs. actual function'); % legend('Function','Taylor') % % %**S6. Prolongement des exemples de calcul (Extend ed Calculus Example ): % =========================================== ====================== % % La fonction "f(x)=1/(5+4*cos(x))" fournit un poi nt de départ pour illustrer plusieurs % opérations de calcul dans la boîte à outils. C'es t également une fonction intéressante en son propre % chef. % Les commandes : % % syms x % f=1/(5+5*cos(x)) % % stocke l'expression symbolique définissant la fo nction dans f. Commande "ezplot(f)" produit le % graphe de f(x) est nous permet de la visualiser. La fonction "ezplot" fait des essais pour faire des % choix raisonnables pour déterminer les axes, des a bscisses et ordonnées. Ses choix peuvent être % (outres) dépassés par un argument additionnel d'e ntrée, ou par commande "axe". Par défaut le domaine % de la fonction "ezplot" % est -2*pi<=x<=2*pi. % Pour produit le graphique de f(x) pour " a<=x<=b", taper : % % ezplot(f,[a b]) % % Maintenant regardons la deuxième dérivée de la fonction f: % % syms x % f = 1/(5+4*cos(x)) % f2 = diff(f,2) % % Cequi donne la réponse : % % f2 = % 32/(5+4*cos(x))^3*sin(x)^2+ 4/(5+4*cos(x))^2*cos(x) % % D'une manière équivalente, nous pouvons taper : F2 = diff(f, x, 2). La graduation des axes par % défaut dans "Eezplot" découpe une partie% du graphique de F2. Pour fixer les limites des % axes manuellement pour voir le graphe de la fonct ion en entière ; c.-à-d. il faut invoquer les % commandes : % % % %

Page 9: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

9

% ezplot(f2) % axis([-2*pi 2*pi -5 2]) % % Du graphique, il s'avère que les valeurs de f"(x) entre -4 et 1.Il s'avère que ce n'est pas vrai. No us % pouvons calculer la gamme exacte, des axes, pour f (c.-à-d., calculer son maximum et minimum % réels).Les maximums et les minimums réels de f"(x ) se produisent aux zéros de f"'(x). % % Les commandes : % % f3 = diff(f2); % pretty(f3) % % calculer f'"(x) et le montrer dans un fo rmat plus lisible. % % 2 % sin(x) co s(x) % 32 --------------- + 4 ------ --------- % 3 2 % (5 + 4 cos(x)) (5 + 4 cos(x)) % % Pour simplifier cette fonction user de l a commande : % % f3=simple(f3); % pretty(f3) % % % 2 2 % 8 sin(x) + 5 cos(x) + 4 co s(x) % 4 --------------------------- ----- % 3 % (5 + 4 cos(x)) % % Utilsons la fonction "solve" pour trouve r les zéros de f'"(x) % % z=solve(f3) % Ce qui retourne une matrice, editée en s imbolique, de 5-par-1 % (5 ligne et d'une colonne): % % z = % % [ atan(1/8*(-114-30 *17^(1/2))^(1/2),5/8+3/8*17^(1/2))] % [ atan(-1/8*(-114-30 *17^(1/2))^(1/2),5/8+3/8*17^(1/2))] % [ atan(1/8*(-114+30*17^( 1/2))^(1/2)/(5/8-3/8*17^(1/2)))+pi] % [ -atan(1/8*(-114+30*17^( 1/2))^(1/2)/(5/8-3/8*17^(1/2)))-pi] % % chacune de ces valeurs est un zéro de f '"(x). % La commande : % % format; % Default format of 5 digits % zr = double(z) % % convertie ces valeurs en doubles précisi on; ce qui donne comme % sortie: % % zr = % 0 + 1.4106i % 0 - 1.4106i % 2.7419 % -2.7419 % % Jusqu'ici, nous avons trouvé trois zéros réels e t deux zéros complexes. Cependant, le % graphique de f3 prouve que nous n'avons pas encor e trouvé tous ses zéros. % % La séquence suivante nous permet de visu aliser quelques zéros : % % ezplot(f3) % hold on; % plot(zr,0*zr,'ro') % plot([-2*pi,2*pi], [0,0],'g -.'); % title('Zeros of f3') %

Page 10: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

10

% Ceci se produit parce que le f"'(x) cont ient facteur sin(x), est zéro multiple entier du no mbre % (pi).La fonction,"solve(sin(x))", cependant, rapp orte seulement le zéro à x = 0.Nous pouvons obtenir % une % % liste complète des zéros réels par la fo nction "Zr " : % % zr = [0 zr(4) pi 2*pi-zr(4) ] % % Ce qui donne : % % zr = % 0 -2.7419 3.1416 9.0250 % % La commande : % % zr=[zr-2*pi zr zr+2*pi] % % nous donne toutes les racines entre -2*p i et 2*pi : % % -12.5664 -15.3082 -9.424 8 -3.5413 % -6.2832 -9.0250 -3.1416 2.7419 % -6.2832 -9.0250 -3.1416 2.7419 % -6.2832 -9.0250 -3.1416 2.7419 % ...... ....... ....... ...... % 12.5664 9.8245 15.7080 21.5914 % % Maintenant traçons la transformé Zr sur notre graphique pour une % image complète des zéros de f3: % % plot(zr,0*zr,'kX') % % Le premier zéro trouvé après résolvent e st x = 0.Nous substituons 0 à la % variable symbolique x dans la f2 ; par l a commande : % % f20 = subs(f2, x, 0) % % ce qui calcule la valeur de f"(0). % % f20= % 0 % % Un regard au graphique du f'"(x) prouve que c'est seulement un minimum % local, que nous démontrons en retraçant le f2. % clf % ezplot(f2) % axis([-2*pi 2*pi -4.25 1.25 ]) % ylabel('f2'); % title('Plot of f2 = f''''(x )') % hold on % plot(0,double(f20),'ro') % text(-1,-0.25,'Local minimu m') % % indique que les minimum globaux se produ isent près de x = - pi et x = +pi. % Nous pouvons démontrer qu'ils se produis ent exactement à x = -+pi, en % utilisant les commandes suivantes. D'abo rd nous essayons de substituer % (-pi) et (pi) dans la f'"(x): % % simple([subs(f3,x,-sym(pi)) ,subs(f3,x,sym(pi))]) % % le résultat est : % % ans = % [-4, -4] % % prouve que - pi et + pi s'avèrent justem ent être les points critiques de % f'"(x).Nous pouvons voir que - pi et + p i sont des minimum globaux en % traçant f2(-pi) et f2(pi) de nouveau f2 (x). % % m1 = double(subs(f2,x,-pi)) ; m2 = double(subs(f2,x,pi)); % plot(-pi,m1,'go',pi,m2,'go' ) % text(-1,-4,'Global minima')

Page 11: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

11

% % Les nouveaux minima sont "m1" et "m2" % % m1 = % -4.8986e-016 % m2 % 4.8986e-016 % % L'analyse antérieure confirme qu'une par tie de notre conjecture originale % que les valeurs de f"(x) est dans la pla ge [- 4,1].Nous pouvons % confirmer l'autre partie en examinant le quatrième zéro de f'"(x); trouvé % par "solve".D'abord extrayons le quatriè me zéro à partir de z et en % l'assignant comme à une variable séparée : % % s=z(4) % % on obtient: % % s = % -atan(1/8*(-114+30*17^(1/2 ))^(1/2)/(5/8-3/8*17^(1/2)))-pi % % Exécutons : % sd = double(s) % % sd = % -2.7419 % % % Traçons le point (s, f2(s))et de nouveau f2; en utilisant: % % M1 = double(subs(f2,x,s)); % plot(sd,M1,'ko') % text(-1,1,'Global maximum') % % cette visualisation confirme que "s" est un maximum. % % Par conséquent, notre conjecture, laisse voir, que le maximum du f"(x) % est dans [- 4,1 ] , mais ce qui est inc orrecte.¶L' intervalle réelle % est [- 4,1.0051]. Maintenant, intégrons f"(x) deux fois par rapport % à x ; en essayant de recouvrir notre fon ction originale % f(x)=1/(5+4*cos(x)). % La commande : % % g = int(int(f2)) % % retourne : % % g = % 2/3*atan(1/3*tan(1/2*x)) % % Ceci n'est pas certainement la fonction originale de f(x). % Regardons la différence f(x)-g(x) % % d=f-g % pretty(d) % % 1 % ------------ - 2/3 atan(1/3 tan(1/2 x)) % 5 + 4 cos(x) % % Simplifions d (simple(d) ou simplify(d)) : % % simple(d) % % ans = % 1/3*(3+10*atan(1/3*(-1+cos(x))/si n(x))+... % +8*atan(1/3*(-1+cos(x))/sin(x))*c os(x))/(5+4*cos(x)) % % Ceci illustre le concept que différencie r "f(x)" deux fois, alors qu'on % l'intégrant deux fois, produit une fonct ion qui peut différer de "f(x)" % par une fonction linéaire de x.En conclu sion, intégrons f(x) une fois de

Page 12: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

12

% plus. % % F = int(f) % % Il en résulte % % F = % 2/3*atan(1/3*tan(1/2*x) ) % % Le résultat implique la fonction d'arcta ngente. Bien que F(x) soit % l'antiderivative d'une fonction continue , elle est elle-même discontinu % comme le montre le grafique de "ezplot(F )". % % ezplot(F) % % Noter que f(x) a des sauts aux points x= -+ pi. Ceci se produit parce que % tan(x) est singulière aux point x= -+ pi . % montre, la valeur numérique des atan(tan (x))par morceaux constants a des % sauts (multiples impairs de pi/2) voir l a commande : % % syms x % ezplot(atan(tan(x))) % % Pour obtenir une représentation de F(x) qui n'a pas des sauts en ces points, % nous devons introduire une deuxième fonc tion, qui compense les % discontinuités. Alors nous ajoutons les multiples appropriés de % J(x) à F(x): % syms x % F=2/*atan(1/3*tan(1/2*x)); % J = sym('round(x/(2*pi))'); % c = sym('2/3*pi'); % F1 = F+c*J % % Produit le résultat : % % F1 = % 2/3*atan(1/3*tan(1/2*x) )+2/3*pi*round(1/2*x/pi) % % traçons maitenant F1 % % ezplot(F1,[-6.28,6.28]) % % Onvoit que le graphe de F1 ne présente a ucune discontinuité % Noter que nous employons le domaine [ - 6.28, 6.28 ] dans la "ezplot" alos % que son domaine par est défaut [ - 2*pi ;2*pi ].¶La raison de ceci provient % de l'évaluation de F1=2/3*tan(1/3*tan(1/ 2*x)) aux points x = -pi et x = pi % là où F(x) et J(x) n'ont pas de sauts. % % La manipulation appropriée des discontin uités (des branches asymptotique) % dans des fonctions à valeurs multiples c omme dans "arctan(x)" est un % problème profond et difficile dans les c alculs symboliques. Bien que % MATLAB et Maple ne puissent pas faire ce ci entièrement automatiquement, % ils fournissent les outils pour étudier de telles questions. % %**S7. Simplifications and Substitutions : % ==================================== % % Il y a plusieurs fonctions qui simplifie nt des expressions symboliques et % qui sont employées pour exécuter les sub stitutions symboliques. % % S.7.1 : Simplifications : % Ci après nous avons trois sortes d'expre ssions symboliques : % % syms x % f = x^3-6*x^2+11*x-6 % g = (x-1)*(x-2)*(x-3) % h = x*(x*(x-6)+11)-6 % % Voici leur " prettyprinted" formes, prod uites par "pretty": %

Page 13: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

13

% pretty(f), pretty(g), prett y(h) % 3 2 % x - 6 x + 11 x - 6 % % (x - 1) (x - 2) (x - 3) % % x (x (x - 6) + 11) - 6 % % Ces expressions sont trois représentatio ns différentes de la même fonction % mathématique, un polynôme cubique de x. Que chacune des trois formes est % préférable aux autres dans différentes s ituations. La première forme, f, est % la représentation la plus généralement u tilisée comme représentation % polynômiale. C'est une simplement combin aison linéaire des puissances de x. % la deuxième forme, g, est la forme facto risée. Elle montre les racines du % polynôme et est la plus précise pour l'é valuation numérique des racines. % Mais, si un polynôme n'a pas de telles r acines simples, sa forme factorisée % peut ne pas être si commode. La troisièm e forme, h, est la représentation de % Horner, ou la représentation imbriquées. Pour l'évaluation numérique, elles % comporte les quelques opérations arithmé tiques elle est la plus précise pour % une gamme de valeurs de x. Le problème d e la simplification symbolique % comporte la vérification que ces trois e xpressions représentent la même % fonction. Elle implique également un obj ectif moins clairement défini : % :: laquelle de ces représentations est " la plus simple" ? Cette boîte à % outils fournit plusieurs fonctions qui a ppliquent diverses identités % algébriques et trigonométriques pour tra nsformer une représentation d'une % fonction en des autres, formes plus simp les à représenter. Ces fonctions % sont "collect"(rassemblent), "expand"(au gmenter), "horner"(horner),"factor" % (facteur), "simplify"(simplifier),et "si mple"(simplifier) % % % S.7.1.1 La déclaration "Collect" : % % La déclaration % collect(f) % La déclaration "collect(f)" considère f comme un polynôme par sa variable % symbolique, x, et rassemble tous les coe fficients de la même puissance de % l'argument de x. En deuxième lieu elle i ndiquer la variable dans laquelle % rassemble les termes .Voici quelques exe mples. % % | f | simpl ify(f) % |------------------------------|------ --------------- % | x*(x*(x-6)+11)-6 | x^3-6 *x^2+11*x-6 % |------------------------------|------ --------------- % | (1-x^2)/(1-x) |x+1 % |---------------------------- |------ --------------- % | 1/a^3+6/a^2+12/a+8)^(1/3) |((2*a+ 1)^3/a^3)^(1/3) % |------------------------------|------ --------------- % | syms x y positive | % | log(x*y) |log(x) +log(y) % |------------------------------|------ --------------- % | exp(x) * exp(y) |exp(x+ y) % |------------------------------|------ --------------- % | besselj(2,x) + besselj(0,x) | 2/x*b esselj(1,x) % |------------------------------|------ --------------- % | gamma(x+1)-x*gamma(x) | 0 % |------------------------------|------ --------------- % | cos(x)^2 + sin(x)^2 | 1 % -------------------------------------- --------------- % % S.7.1.2 Simple : % % La fonction "simple" a un but mathématiq ue peu orthodoxe pour trouver une % simplification d'une expression qui a no mbre quelque de caractères. % Naturellement, il y a peu de justificati on mathématique pour réclamer % qu'une expression est "plus simple" que d'autres juste parce que sa % représentation d'ASCII est plus court, m ais ceci prouve qu'elle est % souvent satisfaisante dans la pratique. % % Les façons dont la fonction "simple" réa lise sont but en s'appliquant % indépendamment les fonctions "simplify", "collect", "factor", et d'autres % fonctions de simplification à une expres sion et à maintenir les longueurs des

Page 14: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

14

% résultats. La fonction "simple" renvoie alors le résultat le plus court. La % fonction simple a plusieurs formes, à ch aque différent renvoie un résultat % différent. La forme "simple(f)" montre c haque essai de simplification et la % fonction qui est produite dans la fenê tre de commande de MATLAB. La % fonction simple renvoie alors le résulta t le plus court. Par exemple, % la commande : % % simple(cos(x)^2 + sin(x)^2) % % montre les simplifications alternatives suivantes de la fenêtre de commande de MATLAB ¶ % % simplify: % 1 % % radsimp: % cos(x)^2+sin(x)^2 % % combine(trig): % 1 % % factor: % cos(x)^2+sin(x)^2 % % expand: % cos(x)^2+sin(x)^2 % % convert(exp): % (1/2*exp(i*x)+1/2/exp(i*x)) ^2-1/4*(exp(i*x)-1/exp(i*x))^2 % % convert(sincos): % cos(x)^2+sin(x)^2 % % convert(tan): % (1-tan(1/2*x)^2)^2/(1+tan(1 /2*x)^2)^2+4*tan(1/2*x)^2/ % (1+tan(1/2*x)^2)^2 % % collect(x): % cos(x)^2+sin(x)^2 % ans =1 % % Cette forme est utile quand tu vœux véri fier, par exemple, si la forme la % plus courte est en effet la plus simple. Si on n'est pas intéressé par la % façon dont simple réalise son résultat, employer la forme : % % f = simple(f) % % Cette forme renvoie simplement l'express ion la plus courte trouvée. % Par exemple : % f= simple(cos(x)^2+sin(x)) % retourne : % f= % 1 % % Si on veut savoir quelle simplification a produit le résultat le plus court, % employer la forme multi-sorties: % % [f, how] = simple(cos(x)^2+ sin(x)^2) % % Renvoie le résultat : % % f = % 1 % % how = % combine % % La fonction "simple" s'améliore parfois sur le résultat produit par % "simplify", parmi des simplifications qu 'elle essaye. Par exemple, une % fois appliqué aux exemples donnés pour " simplify", simples retourne un % résultat plus simple (ou au moins plus c ourt) dans deux cas: %

Page 15: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

15

% | f | simpli fy(f) | simple(f) % |-----------------------------|--------- ----------------|---------------- % | (1/a^3+6/a^2+12/a+8)^(1/3) |((2*a+1)^ 3/a^3)^(1/3) |(2*a+1)/a % |-----------------------------|--------- ----------------|---------------- % | syms x y positive | log(x)+l og(y) | log(x*y) % | log(x*y) | | % ---------------------------------------- --------------------------------- % % Dans certains cas, il est avantageux d'a ppliquer "simple" deux fois pour % obtenir l'effet de deux fonctions différ entes de simplification. Par exemple % les déclarations : % % f = (1/a^3+6/a^2+12/a+8)^(1 /3); % simple(simple(f)) % % Retourne : % 2+1/a % % La premiers application, "simple(f)", em ploie le "radsimp" pour produire % (2*a+1)/a ;la deuxième application emplo ie le "combine(trig)" pour % transformer celle ci en 1/a+2.La fonctio n "simple" est particulièrement % efficace sur des expressions impliquant des fonctions trigonométriques. % Voici quelques exemples. % % Voici quelques exemples: % % | f | simple(f ) % |--------------------------|---------- -------- % | cos(x)^2+sin(x)^2 | 1 % |--------------------------|---------- -------- % | 2*cos(x)^2-sin(x)^2 | 3*cos(x) ^2-1 % |--------------------------|---------- -------- % | cos(x)^2-sin(x)^2 | cos(2*x) % |--------------------------|---------- -------- % | cos(x)+(-sin(x)^2)^(1/2) | cos(x)+i *sin(x) % |--------------------------|---------- -------- % | cos(x)+i*sin(x) | exp(i*x) % |--------------------------|---------- -------- % | cos(3*acos(x)) |4*x^3-3*x % |--------------------------|---------- -------- % % S7.2 : Substitutions : % % Il y a deux fonctions pour la substituti on symbolique :"subexpr" et "subs". % % S7.2.1 subexpr : % % Ses commande sont : % syms a x % s=solve(x^3+a*x+1) % % résoudre l'équation x^3+a*x+1=0 par rapp ort à x. % Employer la fonction "pretty" pour mont rer s sous une forme plus % lisible: % pretty(s) % % La commande "pretty" hérite de la notati on de %n (n, un nombre entier) du % Maple pour dénoter les subexpressions qu i se produisent à des périodes % multiples dans l'objet symbolique. La fo nction "subexpr" nous permet de % sauver ces subexpressions communes aussi bien que l'objet symbolique récrit % en termes de subexpressions. Les subexpr essions sont sauvées dans un vecteur % colonne appelé "sigma".Continuer l'exemp le en tapant : % % r = subexpr(s) % % Retourne : % sigma = % -108+12*(12*a^3+81)^(1/2) % % r = % [ 1/6*sigma^(1/3)-2*a/sigma^(1/3)]

Page 16: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

16

% [-1/12*sigma^(1/3)+a/sigma^(1/3)+1 /2*i*3^(1/2)*(1/6*sigma^ % (1/3)+2*a/sigma^(1/3))] % [-1/12*sigma^(1/3)+a/sigma^(1/3)-1 /2*i*3^(1/2)*(1/6*sigma^ % (1/3)+2*a/sigma^(1/3))] % % Noter que la "subexpr" crée la variable "sigma" dans la zone de travail % de MATLAB. On peut vérifier ceci en tapa nt la commande "whos", ou par la % commande "sigma": % % sigma % % Retourne : % sigma = % -108+12*(12*a^3+81)^(1/2) % % S7.2.2 subs : % % Trouvons les valeurs propres et les vect eurs propres d'une matrice A. % % syms a b c % A = [a b c; b c a; c a b]; % [v,E] = eig(A) % % Retourne: % % v = % [ -(a+(b^2-b*a-c*b-c*a+a^2+c^2)^(1/2)-b)/(a-c), % -(a-(b^2-b*a-c*b-c*a+a^2+c^2)^(1/2)-b)/( a-c), 1] % [ -(b-c-(b^2-b*a-c*b-c*a+a^2+c^2)^(1/2))/(a-c), % -(b-c+(b^2-b*a-c*b-c*a+a^2+c^2)^(1/2))/( a-c), 1] % [ 1, % 1, 1] % % E = % [ (b^2-b*a-c*b- % c*a+a^2+c^2)^(1/2), 0, 0] % [ 0, -(b^2-b*a-c*b- % c*a+a^2+c^2)^(1/2), 0] % [ 0, 0, b+c+a] % % Supposer que nous voulons remplacer l'ex pression plutôt longue % (b^2-b*a-c*b-c*a+a^2+c^2)^(1/2)dans v et E.On emploie d'abord "subexpr " % % v = subexpr(v,'S') % % Qui retourne : % % S = % (b^2-b*a-c*b-c*a+a^2+c^2)^(1 /2) % % v = % [ -(a+S-b)/(a-c), -(a-S-b)/ (a-c), 1] % [ -(b-c-S)/(a-c), -(b-c+S)/ (a-c), 1] % [ 1, 1, 1] % % Ensuite, substituons le symbole S dans E avec "subs": % % E = subs(E,S,'S') % % Retourne : % E = % [ S, 0, 0] % [ 0, -S, 0] % [ 0, 0, b+c+a] % % Supposer maintenant que nous voulons éva luer v à a = 10.Nous pouvons faire % ceci à l'aide de la commande "subs" % % subs(v,a,10) % % Ceci remplace toutes les occurrences de a dans v avec 10.

Page 17: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

17

% [ -(10+S-b)/(10-c), -(10-S-b)/(10-c), 1] % [ -(b-c-S)/(10-c), -(b-c+S)/(10-c), 1] % [ 1, 1, 1] % % Notification, cependant, qui l'expressio n symbolique représentée % par S est inchangée par cette substituti on. C'est-à-dire, le symbole (a) % dans S n'est pas remplacé par 10.La comm ande "subs" est également une % fonction utile pour substituer une varié té de valeurs variables dans des % expressions particulières.(jeter un rega rd à S).Suppose qu'en plus de la % substitution a = 10, nous veulent égalem ent substituer les valeurs 2 et 10 % à b et à c respectivement. La manière de faire ceci est de placer des % valeurs pour a, b, et c dans la zone de travail. Alors les "subs" évaluent % son entrée en utilisant les variables sy mboliques existantes dans la zone % de travail courant. Dans notre exemple, nous avons placé en première : % % a = 10; b = 2; c = 10; % subs(S) % % Ce qui retourne : % % ans = % 8 % % Pour regarder le contenu de notre zone d e travail, taper "whos", qui donne: % % Name Size Bytes Class % % A 3x3 878 sym objec t % E 3x3 888 sym objec t % S 1x1 186 sym objec t % a 1x1 8 double ar ray % ans 1x1 140 sym objec t % b 1x1 8 double ar ray % c 1x1 8 double ar ray % v 3x3 982 sym objec t % % a, b, et c sont maintenant des variables de classe double tandis % qu'A, E, S, et v restent des expressions symboliques (de classe sym ). % Si on veut conserver a, b, et c en tant que variables symboliques, mais % en changeant leur valeur dans S, employe r ce procédé: % % syms a b c % subs(S,{a,b,c},{10,2,10}) % % Cequi retourne : % % ans = % 8 % % En tapant "whos" on révelle que a, b, et c restent des objets de "sym" % 1-par-1.La commande "subs" peut être co mbinée avec la commande "double" % pour évaluer une expression symbolique n umériquement. % Supposer que nous avons : % % syms t % M = (1-t^2)*exp(-1/2*t^2); % P = (1-t^2)*sech(t); % % et vouloir voir comment M et P diffèrent graphiquement. Une des approches % est de taper : % % ezplot(M); hold on; ezplot( P) % % maisce graphe ne nous aide pas aisément à identifier les courbes % ( tracer le pour avoir une idé). % Au lieu de cela, combinons "subs", "doub le", et "plot" : % % T = -6:0.05:6; % MT = double(subs(M,t,T)); % PT = double(subs(P,t,T)); % plot(T,MT,'b',T,PT,'r-.')

Page 18: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

18

% title(' ') % legend('M','P') % xlabel('t'); grid % % pour produire un graphique multicolore q ui indique la différence % entre M et P. % Enfin l'utilisation des subs avec des en chainements facilite % considérablement la solution des problèm es impliquant les transformées % de Fourier, de Laplace, ou la transformé e-z. % %**S8. Précision arithmétique des variables (Varia ble-Precision Arithmetic): % =========================================== ========================== % Vue d'ensemble (Overview): % Il y a trois genres différents d'opérati ons arithmétiques dans cette % boîte à outils. % % Numeric MATLAB's floating-point ari thmetic % Rational Maple's exact symbolic arit hmetic % VPA Maple's variable-precision arithmetic % % Par exemple, les déclarations de MATLAB : % % format long % 1/2+1/3 % % produit, dans le cas de l'utilisation d' un calcul numérique : % % 0.83333333333333 % % Si on utilise la forme symbolique : % % sym(1/2)+1/3 % % le résultat est : % % 5/6 % % Et, aussi avec la boîte à outils, les rap ports: % % digits(25) % vpa('1/2+1/3') % % Et, aussi avec la boîte à outils, les co mmandes de la % {variable-precision arithmetique} pour o btenir : % % 0.8333333333333333333333333 % % % S.8.1 Exemple : Employer les différents genr es d'écriture arithmétique % % S.8.1.1 Arithmétique Rationnelle : % % Par défaut, la boîte à outils des symbol iques maths emploie des % opérations arithmétiques raisonnables, c .-à-d., l'arithmétique symbolique % exacte du Maple. L'arithmétique rationne lle est appelée quand on crée des % variables symboliques en utilisant la fo nction d'"sym".La fonction de "sym" % convertit une double matrice en sa forme symbolique. Par exemple, si la % double matrice est : % % A=[1.1000 1.2000 1.3000 % 2.1000 2.2000 2.3000 % 3.1000 3.2000 3.3000] % % sa forme symbolique, S = sym(A), est : % % s = % [ 11/10, 6/5, 13/10] % [ 21/10, 11/5, 23/10] % [ 31/10, 16/5, 33/10] % % Pour cette matrice A, il est possible dé couvrir que les éléments sont les

Page 19: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

19

% rapports de petits nombres entiers, ains i la représentation symbolique est % formée de ces nombres entiers. D'autre p art, la déclaration suivante : % % format long % E = [exp(1) sqrt(2); log(3) rand] % % retourne : % % E = % 2.71828182845905 1.4142 1356237310 % 1.09861228866811 0.2311 3851357429 % % dans ce cas les éléments ne sont pas les rapports de petits nombres entiers, % ainsi le sym(E) reproduit la représentat ion à point mobile sous une forme % symbolique. % % sym(E) % ans = % [ 6121026514868074*2^( -51), sqrt(2)] % [ 4947709893870346*2^( -52), 8327642588833064*2^(-55)] % % S.8.1.2 Variable-Precision Numbers : % % La précision des nombres Variable sont d istingués de la % représentation rationnelle exacte par la présence d'une virgule décimale. Qui % permet une puissance de facteur 10, noté e par 'e '.Pour employer la % variable-précision au lieu de l'arithmét ique rationnelle, créez vos % variables en utilisant la fonction d'"vp a". % Pour des matrices avec les entrées purem ent doubles, la fonction % "vp"a produit de la représentation qui e st employée avec % "l'arithmétique de variable-précision". Continuant notre exemple, et en % utilisant digits(4), en appliquant la "v pa" à la matrice S : % % vpa(S) % % génére la sortie : % % S = % [1.100, 1.200, 1.300] % [2.100, 2.200, 2.300] % [3.100, 3.200, 3.300] % % Avec la "digits(25)" % % F=vpa(E) % % donne le résultat : % % F = % [2.718281828459045534884 808, 1.414213562373094923430017] % [1.098612288668110004152 823, .2189591863280899719512718] % % S.8.1.3 Conversion du point flotant(Convert ing to Floating-Point): % % double(sym(E)) % ans = % 2.71828182845905 1.4 1421356237310 % 1.09861228866811 0.2 3113851357429 % % double(vpa(E)) % ans = % 2.71828182845905 1.4 1421356237310 % 1.09861228866811 0.2 3113851357429 % % S.8.1.4 D'autres exemples (Another Example): % % Le prochain exemple est peut-être plus i ntéressant. Commençons par % l'expression symbolique : % % f = sym('exp(pi*sqrt(163))' ); %

Page 20: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

20

% La déclaration : % % double(f) % % produit le résultat à point flottant : % % ans = % 2.625374126407687e+017 % % Utilisation du deuxième argument du "vpa " pour indiquer le nombre de % chiffres: % % vpa(f,18) % % 262537412640768744. % % vpa(f,25) % % 262537412640768744.000 0000 % % Nous suspectons que f pourrait réellemen t avoir une valeur de nombre entier. % Ce soupçon est renforcé par la valeur de 30 chiffres, la "vpa(f,30)" % % 262537412640768743.99999999 9999 % % prouve que f est très près , mais pas ex actement égale à, un nombre entier. % %**S.8 Algebre lineaire : % ================== % S.8.1 Opération de base pour l'algèbre linéa ire : % % Les opérations algébriques de base sur l es objets symboliques sont % identiques que les opérations sur des ob jets de MATLAB de classe "doublent". % Ceci est illustré dans l'exemple suivant . La transformation "Givens" produit % une rotation plan par l'angle t. % Les déclaration : % % syms t; % G = [cos(t) sin(t); -sin(t) cos(t)] % % crée la matrice de transformation :G % % G = % [ cos(t), sin(t) ] % [ -sin(t), cos(t) ] % % L'application de la transformation "Give ns" deux fois devrait simplement % être une double rotation .La matrice cor respondante peut être calculée % en multipliant G par elle-même ou en sou levant G à la deuxième puissance. % % A = G*G % et % A=G^2 % % Produisent : % % A = % [cos(t)^2-sin(t)^2, 2*cos (t)*sin(t)] % [ -2*cos(t)*sin(t), cos(t)^ 2-sin(t)^2] % % La fonction "simple" % % A = simple(A) % % emploie une identité trigonométrique pou r renvoyer la forme prévue en % essayant plusieurs différentes identités et en sélectionnant celui qui % produit la représentation la plus courte . % % A = % [ cos(2*t), sin(2*t)] % [-sin(2*t), cos(2*t)]

Page 21: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

21

% % La rotation de Givens est une matrice or thogonale, ainsi sa transposé % est son inverse. % Confirmant ceci par : % % I = G.' *G % qui produit : % % I = % [cos(t)^2+sin(t)^2, 0] % [ 0, cos(t )^2+sin(t)^2] % % et ensuite : % % I = simple(I) % I = % [1, 0] % [0, 1] % % % S.8.2 Opérations de l'algèbre Linéaires : % Faisons plusieurs opérations algébriqu es linéaires de base. % La commande : % % H = hilb(3) % % génère une matrice de Hilbert de 3-par-3 , le "format short" de MATLAB % donne: % % H = % 1.0000 0.5000 0.333 3 % 0.5000 0.3333 0.250 0 % 0.3333 0.2500 0.200 0 % % Les éléments calculés de H sont des nomb res à point mobile qui sont les % rapports de petits nombres entiers. En e ffet, H est un choix de MATLAB de % classe "double" de .Convertissant H à un e matrice symbolique, % % H = sym(H) % % donne le résultat : % % H = % [ 1, 1/2, 1/3] % [ 1/2, 1/3, 1/4] % [ 1/3, 1/4, 1/5] % % Les éléments calculés de H sont des nomb res à point mobile qui sont les % rapports de petits nombres entiers. En e ffet, H est un choix de MATLAB % de double de classe. Convertissant H à u ne matrice symbolique. Par % conséquent : % % inv(H) % % Produit % % inv(H) % ans = % [ 9, -36, 30] % [ -36, 192, -180] % [ 30, -180, 180] % % et % % det(H) % produit % % 1/2160 % % Nous pouvons employer l'opérateur d'anti slash pour résoudre un système des % équations linéaires simultanément.

Page 22: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

22

% Les commandes : % % b = [1 1 1]' % x = H\b % % résolve le système Hx = b ;ce qui produi t la solution % % [ 3] % [-24] % [ 30] % % Chacun de ces trois résultats, de l'inve rse, du déterminante, et de la % solution du système linéaire, sont des r ésultats exacts infiniment précis, % rationnels, de la matrice de Hilbert. D' autre part, en utilisant "digits(16)", % la commande, % % V=vpa(hilb(3)) % % retourne les résultats % % [ 1., .500 0000000000000, .3333333333333333] % [.5000000000000000, .333 3333333333333, .2500000000000000] % [.3333333333333333, .250 0000000000000, .2000000000000000] % % Les virgules décimales dans la représent ation des différents éléments sont % l'indication de l'emploi de la "variable -précision-arithmétique". % Le résultat de chaque opération arithmét ique est arrondi à 16 chiffres % décimaux significatifs. En inversant la matrice, ces erreurs sont amplifiées % par le nombre d'état de matrice, qui pou r hilb(3) est environ de 500.En % conséquence, "inv(h)" retourne. % % [ 9.000000000000082, -36.00 000000000039, 30.00000000000035] % [-36.00000000000039, 192.0 000000000021, -180.0000000000019] % [ 30.00000000000035, -180.0 000000000019, 180.0000000000019] % % montre la perte de deux chiffres. Ainsi % % det(V) % % qui donne % % .462962962962958e-3 % et % % V\b % qui est % % [ 3.000000000000041] % [-24.00000000000021] % [ 30.00000000000019] % % Puisque H est non singulier, l'espace nu l de H est donné par la command % "null(H)" % % null(H) % ans = % [ empty sym ] % % et l'espace de colonne de H produit par "colspace(H)" donne une matrice % vide et une permutation de la matrice d' identité, respectivement. Pour faire % un exemple plus intéressant, essayons de trouver une valeur s pour H(1,1) % qui la rend singulière % Les commandes : % % syms s % H(1,1) = s % Z = det(H) % sol = solve(Z) % % produit % H =

Page 23: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

23

% [ s, 1/2, 1/3] % [1/2, 1/3, 1/4] % [1/3, 1/4, 1/5] % % Z = % 1/240*s-1/270 % sol = % 8/9 % % et après : % % H = subs(H,s,sol) % % substitue la valeur calculée "sol" par s dans H pour donner % % H = % [8/9, 1/2, 1/3] % [1/2, 1/3, 1/4] % [1/3, 1/4, 1/5] % % maintenant, la commande % % det(H) % % retourne % % ans= % 0 % % et la commande % % inv(H) % % produit un message d'erreur % % ??? error using ==> inv % Error,(in inverse) singular matrix % % car H est devenu singulière. Pour ces ma trices, Z = null(H) et C = colspace(H) % sont non trivial. % % Z = % [ 1] % [ -4] % [10/3] % % C = % [ 0, 1] % [ 1, 0] % [6/5, -3/10] % % Il devrait préciser que quoique H soit s ingulier. % Pour toute valeur entière du nombre d , posons : % % digits(d) % % et calculer % % det(vpa(H)) % inv(vpa(H)) % % il en résulte déterminante de la taille 10^(-d) et d'un inverse avec % des éléments de l'ordre de 10^d. % %**S.9. Valeurs propres (Eigenvalues): % ============================== % The symbolic eigenvalues of a square mat rix A or the symbolic eigenvalues % and eigenvectors of A are computed, resp ectively, using the commands % % E = eig(A) <--- Valeur s propres de A % [V,E] = eig(A) <--- Vecteu rs propres de A

Page 24: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

24

% % En revanche les commandes de la {variabl e-précision} sont : % % E = eig(vpa(A)) % [V,E] = eig(vpa(A)) % % Les valeurs propres de A sont les zéros du polynôme caractéristique de A, % à savoir le det(A-x*I), qui est calculé par % % poly(A) % % La matrice H de la précédente section fo urnit notre premier exemple. % % H = % [8/9, 1/2, 1/3] % [1/2, 1/3, 1/4] % [1/3, 1/4, 1/5] % % La matrice est singulière, ainsi une de ses valeurs propres doit être zéro. % La déclaration, % % [T,E]=eig(H) % % produit les matrices T et E. Les colonne s de T sont les vecteurs propres % de H % % T = % [ 1, 28/153+2/153*1258 9^(1/2), 28/153-2/153*12589^(12)] % [ -4, 1, 1] % [ 10/3, 92/255-1/255*1258 9^(1/2), 292/255+1/255*12589^(12)] % % D'une manière semblable les éléments de la diagonale de E sont les valeurs % propre de H % % E = % [0, 0, 0] % [0, 32/45+1/180*12589^(1/ 2), 0] % [0, 0, 32/45-1/180*12589^(1/2)] % % Il peut être plus facile de comprendre l a structure des matrices des % vecteurs propres, T, et les valeurs prop res, E, si nous convertissons % T et E en notation décimale. Nous opéron s comme suit. % % Les commandes % % Td = double(T) % Ed = double(E) % % retourne % Td = % 1.0000 1.6497 -1.2 837 % -4.0000 1.0000 1.0 000 % 3.3333 0.7051 1.5 851 % Ed = % 0 0 0 % 0 1.3344 0 % 0 0 0.0878 % % La première valeur propre est zéro. Le v ecteur propre correspondant % (la première colonne de Td) est identiqu e à la base pour l'espace nul % trouvé dans la précédente section. Les d eux autres valeurs propres sont % le résultat de l'application de la formu le quadratique à : % x^2-64/45*x+253/2160.Par la commande qu adratique facteur % "factor(poly(H))": % % syms x % g= simple(factor(poly(H)/x) ; % solve(g) % % Les expressions symboliques de forme com pacte pour les valeurs propres sont % possibles seulement quand le polynôme ca ractéristique peut être exprimé

Page 25: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

25

% comme produit de polynômes rationnels du degré quatre ou moins. La matrice % de Rosser est une matrice classique d'es sai d'analyse numérique qui s'avère % justement illustrer cette condition. % La déclaration : % % R = sym(gallery('rosser')) % % donne % % R = % [ 611, 196, -192, 407 , -8, -52, -49, 29] % [ 196, 899, 113, -192 , -71, -43, -8, -44] % [ -192, 113, 899, 196 , 61, 49, 8, 52] % [ 407, -192, 196, 611 , 8, 44, 59, -23] % [ -8, -71, 61, 8 , 411, -599, 208, 208] % [ -52, -43, 49, 44 , -599, 411, 208, 208] % [ -49, -8, 8, 59 , 208, 208, 99, -911] % [ 29, -44, 52, -23 , 208, 208, -911, 99] % % p=poly(R) % p = % 106131000000000000*x-10 82852512000000000*x^2+... % 4287904631000000*x^3-53 27676250000*x^4+82518000*x^5+... % 5080000*x^6-4040*x^7+x^ 8 % % % pretty(factor(p)) % % % 2 2 2 % x (x - 1020) (x - 1020 x + 100) ( x - 1040500) (x - 1000) % % Les facteurs du polynôme caractéristique (de degré 8) comporte % deux termes linéaires et trois termes qu adratiques. Nous % pouvons voir immédiatement que quatre de s valeurs propres sont 0, 1020, et % une racine double à 1000.¶Les quatre aut res racines sont obtenues à partir % des équations quadratiques restantes. % % utiliser la commande "eig(R)" pour trouv er ces valeurs % % eig(R) % ans = % [ 0] % [ 1020] % [ 510+100*26^(1/2)] % [ 510-100*26^(1/2)] % [ 10*10405^(1/2)] % [ -10*10405^(1/2)] % [ 1000] % [ 1000] % % La matrice de Rosser n'est pas un exempl e typique ; elle est rare pour % qu’une matrice pleine de 8-par-8 ait un polynôme caractéristique dans % une telle forme simple (produit de facte urs). Si nous changeons les deux % "des éléments de coin" de R de 29 à30 av ec les commandes : S=R ; S(1,8)=30; % % S=R;S(1,8)=30 % % S = % [ 611, 196, -192, 407, -8, -52, -49, 30] % [ 196, 899, 113, -192, -71, -43, -8, -44] % [ -192, 113, 899, 196, 61, 49, 8, 52] % [ 407, -192, 196, 611, 8, 44, 59, -23] % [ -8, -71, 61, 8, 411, -599, 208, 208] % [ -52, -43, 49, 44, -599, 411, 208, 208] % [ -49, -8, 8, 59, 208, 208, 99, -911] % [ 29, -44, 52, -23, 208, 208, -911, 99] % % et asseyons alors : % % P=poly(S)

Page 26: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

26

% % nous trouve % % P = % -1485834000000000+78837561 384000000*x-... % 1082776083645550000*x^2+4 287868039970000*x^3-... % 5327752172400*x^4+8261038 0*x^5+5079971*x^6-4040*x^7+x^ % % Nous constatons également que la "factor (p)" est p lui-même. C'est-à-dire, % le polynôme caractéristique ne peut pas être factorisé sous forme des % nombres rationnels. Pour cette matrice m odifiée de Rosser: % % F = eig(S) % % retourne % % F = % [ -1020.0532142558915165 931894252600] % [ -.17053529728768998575 200874607757] % [ .21803980548301606860 857564424981] % [ 999.94691786044276755 320289228602] % [ 1000.1206982933841335 712817075454] % [ 1019.5243552632016358 324933278291] % [ 1019.9935501291629257 348091808173] % [ 1020.4201882015047278 185457498840] % % Noter que ces valeurs sont près des vale urs propres de la matrice originale % de Rosser. De plus, les valeurs numériqu es de F sont un résultat de % l'arithmétique à point mobile de Maple. En conséquence, les différents % arrangements de "digits" ne changent pas le nombre de chiffres à la droite % de la position décimale. Il est égalemen t possible d'essayer de calculer % des valeurs propres des matrices symboli ques, mais les solutions compactes % de forme sont rares. La transformation " Givens" est produite comme matrice % exponentielle de la matrice élémentaire. (Exemple : Givens(2,2)) % % A= |0 1| % |-1 0| % % Les commandes la symbolique Mathématique nous permettent % % syms t % A=sym([0 1;-1 0]); % G=expm(t*A) % % donne % % G = % [ cos(t), sin(t)] % [ -sin(t), cos(t)] % % et % % g=eig(G) % % donne % % g = % [ cos(t)+(cos(t)^2-1)^(1 /2)] % [ cos(t)-(cos(t)^2-1)^(1 /2)] % % et % % for j=1:4 % [g,how]=simple(g) % end % % donne % % g = % [ cos(t)+(-sin(t)^2)^(1/ 2)] % [ cos(t)-(-sin(t)^2)^(1/ 2)]

Page 27: Symbolic Mathematique Toolbox_matlab

ALIA. Med Symbolique mathématique Matlab

27

% how = % simplify % g = % [ cos(t)+i*sin(t)] % [ cos(t)-i*sin(t)] % how = % radsimp % g = % [ exp(i*t)] % [ 1/exp(i*t)] % how = % convert(exp) % g = % [ exp(i*t)] % [ exp(-i*t)] % % how = % combine % % Noter la première application des utilit és "simple" pour simplifier pour % produire une somme de sinus et de cosinu s. Après, simple appelle la "radsimp" % pour produire le cos(t) +i*sin(t) pour l e premier vecteur propre. La % troisième application de "simple" utilis e convert(exp) pour changer les % sinus et les cosinus en exponentiels com plexes. La dernière application % de "simple" utilise "simplify" pour obte nir la forme finale. % %*-*-*-*-*-*-*-* POUR LA SIUTE VOIR CHAPITRE USING THE SYMBOLIC MATH TOOLBOX %%%%% JORDAN CANONICAL FORM