Vous êtes sur la page 1sur 27

ALIA.

Med

Symbolique mathmatique

Matlab

% SYMBOLIC MATHEMATIQUE TOOLBOX % % --------------------------------% % **S Chapitre : % CALCULS : % Les botes outils de la symbolique mathmatique fournissent des fonctions pour faire les % oprations de base des calculs de diffrentiation, de limites, d'intgration, d'addition, et de % dveloppement en sries de Taylor. Les sections suivantes dcrivent ces fonctions. % %**S1. Diffrentiation : % ================== % Crons une expression symbolique : % syms a x % f = sin(a*x^2) % % Ensuite pour calculer la diffrentielle de f % % diff(f) % ans= % 2*cos(a*x^2)*a*x % Diffrencie f par rapport sa variable symbolique (dans ce cas-ci x), qui est dtermin par la % "findsym". C'est dire pour trouver les paramtres et les variables il faut taper: findsym(f) % ans % a, x % % % %**S1.2. Diffrencier par rapport une variable donne: % % La commande "diff(f,z)" nous retourne la diffrentielle de f par rapport z,(cest--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 2me diffrentiation : % % Pour calculer la deuxime drivs /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) % Dfinir a, b, x, n, t, et thta 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. Diffrentiation des fonctions de Bessel :

ALIA. Med

Symbolique mathmatique

Matlab

% % Pour diffrencier la fonction de Bessel de la premire espce, % "besselj(nu, z)", par rapport z, la commande 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. Diffrentions d'une matrice donne sous forme symbolique : % % La fonction de "diff" peut galement prendre une matrice symbolique en tant quentre. Dans ce cas-% % ci, la diffrentiation est faite lment-par-lment. % Considrer 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 diffrentiation d'un vecteur colonne par rapport un vecteur ligne. % Considrer la transformation euclidienne : % (x, y, z) en coordonnes sphriques(r,labda,phi) , donnes par: % % x=r*cos(labda)*cos(phi) % y=r*cos(labda)*sin(phi) % z=r*sin(labda) % Note: % labda= levation =latitude % phi=longitude=angle azimuthal. % % Pour calculer la matrice de Jacobi, J, de cette transformation, utilisation % la fonction Jacobenne. La notation mathmatique de cette matrice de % transformation est J : % % J=d(x,y,z)/d(r,labda,phi) % % Pour les besoins de la syntaxe de la bote 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 dterminant de J % simplifi :(la commande "simlpe" simplifi les expressions % symbolique math)

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

Symbolique mathmatique

Matlab

Ex : 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]); 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)*sin(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-cos(l)^3*sin(f)^2*r^2... -r^2*sin(l)^2*cos(f)^2*cos(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)*sin(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 Jacobenne doit tre un vecteur colonne et le % deuxime argument est un vecteur ligne. D'ailleurs, la dtermination du Jacobien est le plus souvent % une expression trigonomtrique plutt complique ; afin de la simplifier on emploie la commande % "simple" qui opre les substitutions et les rductions trigonomtriques (simplifications).La section" % Simplifications and Substitutions" discute les simplifications pour plus de dtail. Une table % rcapitulant : % % les champs d'application de la "diff" et le jacobien : % % |Oprateurs mathmatique | Commande de MATLAB % ----------------------------|----------------------% df/dx (1re drive f/x) | diff(f) ou diff(f,x) % ----------------------------|----------------------% df/da (1re drive f/a) | diff(f,a) % ----------------------------|----------------------% d2f/dy2 (2mme drive f/y)| diff(f,y,2) % ----------------------------|----------------------% J=d(r,t)/d(u,v) |J=jacobian([r:t],[u,v]) % ----------------------------|----------------------% % %**S2. Limite : % ========= % L'ide fondamentale dans le calcul est d'effectuer des calculs sur des fonctions comme une % variable "au voisinage de" ou approcher une certaine valeur. Se rappeler que la dfinition de la % driv est donne par une limite : % % f'(x)=Lim(f(x+h)-f(x))/h avec h-->0 Si cette limite existe. % % La bote outils "symbolique de maths" nous permet de calculer les limites % des fonctions d'une faon directe. % Les commandes : % % syms h n x % limit((cos(x+h)-cos(x))/h,h,0 ) % % Qui nous retourne la limite : %

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %**S3. % % % % % % % % % ans = -sin(x)

Symbolique mathmatique

Matlab

Ex : syms n x inf limites((1+x/n)^n,n,inf) ans = exp(x) Ces deux exemples illustrer deux des limites les plus importantes dans les mathmatiques : la driv (dans ce cas-ci de cos( x)) et de la fonction exponentielle(e^x). Parfois beaucoup de limites Limf(x),x-->a droit ou gauche de (a)" reprsentent des singularits, les limites aux singularits de f(x) ne sont pas toujours gales .Par consquent, les trois limites de : lim(1/x), x--->0 ; lim(1/x) ,x--->0- et limi(1/x),x--->0+ donnent trois rsultats distincts : non dfini, "-infini", et"+infini", respectivement. Dans le cas des limites non dfinies, la bote outils symbolique de maths renvoie NaN (pas un nombre). La commande : limit(1/x,x,0) ou limit(1/x) Nous renvoit la mme rponse; savoir ans= NaN La commande : limit(1/x,x,0,'left') Retourne le rsultat ans= -inf Par contre la commande limit(1/x,x,0,'right') ans = inf Observer que le caspar dfaut, 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 fonction de l'objet symbolique x. |Oprateurs mathmatique | Commande 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') ----------------------------|-----------------------

Intgration : ============ 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'intgral indfini ou antiderive de f (fourni une intgrale forme ferme?). Semblable la diffrentiation: int(f,v)

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

Symbolique mathmatique

Matlab

On emploie l'objet symbolique v comme variable de l'intgration, plutt que la variable dtermine par le "findsym". Voir commentaire sur la commande "int". La table suivante vous aide passer de loprateur mathmatique aux commande de MATLAB | Oprateurs mathmatique | Commande de MATLAB | ---------------------------------------|----------------------Intgrale de (x^n)*dx=(x^(n+1)/(n+1) | int(x^n) ou int(x^n,x) ---------------------------------------|----------------------Intgrale 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); intgrale g(t)dt=sint(at+b)/a | int(g) ou int(g,t) ---------------------------------------|----------------------intgrale de J1(z)dz=-J0(z) | int(besselj(1,z)) | ou | int(besselj(1,z),z) ---------------------------------------|----------------------Contrairement la diffrentiation, l'intgration symbolique est une tche plus complique. Un certain nombre de difficults peuvent surgir en calculant l'intgrale. L'antiderivative, F, peut ne pas exister sous la "forme ferme" ;il peut dfinir une fonction peu familire ;il se peut qu'elle existe, mais le logiciel ne peut pas trouver l'antiderivative ; le logiciel peut la trouver sur un ordinateur, qui a une mmoire et une vitesse suffisantes. Nanmoins, dans beaucoup de cas, MATLAB peut effectuer l'intgration symbolique avec succs. Par exemple, crer les variables symboliques : syms a b theta x y n x1 u z Ces tables illustrent l'intgration 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*theta+b) ------------------------------------------exp(-x1^2) | 1/2*pi^(1/2)*erf(x1) ---------------------|--------------------1/(1+u^2) | atan(u) ------------------------------------------Les dernires expositions d'exemple ce qui se produit, si la bote outils ne peut pas trouver l'antiderivative ; elle renvoie simplement la commande, y compris la variable de l'intgration, "unevaluated". L'intgration dfinie est galement possible. Les commandes : int(f,a,b) Et int(f,v,a,b) Sont utilises pour valuer les expressions symboliques : intgrale de f(x)dx entre (a)et(b); et intgrale 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 ------------------|--------|-------------------------------

ALIA. Med

Symbolique mathmatique

Matlab

% exp(-x^2) |0, inf | 1/2*pi^(1/2) % ------------------|--------|------------------------------% besselj(1,z) |0, 1 |1/4*hypergeom([1],[2, 2],-1/4) % ------------------|--------|------------------------------% % Pour l'exemple de fonction de Bessel (besselj), il est possible calcule une % approximation numrique de la valeur de l'intgral, en utilisant la % fonction "double". % % Ex : a = int(besselj(1,z),0,1) % % Retourne le rsultat : % % a = % 1/4*hypergeom([1],[2, 2],-1/4) % % Et la commande % a=double(a) % % Retourne le rsultat : % % a = % 0.2348 % %**S3.1 Intgration avec des paramtres rels : % % Une des subtilits impliques dans l'intgration symbolique est l'"valeur" de divers paramtres. % Par exemple, lexpression : exp(-(kx)^2)est positif, la courbe forme par la cloche qui tend vers 0 % pendant que x tend vers l' - l'infini ou +l'infini pour tout nombre rel k. Un exemple de cette courbe % est dcrit ci-dessous avec k=1/sqrt(2) est produite, 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 positifs. % l'effet contraire, le Maple(Charger du calcul)suppose que les variables symboliques x et k sont a % priori indtermins. C'est--dire, ils sont des variables purement formelles sans proprits % mathmatiques. En consquence, la tentative, initiale, de calculer l'intgrale de exp(-(kx)^2)dx dans % la bote outils symbolique de maths, en utilisant les commandes. % % syms x k; % f = exp(-(k*x)^2); % int(f,x,-inf,inf) % % Il en rsulte une sortie : % % definite integration: Can't determine if the integral is convergent: % Need to know the sign of --> k^2 % Will now try indefinite integration and then take limits. % % Warning: Explicit integral could not be found. % ans = % int(exp(-k^2*x^2),x= -inf..inf) % % dont la traduction est : % % Intgration dfinie : Ne peut pas dterminer si l'intgrale est convergente. Besoin de connatre le % signe du --> k^2. Nous essayons maintenant l'intgration indfinie et prennent alors des limites. % % Avertissement : Lintgrale explicite n'a pas pu tre trouve. % % ans=(american national standard) % int(exp(-k^2*x^2), x = - inf..inf) % % Dans la prochaine section, on verrat comment prendre "k" comme variable rel et par consquent le % nombre positif "k^2". % %**S3.2 Les variables relle par l'intermdiaire de "sym" %

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %**S4. % % % % % % % % % % % % % % % % % % % % % % % %**S5. % % % % % % %

Symbolique mathmatique

Matlab

Noter que "Maple" ne peut pas dterminer le signe de l'expression k^2.Comment faire pour surmonter cet obstacle ? .La rponse est que l'on doit dfinir k comme une variable relle, en utilisant la commande "sym".Un dispositif

particulier et utile de "sym"; savoir la vraie option, nous permet de dclarer k comme une variable relle. En consquence, l'intgrale ci-dessus est calcule, dans la bote outils, en utilisant la commande : syms x k real f = exp(-(k*x)^2); int(f,x,-inf,inf) Retourne le rsultat : ans = signum(k)/k*pi^(1/2) Noter que k est maintenant un objet symbolique dans la zone de travail de MATLAB et une variable relle dans la zone de travail "Maple kernel" ; (Charg de calculer l'intgrale).En tapant "clear k" on efface seulement k dans la zone de travail de MATLAB. Pour s'assurer que k n'a aucune proprit

formelle (c'est--dire, assurer k est une variable purement formelle),taper : syms k unreal C'est variet de commande "syms"pour ffacer k de la zone de travail de Maple. On peut galement dclarer une squence des variables symboliques w, y, x, z, comme variables relles, en utilisant : syms w y x z real Dans ce cas-ci, toutes les variables entre les mots "syms" et les mots relle "real" sont assignes de la proprit relle. C'est--dire, elles sont des variables relles dans la zone de travail de Maple. Symbolique pour la sommation (Symbolic Summation): ================================================== On peut calculer des additions symboliques, quand elles existent, en employant la commande de "symsum".Par exemple, les p-sries : 1+1/2^2+1/3^2+...+1/n^2, Cette somme a pour valeur pi^2/6 et la srie :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 indiques par les commandes: syms x k s1 = symsum(1/k^2,1,inf) s2 = symsum(x^k,k,0,inf) La rponse est : s1 = 1/6*pi^2 s2 = -1/(x-1) Series de Taylor: ================== La dclaration : syms x f = 1/(5+4*cos(x)) T = taylor(f,8)

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %**S6. % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % Retourne le rsultat :

Symbolique mathmatique

Matlab

T = 1/9+2/81*x^2+5/1458*x^4+49/131220*x^6 Cette commande gnre une srie de Taylor au voisinage de zro c.--d. de Maclaurin. Gnrer une suite de Taylor au voisinage de (a)on doit procder de la sorte: Ex : syms x g=exp(x*sin(x)) H=taylor(g,12,2) O g : Est la fonction dvelopper 12 : Les 12 premiers termes non nuls de la srie 2 : le voisinage (a) Traons ensemble, sur le mme graphe, la fonction originale et sont dveloppement 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')

Prolongement des exemples de calcul (Extended Calculus Example ): ================================================================= La fonction "f(x)=1/(5+4*cos(x))" fournit un point de dpart pour illustrer plusieurs oprations de calcul dans la bote outils. C'est galement une fonction intressante en son propre chef. Les commandes : syms x f=1/(5+5*cos(x)) stocke l'expression symbolique dfinissant la fonction 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 dterminer les axes, des abscisses et ordonnes. Ses choix peuvent tre (outres) dpasss par un argument additionnel d'entre, ou par commande "axe". Par dfaut 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 deuxime drive de la fonction f: syms x f = 1/(5+4*cos(x)) f2 = diff(f,2) Cequi donne la rponse : f2 = 32/(5+4*cos(x))^3*sin(x)^2+4/(5+4*cos(x))^2*cos(x) D'une manire quivalente, nous pouvons taper : F2 = diff(f, x, 2). La graduation des axes par dfaut dans "Eezplot" dcoupe une partie% du graphique de F2. Pour fixer les limites des axes manuellement pour voir le graphe de la fonction en entire ; c.--d. il faut invoquer les commandes :

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

Symbolique mathmatique ezplot(f2) axis([-2*pi 2*pi -5 2])

Matlab

Du graphique, il s'avre que les valeurs de f"(x) entre -4 et 1.Il s'avre que ce n'est pas vrai. Nous pouvons calculer la gamme exacte, des axes, pour f (c.--d., calculer son maximum et minimum rels).Les maximums et les minimums rels de f"(x) se produisent aux zros de f"'(x). Les commandes : f3 = diff(f2); pretty(f3) calculer f'"(x) et le montrer dans un format plus lisible. 2 sin(x) cos(x) 32 --------------- + 4 --------------3 2 (5 + 4 cos(x)) (5 + 4 cos(x)) Pour simplifier cette fonction user de la commande : f3=simple(f3); pretty(f3)

2 2 8 sin(x) + 5 cos(x) + 4 cos(x) 4 -------------------------------3 (5 + 4 cos(x)) Utilsons la fonction "solve" pour trouver les zros de f'"(x) z=solve(f3) Ce qui retourne une matrice, edite en simbolique, 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 zro de f'"(x). La commande : format; % Default format of 5 digits zr = double(z) convertie ces valeurs en doubles prcision; ce qui donne comme sortie: zr = 0 + 1.4106i 0 - 1.4106i 2.7419 -2.7419 Jusqu'ici, nous avons trouv trois zros rels et deux zros complexes. Cependant, le graphique de f3 prouve que nous n'avons pas encore trouv tous ses zros. La squence suivante nous permet de visualiser quelques zros : ezplot(f3) hold on; plot(zr,0*zr,'ro') plot([-2*pi,2*pi], [0,0],'g-.'); title('Zeros of f3')

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

Symbolique mathmatique

Matlab

Ceci se produit parce que le f"'(x) contient facteur sin(x), est zro multiple entier du nombre (pi).La fonction,"solve(sin(x))", cependant, rapporte seulement le zro x = 0.Nous pouvons obtenir % une liste complte des zros rels par la fonction "Zr " : zr = [0 zr(4) pi 2*pi-zr(4)] Ce qui donne : zr = 0 La commande : zr=[zr-2*pi zr zr+2*pi] nous donne toutes les racines entre -2*pi et 2*pi : -12.5664 -6.2832 -6.2832 -6.2832 ...... 12.5664 -15.3082 -9.0250 -9.0250 -9.0250 ....... 9.8245 -9.4248 -3.1416 -3.1416 -3.1416 ....... 15.7080 -3.5413 2.7419 2.7419 2.7419 ...... 21.5914 -2.7419 3.1416 9.0250

Maintenant traons la transform Zr sur notre graphique pour une image complte des zros de f3: plot(zr,0*zr,'kX') Le premier zro trouv aprs rsolvent est x = 0.Nous substituons 0 la variable symbolique x dans la f2 ; par la 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 dmontrons en retraant 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 minimum') indique que les minimum globaux se produisent prs de x = - pi et x = +pi. Nous pouvons dmontrer qu'ils se produisent exactement x = -+pi, en utilisant les commandes suivantes. D'abord nous essayons de substituer (-pi) et (pi) dans la f'"(x): simple([subs(f3,x,-sym(pi)),subs(f3,x,sym(pi))]) le rsultat est : ans = [-4, -4] prouve que - pi et + pi s'avrent justement tre les points critiques de f'"(x).Nous pouvons voir que - pi et + pi sont des minimum globaux en traant 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')

10

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

Symbolique mathmatique

Matlab

Les nouveaux minima sont "m1" et "m2" m1 = -4.8986e-016 m2 4.8986e-016 L'analyse antrieure confirme qu'une partie de notre conjecture originale que les valeurs de f"(x) est dans la plage [- 4,1].Nous pouvons confirmer l'autre partie en examinant le quatrime zro de f'"(x); trouv par "solve".D'abord extrayons le quatrime zro partir de z et en l'assignant comme une variable spare : s=z(4) on obtient: s = -atan(1/8*(-114+30*17^(1/2))^(1/2)/(5/8-3/8*17^(1/2)))-pi Excutons : sd = double(s) sd = -2.7419

Traons 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 consquent, notre conjecture, laisse voir, que le maximum du f"(x) est dans [- 4,1 ] , mais ce qui est incorrecte.L' intervalle relle est [- 4,1.0051]. Maintenant, intgrons f"(x) deux fois par rapport x ; en essayant de recouvrir notre fonction 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 diffrence 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))/sin(x))+... +8*atan(1/3*(-1+cos(x))/sin(x))*cos(x))/(5+4*cos(x)) Ceci illustre le concept que diffrencier "f(x)" deux fois, alors qu'on l'intgrant deux fois, produit une fonction qui peut diffrer de "f(x)" par une fonction linaire de x.En conclusion, intgrons f(x) une fois de

11

ALIA. Med

Symbolique mathmatique

Matlab

% plus. % % F = int(f) % % Il en rsulte % % F = % 2/3*atan(1/3*tan(1/2*x)) % % Le rsultat implique la fonction d'arctangente. Bien que F(x) soit % l'antiderivative d'une fonction continue, elle est elle-mme 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 singulire aux point x= -+ pi. % montre, la valeur numrique des atan(tan(x))par morceaux constants a des % sauts (multiples impairs de pi/2) voir la commande : % % syms x % ezplot(atan(tan(x))) % % Pour obtenir une reprsentation de F(x) qui n'a pas des sauts en ces points, % nous devons introduire une deuxime fonction, qui compense les % discontinuits. Alors nous ajoutons les multiples appropris 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 rsultat : % % F1 = % 2/3*atan(1/3*tan(1/2*x))+2/3*pi*round(1/2*x/pi) % % traons maitenant F1 % % ezplot(F1,[-6.28,6.28]) % % Onvoit que le graphe de F1 ne prsente aucune discontinuit % Noter que nous employons le domaine [ - 6.28, 6.28 ] dans la "ezplot" alos % que son domaine par est dfaut [ - 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 approprie des discontinuits (des branches asymptotique) % dans des fonctions valeurs multiples comme dans "arctan(x)" est un % problme profond et difficile dans les calculs symboliques. Bien que % MATLAB et Maple ne puissent pas faire ceci entirement automatiquement, % ils fournissent les outils pour tudier de telles questions. % %**S7. Simplifications and Substitutions : % ==================================== % % Il y a plusieurs fonctions qui simplifient des expressions symboliques et % qui sont employes pour excuter les substitutions symboliques. % % S.7.1 : Simplifications : % % % % % % % % % Ci aprs nous avons trois sortes d'expressions 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, produites par "pretty":

12

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

Symbolique mathmatique pretty(f), pretty(g), pretty(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 reprsentations diffrentes de la mme fonction mathmatique, un polynme cubique de x. Que chacune des trois formes est prfrable aux autres dans diffrentes situations. La premire forme, f, est la reprsentation la plus gnralement utilise comme reprsentation polynmiale. C'est une simplement combinaison linaire des puissances de x. la deuxime forme, g, est la forme factorise. Elle montre les racines du polynme et est la plus prcise pour l'valuation numrique des racines. Mais, si un polynme n'a pas de telles racines simples, sa forme factorise peut ne pas tre si commode. La troisime forme, h, est la reprsentation de Horner, ou la reprsentation imbriques. Pour l'valuation numrique, elles comporte les quelques oprations arithmtiques elle est la plus prcise pour une gamme de valeurs de x. Le problme de la simplification symbolique comporte la vrification que ces trois expressions reprsentent la mme fonction. Elle implique galement un objectif moins clairement dfini : :: laquelle de ces reprsentations est "la plus simple" ? Cette bote outils fournit plusieurs fonctions qui appliquent diverses identits algbriques et trigonomtriques pour transformer une reprsentation d'une fonction en des autres, formes plus simples reprsenter. Ces fonctions sont "collect"(rassemblent), "expand"(augmenter), "horner"(horner),"factor" (facteur), "simplify"(simplifier),et "simple"(simplifier)

Matlab

S.7.1.1 La dclaration "Collect" : La dclaration collect(f) La dclaration "collect(f)" considre f comme un polynme par sa variable symbolique, x, et rassemble tous les coefficients de la mme puissance de l'argument de x. En deuxime lieu elle indiquer la variable dans laquelle rassemble les termes .Voici quelques exemples. | f | simplify(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*besselj(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 mathmatique peu orthodoxe pour trouver une simplification d'une expression qui a nombre quelque de caractres. Naturellement, il y a peu de justification mathmatique pour rclamer qu'une expression est "plus simple" que d'autres juste parce que sa reprsentation d'ASCII est plus court, mais ceci prouve qu'elle est souvent satisfaisante dans la pratique. Les faons dont la fonction "simple" ralise sont but en s'appliquant indpendamment les fonctions "simplify", "collect", "factor", et d'autres fonctions de simplification une expression et maintenir les longueurs des

13

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

Symbolique mathmatique rsultats. La fonction "simple" renvoie alors le rsultat le plus court. La fonction simple a plusieurs formes, chaque diffrent renvoie un rsultat diffrent. La forme "simple(f)" montre chaque essai de simplification et la fonction qui est produite dans la fentre de commande de MATLAB. La fonction simple renvoie alors le rsultat le plus court. Par exemple, la commande : simple(cos(x)^2 + sin(x)^2)

Matlab

montre les simplifications alternatives suivantes de la fentre 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 vux vrifier, par exemple, si la forme la plus courte est en effet la plus simple. Si on n'est pas intress par la faon dont simple ralise son rsultat, employer la forme : f = simple(f) Cette forme renvoie simplement l'expression la plus courte trouve. Par exemple : f= simple(cos(x)^2+sin(x)) retourne : f= 1 Si on veut savoir quelle simplification a produit le rsultat le plus court, employer la forme multi-sorties: [f, how] = simple(cos(x)^2+sin(x)^2) Renvoie le rsultat : f = 1 how = combine La fonction "simple" s'amliore parfois sur le rsultat produit par "simplify", parmi des simplifications qu'elle essaye. Par exemple, une fois appliqu aux exemples donns pour "simplify", simples retourne un rsultat plus simple (ou au moins plus court) dans deux cas:

14

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

Symbolique mathmatique | f | simplify(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)+log(y) | log(x*y) | log(x*y) | | ------------------------------------------------------------------------Dans certains cas, il est avantageux d'appliquer "simple" deux fois pour obtenir l'effet de deux fonctions diffrentes de simplification. Par exemple les dclarations : f = (1/a^3+6/a^2+12/a+8)^(1/3); simple(simple(f)) Retourne : 2+1/a La premiers application, "simple(f)", emploie le "radsimp" pour produire (2*a+1)/a ;la deuxime application emploie le "combine(trig)" pour transformer celle ci en 1/a+2.La fonction "simple" est particulirement efficace sur des expressions impliquant des fonctions trigonomtriques. 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 |--------------------------|------------------

Matlab

S7.2 : Substitutions : Il y a deux fonctions pour la substitution symbolique :"subexpr" et "subs". S7.2.1 subexpr : Ses commande sont : syms a x s=solve(x^3+a*x+1) rsoudre l'quation x^3+a*x+1=0 par rapport x. Employer la fonction "pretty" pour montrer s sous une forme plus lisible: pretty(s) La commande "pretty" hrite de la notation de %n (n, un nombre entier) du Maple pour dnoter les subexpressions qui se produisent des priodes multiples dans l'objet symbolique. La fonction "subexpr" nous permet de sauver ces subexpressions communes aussi bien que l'objet symbolique rcrit en termes de subexpressions. Les subexpressions sont sauves dans un vecteur colonne appel "sigma".Continuer l'exemple 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)]

15

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

Symbolique mathmatique [-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" cre la variable "sigma" dans la zone de travail de MATLAB. On peut vrifier ceci en tapant la commande "whos", ou par la commande "sigma": sigma Retourne : sigma = -108+12*(12*a^3+81)^(1/2)

Matlab

S7.2.2

subs :

Trouvons les valeurs propres et les vecteurs 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), [ -(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, E = [ (b^2-b*a-c*bc*a+a^2+c^2)^(1/2), [ 0, [ 0,

1] 1] 1]

0, -(b^2-b*a-c*bc*a+a^2+c^2)^(1/2), 0,

0] 0] b+c+a]

Supposer que nous voulons remplacer l'expression plutt 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), [ -(b-c-S)/(a-c), -(b-c+S)/(a-c), [ 1, 1, Ensuite, substituons le symbole S dans E avec "subs": E = subs(E,S,'S') Retourne : E = [ [ [ S, 0, 0, 0, 0] -S, 0] 0, b+c+a]

1] 1] 1]

Supposer maintenant que nous voulons valuer 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.

16

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

Symbolique mathmatique [ -(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'expression symbolique reprsente par S est inchange par cette substitution. C'est--dire, le symbole (a) dans S n'est pas remplac par 10.La commande "subs" est galement une fonction utile pour substituer une varit de valeurs variables dans des expressions particulires.(jeter un regard S).Suppose qu'en plus de la substitution a = 10, nous veulent galement substituer les valeurs 2 et 10 b et c respectivement. La manire de faire ceci est de placer des valeurs pour a, b, et c dans la zone de travail. Alors les "subs" valuent son entre en utilisant les variables symboliques existantes dans la zone de travail courant. Dans notre exemple, nous avons plac en premire : a = 10; b = 2; c = 10; subs(S) Ce qui retourne : ans = 8 Pour regarder le contenu de notre zone de travail, taper "whos", qui donne: Name A E S a ans b c v Size 3x3 3x3 1x1 1x1 1x1 1x1 1x1 3x3 Bytes 878 888 186 8 140 8 8 982 Class sym object sym object sym object double array sym object double array double array sym object

Matlab

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, employer ce procd: syms a b c subs(S,{a,b,c},{10,2,10}) Cequi retourne : ans = 8 En tapant "whos" on rvelle que a, b, et c restent des objets de "sym" 1-par-1.La commande "subs" peut tre combine avec la commande "double" pour valuer une expression symbolique numriquement. 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 diffrent graphiquement. Une des approches est de taper : ezplot(M); hold on; ezplot(P) maisce graphe ne nous aide pas aisment identifier les courbes ( tracer le pour avoir une id). Au lieu de cela, combinons "subs", "double", 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-.')

17

ALIA. Med

Symbolique mathmatique

Matlab

% title(' ') % legend('M','P') % xlabel('t'); grid % % pour produire un graphique multicolore qui indique la diffrence % entre M et P. % Enfin l'utilisation des subs avec des enchainements facilite % considrablement la solution des problmes impliquant les transformes % de Fourier, de Laplace, ou la transforme-z. % %**S8. Prcision arithmtique des variables (Variable-Precision Arithmetic): % ===================================================================== % Vue d'ensemble (Overview): % Il y a trois genres diffrents d'oprations arithmtiques dans cette % bote outils. % % Numeric MATLAB's floating-point arithmetic % Rational Maple's exact symbolic arithmetic % VPA Maple's variable-precision arithmetic % % Par exemple, les dclarations de MATLAB : % % format long % 1/2+1/3 % % produit, dans le cas de l'utilisation d'un calcul numrique : % % 0.83333333333333 % % Si on utilise la forme symbolique : % % sym(1/2)+1/3 % % le rsultat est : % % 5/6 % % Et, aussi avec la bote outils, les rapports: % % digits(25) % vpa('1/2+1/3') % % Et, aussi avec la bote outils, les commandes de la % {variable-precision arithmetique} pour obtenir : % % 0.8333333333333333333333333 % % % S.8.1 Exemple : Employer les diffrents genres d'criture arithmtique % % S.8.1.1 Arithmtique Rationnelle : % % Par dfaut, la bote outils des symboliques maths emploie des % oprations arithmtiques raisonnables, c.--d., l'arithmtique symbolique % exacte du Maple. L'arithmtique rationnelle est appele quand on cre des % variables symboliques en utilisant la fonction 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 dcouvrir que les lments sont les

18

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

Symbolique mathmatique rapports de petits nombres entiers, ainsi la reprsentation symbolique est forme de ces nombres entiers. D'autre part, la dclaration suivante : format long E = [exp(1) sqrt(2); log(3) rand] retourne : E = 2.71828182845905 1.09861228866811

Matlab

1.41421356237310 0.23113851357429

dans ce cas les lments ne sont pas les rapports de petits nombres entiers, ainsi le sym(E) reproduit la reprsentation 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 prcision des nombres Variable sont distingus de la reprsentation rationnelle exacte par la prsence d'une virgule dcimale. Qui permet une puissance de facteur 10, note par 'e '.Pour employer la variable-prcision au lieu de l'arithmtique rationnelle, crez vos variables en utilisant la fonction d'"vpa". Pour des matrices avec les entres purement doubles, la fonction "vp"a produit de la reprsentation qui est employe avec "l'arithmtique de variable-prcision". Continuant notre exemple, et en utilisant digits(4), en appliquant la "vpa" la matrice S : vpa(S) gnre 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 rsultat : F = [2.718281828459045534884808, 1.414213562373094923430017] [1.098612288668110004152823, .2189591863280899719512718] S.8.1.3 Conversion du point flotant(Converting to Floating-Point): double(sym(E)) ans = 2.71828182845905 1.09861228866811 double(vpa(E)) ans = 2.71828182845905 1.09861228866811

1.41421356237310 0.23113851357429

1.41421356237310 0.23113851357429

S.8.1.4 D'autres exemples (Another Example): Le prochain exemple est peut-tre plus intressant. Commenons par l'expression symbolique : f = sym('exp(pi*sqrt(163))');

19

ALIA. Med

Symbolique mathmatique

Matlab

% La dclaration : % % double(f) % % produit le rsultat point flottant : % % ans = % 2.625374126407687e+017 % % Utilisation du deuxime argument du "vpa" pour indiquer le nombre de % chiffres: % % vpa(f,18) % % 262537412640768744. % % vpa(f,25) % % 262537412640768744.0000000 % % Nous suspectons que f pourrait rellement avoir une valeur de nombre entier. % Ce soupon est renforc par la valeur de 30 chiffres, la "vpa(f,30)" % % 262537412640768743.999999999999 % % prouve que f est trs prs , mais pas exactement gale , un nombre entier. % %**S.8 Algebre lineaire : % ================== % S.8.1 Opration de base pour l'algbre linaire : % % Les oprations algbriques de base sur les objets symboliques sont % identiques que les oprations sur des objets de MATLAB de classe "doublent". % Ceci est illustr dans l'exemple suivant. La transformation "Givens" produit % une rotation plan par l'angle t. % Les dclaration : % % syms t; % G = [cos(t) sin(t); -sin(t) cos(t)] % % cre la matrice de transformation :G % % G = % [ cos(t), sin(t) ] % [ -sin(t), cos(t) ] % % L'application de la transformation "Givens" deux fois devrait simplement % tre une double rotation .La matrice correspondante peut tre calcule % en multipliant G par elle-mme ou en soulevant G la deuxime 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 trigonomtrique pour renvoyer la forme prvue en % essayant plusieurs diffrentes identits et en slectionnant celui qui % produit la reprsentation la plus courte. % % A = % [ cos(2*t), sin(2*t)] % [-sin(2*t), cos(2*t)]

20

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

Symbolique mathmatique

Matlab

La rotation de Givens est une matrice orthogonale, 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 Oprations de l'algbre Linaires : Faisons plusieurs oprations algbriques linaires de base. La commande : H = hilb(3) gnre une matrice de Hilbert de 3-par-3, le "format short" de MATLAB donne: H = 1.0000 0.5000 0.3333

0.5000 0.3333 0.2500

0.3333 0.2500 0.2000

Les lments calculs de H sont des nombres point mobile qui sont les rapports de petits nombres entiers. En effet, H est un choix de MATLAB de classe "double" de .Convertissant H une matrice symbolique, H = sym(H) donne le rsultat : H = [ 1, 1/2, 1/3] [ 1/2, 1/3, 1/4] [ 1/3, 1/4, 1/5] Les lments calculs de H sont des nombres point mobile qui sont les rapports de petits nombres entiers. En effet, H est un choix de MATLAB de double de classe. Convertissant H une matrice symbolique. Par consquent : inv(H) Produit inv(H) ans = [ [ [ et det(H) produit 1/2160 Nous pouvons employer l'oprateur d'antislash pour rsoudre un systme des quations linaires simultanment.

9, -36, 30] -36, 192, -180] 30, -180, 180]

21

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % Les commandes : b = [1 1 1]' x = H\b

Symbolique mathmatique

Matlab

rsolve le systme Hx = b ;ce qui produit la solution [ 3] [-24] [ 30] Chacun de ces trois rsultats, de l'inverse, du dterminante, et de la solution du systme linaire, sont des rsultats exacts infiniment prcis, rationnels, de la matrice de Hilbert. D'autre part, en utilisant "digits(16)", la commande, V=vpa(hilb(3)) retourne les rsultats [ 1., .5000000000000000, .3333333333333333] [.5000000000000000, .3333333333333333, .2500000000000000] [.3333333333333333, .2500000000000000, .2000000000000000] Les virgules dcimales dans la reprsentation des diffrents lments sont l'indication de l'emploi de la "variable-prcision-arithmtique". Le rsultat de chaque opration arithmtique est arrondi 16 chiffres dcimaux significatifs. En inversant la matrice, ces erreurs sont amplifies par le nombre d'tat de matrice, qui pour hilb(3) est environ de 500.En consquence, "inv(h)" retourne. [ 9.000000000000082, -36.00000000000039, 30.00000000000035] [-36.00000000000039, 192.0000000000021, -180.0000000000019] [ 30.00000000000035, -180.0000000000019, 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 nul 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 intressant, essayons de trouver une valeur s pour H(1,1) qui la rend singulire Les commandes : syms s H(1,1) = s Z = det(H) sol = solve(Z) produit H =

22

ALIA. Med

Symbolique mathmatique

Matlab

% [ 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 aprs : % % H = subs(H,s,sol) % % substitue la valeur calcule "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 singulire. Pour ces matrices, 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 prciser que quoique H soit singulier. % Pour toute valeur entire du nombre d , posons : % % digits(d) % % et calculer % % det(vpa(H)) % inv(vpa(H)) % % il en rsulte dterminante de la taille 10^(-d) et d'un inverse avec % des lments de l'ordre de 10^d. % %**S.9. Valeurs propres (Eigenvalues): % ============================== % The symbolic eigenvalues of a square matrix A or the symbolic eigenvalues % and eigenvectors of A are computed, respectively, using the commands % % E = eig(A) <--- Valeurs propres de A % [V,E] = eig(A) <--- Vecteurs propres de A

23

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

Symbolique mathmatique

Matlab

En revanche les commandes de la {variable-prcision} sont : E = eig(vpa(A)) [V,E] = eig(vpa(A)) Les valeurs propres de A sont les zros du polynme caractristique de A, savoir le det(A-x*I), qui est calcul par poly(A) La matrice H de la prcdente section fournit 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 singulire, ainsi une de ses valeurs propres doit tre zro. La dclaration, [T,E]=eig(H) produit les matrices T et E. Les colonnes de T sont les vecteurs propres de H T = [ 1, 28/153+2/153*12589^(1/2), 28/153-2/153*12589^(12)] [ -4, 1, 1] [ 10/3, 92/255-1/255*12589^(1/2), 292/255+1/255*12589^(12)] D'une manire semblable les lments 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 la structure des matrices des vecteurs propres, T, et les valeurs propres, E, si nous convertissons T et E en notation dcimale. Nous oprons comme suit. Les commandes Td = double(T) Ed = double(E) retourne Td = 1.0000 1.6497 -1.2837 -4.0000 1.0000 1.0000 3.3333 0.7051 1.5851 Ed = 0 0 0 0 1.3344 0 0 0 0.0878 La premire valeur propre est zro. Le vecteur propre correspondant (la premire colonne de Td) est identique la base pour l'espace nul trouv dans la prcdente section. Les deux autres valeurs propres sont le rsultat de l'application de la formule quadratique : x^2-64/45*x+253/2160.Par la commande quadratique facteur "factor(poly(H))": syms x g= simple(factor(poly(H)/x); solve(g) Les expressions symboliques de forme compacte pour les valeurs propres sont possibles seulement quand le polynme caractristique peut tre exprim

24

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

Symbolique mathmatique comme produit de polynmes rationnels du degr quatre ou moins. La matrice de Rosser est une matrice classique d'essai d'analyse numrique qui s'avre justement illustrer cette condition. La dclaration : 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-1082852512000000000*x^2+... 4287904631000000*x^3-5327676250000*x^4+82518000*x^5+... 5080000*x^6-4040*x^7+x^8

Matlab

pretty(factor(p))

x (x - 1020) (x

2 2 2 - 1020 x + 100) (x - 1040500) (x - 1000)

Les facteurs du polynme caractristique (de degr 8) comporte deux termes linaires et trois termes quadratiques. Nous pouvons voir immdiatement que quatre des valeurs propres sont 0, 1020, et une racine double 1000.Les quatre autres racines sont obtenues partir des quations quadratiques restantes. utiliser la commande "eig(R)" pour trouver 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 exemple typique ; elle est rare pour quune matrice pleine de 8-par-8 ait un polynme caractristique dans une telle forme simple (produit de facteurs). Si nous changeons les deux "des lments de coin" de R de 29 30 avec 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)

25

ALIA. Med % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

Symbolique mathmatique

Matlab

nous trouve P = -1485834000000000+78837561384000000*x-... 1082776083645550000*x^2+4287868039970000*x^3-... 5327752172400*x^4+82610380*x^5+5079971*x^6-4040*x^7+x^ Nous constatons galement que la "factor(p)" est p lui-mme. C'est--dire, le polynme caractristique ne peut pas tre factoris sous forme des nombres rationnels. Pour cette matrice modifie de Rosser: F = eig(S) retourne F = [ -1020.0532142558915165931894252600] [ -.17053529728768998575200874607757] [ .21803980548301606860857564424981] [ 999.94691786044276755320289228602] [ 1000.1206982933841335712817075454] [ 1019.5243552632016358324933278291] [ 1019.9935501291629257348091808173] [ 1020.4201882015047278185457498840] Noter que ces valeurs sont prs des valeurs propres de la matrice originale de Rosser. De plus, les valeurs numriques de F sont un rsultat de l'arithmtique point mobile de Maple. En consquence, les diffrents arrangements de "digits" ne changent pas le nombre de chiffres la droite de la position dcimale. Il est galement possible d'essayer de calculer des valeurs propres des matrices symboliques, mais les solutions compactes de forme sont rares. La transformation "Givens" est produite comme matrice exponentielle de la matrice lmentaire.(Exemple : Givens(2,2)) A= |0 1| |-1 0| Les commandes la symbolique Mathmatique nous permettent syms t A=sym([0 1;-1 0]); G=expm(t*A) donne G = [ cos(t), [ -sin(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)]

sin(t)] cos(t)]

26

ALIA. Med

Symbolique mathmatique

Matlab

% 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 premire application des utilits "simple" pour simplifier pour % produire une somme de sinus et de cosinus. Aprs, simple appelle la "radsimp" % pour produire le cos(t) +i*sin(t) pour le premier vecteur propre. La % troisime application de "simple" utilise convert(exp) pour changer les % sinus et les cosinus en exponentiels complexes. La dernire application % de "simple" utilise "simplify" pour obtenir la forme finale. % %*-*-*-*-*-*-*-* POUR LA SIUTE VOIR CHAPITRE USING THE SYMBOLIC MATH TOOLBOX %%%%% JORDAN CANONICAL FORM

27