# Calcul formel et Mathématiques avec `Xcas` ### Renée De Graeve Maître de Conférence à Grenoble I

Remerciements

Je remercie:

- Bernard Parisse pour ses précieux conseils et ses remarques sur ce texte,

© 2002, 2006 Renée De Graeve, `renee.degraeve@wanadoo.fr`
La copie, la traduction et la redistribution de ce document sur support électronique ou papier sont autorisés pour un usage non commercial uniquement. L’utilisation de ce document à des fins commerciales est interdite sans l’accord écrit du détenteur du copyright. Cette documentation est fournie en l’état, sans garantie d’aucune sorte. En aucun cas le détenteur du copyright ne pourra être tenu pour responsable de dommages résultant de l’utilisation de ce document.

Ce document est disponible à l’adresse Internet suivante :
`http://www-fourier.ujf-grenoble.fr/~parisse/cascmd_fr.pdf`

Préface

Bernard Parisse
Maître de Conférences à l’Université de Grenoble I
Développeur du logiciel de calcul formel `giac` et de son interface `Xcas`. La version à jour se récupère sur ;
`http://www-fourier.ujf-grenoble.fr/``~``parisse/giac.html`

# Table des matières

# Index

invztrans, 6.63.2 , 6.16.2, 6.18.4 , 6.16.2, 6.18.5 ∥, 6.2.3 Note_index1, 0.1.1 ’, 6.14.5, 6.19.4 ’*’, 6.18.1 ’*’, 6.24.26 ’+’, 6.16.1, 6.18.1 ’+’, 6.24.26 ’-’, 6.18.1 ’/’, 6.18.1 (), 6.14.22, 6.39.1 *, 6.18.1, 6.34.4, 6.42.7, 6.47.3 *=, 2.5.4 +, 6.5.12, 6.5.13, 6.16.1, 6.18.1, 6.34.2, 6.39.7, 6.42.3, 6.47.2 +,-,*,/,^, 6.10.2, 6.12.1 +infinity, 6.1 ,, 6.39.2 -, 6.16.1, 6.18.1, 6.34.3, 6.42.4, 6.47.2 -=, 2.5.4 ->, 6.16.2, 6.17.1 -inf, 6.1 -infinity, 6.1 .*, 6.42.5, 6.47.9 .+, 6.42.3, 6.47.2 .-, 6.42.4, 6.47.2 .., 6.37.1, 6.39.4 ./, 6.42.6, 6.47.10 .^, 6.47.11 /, 6.16.1, 6.18.1, 6.34.8, 6.34.11, 6.52.2 //, 9.4.1 /=, 2.5.4 :+=, 2.5.4 :;, 2.5.13 :=, 2.5.2, 6.16.2, 6.17.1, 9.4.12, 9.4.14 <, 6.2.2 <=, 6.2.2 =<, 2.5.3, 6.16.2, 6.46.5, 9.4.12, 9.4.14, 9.4.15 ==, 6.2.2 =>, 2.5.2, 5.1.3, 6.16.2, 6.24.26, 9.4.12, 9.4.14 =>+, 6.31.9 >, 6.2.2 >=, 6.2.2 ?, 1.8.2, 2.5.2 [[]], 6.5.1, 6.39.3, 6.41.3 [], 6.5.1, 6.37.2, 6.38.6, 6.39.3, 6.39.4, 6.39.6, 6.41, 6.41.3, 6.41.14 #, 9.5.4 $, 6.16.2, 6.19.4, 6.39.5 %, 6.7.12, 6.16.2, 6.34 % , 6.35 % 0, 6.7.12 % {% }, 6.40.1 %%%{%%%}, 6.27.2 %e, 6.1 %i, 6.1 %pi, 6.1 &*, 6.47.3 &&, 6.2.3 &^, 6.47.7 ^, 6.16.1, 6.34.9, 6.47.7 _, 5.1.1, 5.2.1 {}, 9.3 |, 6.14.20 !, 6.2.3, 6.8.1 !=, 6.2.2 ", 6.5.1 "\n", 6.5.2 `:=,` `6.46.5``` Airy_Ai, 6.10.19 Airy_Bi, 6.10.19 a2q, 6.58.2 abcuv, 6.28.12 about, 2.5.9, 6.25.1 abs, 6.12.5, 6.18.2, 10.16.16 abscissa, 10.15.2, 11.12.1 abscisse, 10.15.2, 11.12.1 accumulate_head_tail, 8.1.11 acos, 6.18.2, 6.24.1 acos2asin, 6.24.7 acos2atan, 6.24.8 acosh, 6.18.2 acot, 6.24.1 acsc, 6.24.1 add, 6.41.31 additionally, 2.5.8 additionally, 2.5.7, 2.5.8 adjoint_matrix, 6.55.10 affichage, 10.3, 10.3.5, 10.16.1 affichage, 10.3.3, 10.3.5, 10.3.5 afficher, 9.4.8 affix, 10.15.1 affixe, 10.15.1 aire, 3.11.1, 10.16.8 aire_graphe, 3.12, 10.16.7 aireen, 10.16.1, 10.16.9 aireenbrut, 10.16.1, 10.16.9 alea, 6.8.4, 8.3, 8.3.2, 8.3.2, 8.3.3 algsubs, 6.14.24 algvar, 6.64.4 alog10, 6.18.2 alors, 9.4.18 altitude, 10.9.10 and, 6.2.3 angle, 10.16.5, 11.12.9 angle_radian, 1.7.6 angleat, 10.16.6 angleatraw, 10.16.6 angleen, 10.16.6 angleenbrut, 10.16.6 animate, 3.24.1 animate3d, 3.24.2 animation, 3.24.3 ans, 2.5.12 append, 6.41.18 apply, 6.41.34 approx, 4.2 approx_mode, 1.7.7 arc, 10.13.2 arccos, 6.18.2, 6.24.1 arccosh, 6.18.2 archive, 2.5.5 arcLen, 6.20.7 arcsin, 6.18.2, 6.24.1 arcsinh, 6.18.2 arctan, 6.18.2, 6.24.1 arctanh, 6.18.2 area, 3.11.1, 10.16.8 areaat, 10.16.9 areaatraw, 10.16.9 areaplot, 3.12, 10.16.7 aretes, 11.16.8 arg, 6.12.6, 10.16.17 args, 9.6.1 array, 6.51 array, 6.44 as_function_of, 6.18.6 asc, 6.5.8 asec, 6.24.1 asin, 6.18.2, 6.24.1 asin2acos, 6.24.9 asin2atan, 6.24.10 asinh, 6.18.2 assign, 9.4.17 assume, 2.5.7, 6.25.1, 10.7 at, 6.41.3, 6.48.1 atan, 6.18.2, 6.24.1 atan2acos, 6.24.12 atan2asin, 6.24.11 atanh, 6.18.2 atrig2ln, 6.24.21 augment, 6.41.17, 6.49.14 autosimplify, 6.14.18 axe_radical, 10.13.8 axes, 10.3.3 Beta, 6.10.16 Binary, 6.16.3 BlockDiagonal, 6.45.4 bareiss, 6.52.4 barycenter, 6.12.10, 10.8.10, 11.4.7 barycentre, 6.12.10, 10.8.10, 11.4.7 base, 6.6.1, 6.24.26 basis, 6.52.9 batons, 8.2.5 begin, 9.1.2, 9.3 bernoulli, 6.9.9, 6.9.10 betad, 8.4.30 betad_cdf, 8.4.31 betad_icdf, 8.4.32 bezier, 3.17 bezout_entier, 6.7.23 binomial, 6.8.2, 8.4.1 binomial, 6.41.39, 6.45.3 binomial_cdf, 8.4.2 binomial_icdf, 8.4.3 birapport, 10.19.2 bisection_solver, 4.5.1 bisector, 10.9.12 bissectrice, 10.9.12 bitand, 6.4.1 bitor, 6.4.1 bitxor, 6.4.1 `black`, 10.3.5 `blanc`, 10.3.5 `bleu`, 10.3.5 blockmatrix, 6.49.12 `blue`, 10.3.5 border, 6.49.15 bounded_function, 6.22.1 boxwhisker, 6.43, 6.50.5, 8.1.12 break, 9.6.2 breakpoint, 9.7.4 brent_solver, 4.5.2 Capture ecran, 1.4.1 Celsius2Fahrenheit, 5.1.5 Ci, 6.10.7 Circle, 10.13.3 ClrDraw, 2.4.2 ClrGraph, 1.10.4, 2.4.2, 9.1.3, 9.6.5 ClrIO, 9.4.9 COND, 6.54.5 CopyVar, 2.5.6 CST, 2.5.1 c1oc2, 6.11.13 c1op2, 6.11.11 camembert, 8.1.17 canonical_form, 6.14.8 `cap_flat_line`, 10.3.5 `cap_round_line`, 10.3.5 `cap_square_line`, 10.3.5 carre, 10.11.2, 11.8.1 cas_setup, 1.6.1, 1.7.3 case, 9.4.20 cat, 6.5.11, 6.5.13 catch, 9.7.12 cauchy, 8.4.36 cauchy_cdf, 8.4.37, 8.4.37 cauchy_icdf, 8.4.38 cauchyd, 8.4.36 cauchyd_icdf, 8.4.38 cdf, 8.4.54 ceil, 6.18.2 ceiling, 6.18.2 center, 10.8.11 center2interval, 6.37.4 centered_cube, 11.17.2 centered_tetrahedron, 11.17.1 centre, 10.8.11 cercle, 10.13.1, 11.10 cercle_osculateur, 7.5.3 cFactor, 6.14.12 cfactor, 6.14.12 cfsolve, 4.7 changebase, 6.52.8 char, 6.5.9 charpoly, 6.55.7 chinrem, 6.28.13 chisquare, 8.4.19 chisquare_cdf, 8.4.20 chisquare_icdf, 8.4.21 chisquared, 8.4.19 chisquaret, 8.5.4 cholesky, 6.57.1 chrem, 6.7.27 circle, 10.13.1, 11.10 circonscrit, 10.13.5 circumcircle, 10.13.5 classes, 8.1.10 coeff, 6.27.8 coeffs, 6.27.8 col, 6.48.2 col, 6.41.27, 6.41.28, 6.41.29, 6.41.30, 6.50.1, 6.50.2, 6.50.3, 6.50.4 colDim, 6.50.8 coldim, 6.50.8 collect, 6.27.17 colNorm, 6.54.3 colnorm, 6.54.3 color, 10.3, 10.3.5 color, 4.5.2, 10.3.3, 10.3.5, 10.3.5 colSwap, 6.49.11 colspace, 6.52.14 colswap, 6.49.11 comb, 6.8.2 combine, 6.23.2 comDenom, 6.31.7 comment, 2.1, 9.4.1 common_perpendicular, 11.5.9 companion, 6.55.11 compare, 9.4.7 complex_mode, 1.7.8 complex_variables, 1.7.9 complexroot, 6.32.1 concat, 6.41.17, 6.49.14 cond, 6.54.5 cone, 11.15.1 confrac, 6.9.7, 6.24.26 conic, 6.58.6 conique, 6.58.6 conique_reduite, 6.58.7 conj, 6.12.8 conj_harmonique, 10.19.4 conjugate_gradient, 6.58.4 conserver_pivot, 6.61.3 cont, 9.7.6 contains, 6.38.10, 6.41.26 content, 6.27.15 continue, 9.6.3 contourplot, 3.13 convert, 5.1.3, 6.6.1, 6.6.2, 6.24.26, 6.27.7, 6.27.27, 6.27.28, 6.27.29, 6.38.11, 6.44, 6.51 convertir, 5.1.3, 6.6.1, 6.6.2, 6.24.26, 6.27.27, 6.27.28, 6.27.29 convexhull, 10.12.5 coordinates, 10.15.4, 11.12.4 coordonnees, 10.15.4, 11.12.4 coordonnees_polaires, 10.15.6 coordonnees_rectangulaires, 10.15.5 copy, 9.4.13, 9.4.15 correlation, 8.2.2 correlation, 8.2.11, 8.2.13, 8.2.15, 8.2.19, 8.2.21 cos, 6.24.1 cos, 6.23.2, 6.24.26 cos2sintan, 6.24.16 cosh, 6.18.2 cot, 6.24.1 cote, 11.12.3 couleur, 10.3, 10.3.5 couleur, 10.3.3, 10.3.5, 10.3.5 count, 6.41.27, 6.50.1 count_eq, 6.41.28, 6.50.2 count_inf, 6.41.29, 6.50.3 count_sup, 6.41.30, 6.50.4 courbe_parametrique, 3.16, 3.16.2 courbe_polaire, 3.18 courbure, 7.5, 7.5.2 covariance, 8.2.1 covariance_correlation, 8.2.3 cpartfrac, 6.31.10 crationalroot, 6.32.8 cross, 6.42.8 `cross_point`, 10.3.5 cross_ratio, 10.19.2 crossP, 6.42.8 crossproduct, 6.42.8 cSolve, 6.60.7 csc, 6.24.1 csolve, 6.60.7 cube, 11.16.1 cube_centre, 11.17.2 cumSum, 6.5.6, 6.41.32, 6.47.5 cumulated_frequencies, 8.1.15 curl, 6.59.5 curvature, 7.5, 7.5.2 curvecurve, 4.3.5 `cyan`, 10.3.5 cycle2perm, 6.11.6 cycleinv, 6.11.16 cycles2permu, 6.11.5 cyclotomic, 6.28.14 cylinder, 11.15.3 cylindre, 11.15.3 cZzeros, 6.14.14 Delete, 6.16.3 DelFold, 2.6.6 DelVar, 2.5.10 Det, 6.35.5 DIGITS, 1.7.4, 4.2, 6.10.1 Digits, 1.7.4, 4.2, 6.10.1 Dirac, 6.10.10 Disp, 9.1.3, 9.4.8 DispG, 9.1.3, 9.6.4 DispHome, 9.1.3, 9.6.6 DOM_COMPLEX, 9.4.4 DOM_FLOAT, 9.4.4 DOM_FUNC, 9.4.4 DOM_IDENT, 9.4.4 DOM_INT, 9.4.4 DOM_LIST, 9.4.4 DOM_RAT, 9.4.4 DOM_STRING, 9.4.4 DOM_SYMBOLIC, 9.4.4 DrawFunc, 3.7 DrawParm, 3.16, 3.16.2 DrawPol, 3.18 DrawSlp, 3.10.6 DrwCtour, 3.13 `dash_line`, 10.3.5 `dashdot_line`, 10.3.5 `dashdotdot_line`, 10.3.5 dayofweek, 6.65 de, 9.4.21 debug, 9.2, 9.7.1 default, 9.4.20 degree, 6.27.9 delcols, 6.49.4 delrows, 6.49.4 deltalist, 6.41.40 demi_cone, 11.15.2 demi_droite, 10.9.2, 11.5.3 denom, 6.9.4, 6.31.4 densityplot, 3.14 derive, 6.19.4, 6.59.1 deriver, 6.19.4, 6.59.1 deSolve, 6.62.1 desolve, 6.62.1 det, 6.34.15, 6.52.4 det_minor, 6.52.5 developpee, 7.8 developper, 6.14.7 developper_transcendant, 6.23.1 dfc, 6.9.7 dfc2f, 6.9.8 diag, 6.45.4, 6.45.5 diagramme_batons, 8.1.16 diff, 6.19.4, 6.59.1 diff, 6.24.26 dim, 6.50.6 display, 10.3, 10.3.5 display, 10.3.3, 10.3.5 distance, 10.16.2, 11.12.7 distance2, 10.16.4, 11.12.8 distanceat, 10.16.3 distanceatraw, 10.16.3 distanceen, 10.16.3 distanceenbrut, 10.16.3 div, 6.7.10 div_harmonique, 10.19.3 divergence, 6.59.4 divide, 6.28.6 divis, 6.28.1 division_point, 10.19.1 divisors, 6.7.9 divpc, 6.36.1 dnewton_solver, 4.6.1 dodecaedre, 11.17.4 dodecahedron, 11.17.4 dot, 6.42.7 dot_paper, 10.2.6 dotP, 6.42.7 dotprod, 6.42.7 droit, 6.5.5, 6.37.2, 6.38.6, 6.41.8, 6.60.5 droite, 3.10.1, 10.9.1, 11.5.1, 11.5.2 droite_tangente, 3.10.4 dsolve, 6.62.1 Edit, 1.4.2 Ei, 6.10.5 ERROR, 9.7.13 EXPR, 9.4.6 e, 6.1 e2r, 6.27.5, 6.27.6 ecart_type, 6.43, 6.50.5, 8.1.2 ecart_type_population, 6.43, 8.1.3 egcd, 6.28.11 egv, 6.55.3 egvl, 6.55.2 eigenvals, 6.55.1 eigenvalues, 6.55.1 eigenvectors, 6.55.3 eigenvects, 6.55.3 eigVc, 6.55.3 eigVl, 6.55.2 element, 2.5.7, 10.8.14 elif, 9.4.19 eliminate, 6.14.25 ellipse, 10.14.1, 11.11.1 else, 9.4.18, 9.4.19 end, 9.1.2, 9.3, 9.4.18, 9.4.19 envelope, 10.20.2 enveloppe, 10.20.2 epaisseur, 10.3 epaisseur, 10.3.3 `epaisseur_ligne_1`, 10.3.5 `epaisseur_ligne_2`, 10.3.5 `epaisseur_ligne_8`, 10.3.5 `epaisseur_point_1`, 10.3.5 `epaisseur_point_2`, 10.3.5 `epaisseur_point_8`, 10.3.5 epsilon, 6.64.1 epsilon2zero, 6.64.1 equal, 6.60.1 equal2diff, 6.60.2 equal2list, 6.60.3 equation, 10.15.7, 11.12.5 equation, 8.2.11, 8.2.13, 8.2.15, 8.2.19, 8.2.21 equilateral_triangle, 10.10.5, 11.7.4 erase, 1.10.3, 1.10.4, 2.4.3, 10.2.1 erf, 6.10.11 erfc, 6.10.12 error, 9.7.13 est_aligne, 10.18.2, 11.13.6 est_carre, 10.18.8, 11.13.12 est_cocyclique, 10.18.3, 11.13.7 est_conjugue, 10.18.14 est_coplanaire, 11.13.2 est_cospherique, 11.13.8 est_dans, 10.18.4 est_element, 10.18.1, 11.13.1 est_equilateral, 10.18.5, 11.13.9 est_faisceau_cercle, 10.18.17 est_faisceau_droite, 10.18.16 est_harmonique, 10.18.15 est_impair, 6.7.15 est_inclus, 6.40.2 est_isocele, 10.18.6, 11.13.10 est_losange, 10.18.9, 11.13.13 est_orthogonal, 10.18.13, 11.13.5 est_pair, 6.7.14 est_parallele, 10.18.11, 11.13.3 est_parallelogramme, 10.18.10, 11.13.14 est_perpendiculaire, 10.18.12, 11.13.4 est_rectangle, 10.18.7, 11.13.11 euler, 6.7.29 euler_gamma, 6.1 eval, 6.14.2, 10.6 eval_level, 6.14.3 evala, 6.14.4 evalb, 6.3 evalc, 6.12.4 evalf, 4.2, 6.9.1, 6.10.1, 6.64.6 evalm, 6.47.1 even, 6.7.14 evolute, 7.8 exact, 6.9.1, 6.64.7 exbisector, 10.9.13 exbissectrice, 10.9.13 excircle, 10.13.6 exinscrit, 10.13.6 exp, 6.18.2 exp, 6.23.2, 6.24.26 exp2list, 6.2.4 exp2pow, 6.26.8 exp2trig, 6.24.13 expand, 6.14.7 expexpand, 6.26.2 expln, 6.24.26 exponential, 8.4.42 exponential, 6.41.39, 6.45.3 exponential_cdf, 8.4.43 exponential_icdf, 8.4.44 exponential_regression, 8.2.12 exponential_regression_plot, 8.2.13 exponentiald, 8.4.42 exponentiald_cdf, 8.4.43 exponentiald_icdf, 8.4.44 expr, 6.5.16, 9.5.5, 9.5.6 extract_measure, 10.16.14 extraire_mesure, 10.16.14 ezgcd, 6.28.9 FALSE, 6.2.1 Factor, 6.35.4 Fahrenheit2Celsius, 5.1.5 FUNC, 9.4.6 f2nd, 6.9.5, 6.31.5 faces, 11.16.1, 11.16.7 facteurs_premiers, 6.7.7 factor, 6.14.11, 6.27.18, 6.34.14, 6.34.19 factor_xn, 6.27.14 factorial, 6.7.1, 6.8.1 factoriser, 6.14.11, 6.27.18, 6.34.14 factoriser_entier, 6.7.6 factoriser_sur_C, 6.14.12 factors, 6.27.20 fadeev, 6.55.7 faire, 9.4.24 false, 6.2.1 falsepos_solver, 4.5.3 fclose, 9.5.3 fcoeff, 6.33.2 fdistrib, 6.14.7 feuille, 6.17.3, 6.37.2, 6.38.6 fft, 6.25.3 fieldplot, 3.20, 3.23 `filled`, 10.3.3, 10.3.5 findhelp, 1.8.2 fisher, 8.4.23 fisher, 6.41.39, 6.45.3 fisher_cdf, 8.4.24 fisher_icdf, 8.4.25 fisherd, 8.4.23 flatten, 6.41.2 float2rational, 6.9.1, 6.64.7 floor, 6.18.2 fMax, 6.21.1 fMin, 6.21.1 fonction_derivee, 6.19.3 fopen, 9.5.3 for, 9.4.21 format, 6.5.15 fourier_an, 6.25.1 fourier_bn, 6.25.1 fourier_cn, 6.25.1 fPart, 6.18.2 fpour, 9.4.21 fprint, 9.5.3 frac, 6.18.2 fracmod, 6.34.12 frame_2d, 10.2.4 frame_3d, 11.3.2 frames, 3.24, 10.3.3 frequences, 8.1.14 frequences_cumulees, 8.1.15 frequencies, 8.1.14 frobenius_norm, 6.54.1 froot, 6.33.1 fsi, 9.4.18 fsolve, 4.5, 4.6 ftantque, 9.4.24 fullparfrac, 6.24.26 funcplot, 3.7, 11.15.5 function_diff, 6.19.3 fxnd, 6.9.5, 6.31.5 Gamma, 6.10.13 Gcd, 6.7.3, 6.28.8, 6.35.3 GetFold, 2.6.5 GF, 6.34.18 Graph, 3.7 gammad, 8.4.27 gammad_cdf, 8.4.28 gammad_icdf, 8.4.29 gauche, 6.5.5, 6.37.2, 6.38.6, 6.41.8, 6.60.4 gauss, 6.58.3 gaussjord, 6.61.3 gaussquad, 4.3.4 gbasis, 6.30.1 gcd, 6.7.2, 6.28.7, 6.34.13 gcdex, 6.28.11 genpoly, 6.30.4 geometric, 8.4.33 geometric_cdf, 8.4.34 geometric_icdf, 8.4.35 getDenom, 6.9.4, 6.31.3 getKey, 9.4.3 getNum, 6.9.3, 6.31.1 getType, 9.4.6 giac, 0.2, 0.2.6 gl_z, 10.3.3 gl_quaternion, 10.3.3 gl_rotation, 10.3.3 gl_shownames, 10.3.3 gl_texture, 10.3.3 gl_x, 10.3.3 gl_x_axis_color, 10.3.3 gl_x_axis_name, 10.3.3 gl_x_axis_unit, 10.3.3 gl_xtick, 10.3.3 gl_y, 10.3.3 gl_y_axis_color, 10.3.3 gl_y_axis_name, 10.3.3 gl_y_axis_unit, 10.3.3 gl_ytick, 10.3.3 gl_z_axis_color, 10.3.3 gl_z_axis_name, 10.3.3 gl_z_axis_unit, 10.3.3 gl_ztick, 10.3.3 goto, 9.4.25 grad, 6.59.1 gramschmidt, 6.58.5 graph2tex, 1.10.3, 2.4.3, 3.5 graph3d2tex, 1.10.5, 3.5 graphe, 3.8 graphe3d, 3.9 graphe_aire, 3.12, 10.16.7 graphe_probabiliste, 3.6 graphe_suite, 3.19, 6.15.4 greduce, 6.30.2 `green`, 10.3.5 grid_paper, 10.2.8 groupermu, 6.11.18 Heaviside, 6.10.9 hadamard, 6.47.8 half_cone, 11.15.2 half_line, 10.9.2, 11.5.3 halftan, 6.24.19 halftan_hyp2exp, 6.24.20 halt, 9.7.8 hamdist, 6.4.2 harmonic_conjugate, 10.19.4 harmonic_division, 10.19.3 has, 6.64.5 hasard, 6.8.4, 8.3, 8.3.2, 8.3.2, 8.3.3 hauteur, 10.9.10 head, 6.5.4, 6.41.5 hermite, 6.29.2 hessenberg, 6.55.12 hessenberg, 6.55.7 hessian, 6.59.3 heugcd, 6.28.9 hexagon, 10.12.1, 11.9.1 hexagone, 10.12.1, 11.9.1 `hidden_name`, 10.3.5 hilbert, 6.45.7 histogram, 8.1.13 histogramme, 8.1.13 hold, 6.14.5 homothetie, 10.17.5, 11.14.5 homothety, 10.17.5, 11.14.5 horner, 6.27.21 hybrid_solver, 4.6.2 hybridj_solver, 4.6.5 hybrids_solver, 4.6.3 hybridsj_solver, 4.6.6 hyp2exp, 6.26.1 hyperbola, 10.14.2, 11.11.2 hyperbole, 10.14.2, 11.11.2 IFTE, 2.5.2 Input, 9.4.2 InputStr, 9.4.2 Int, 6.20.1 Inverse, 6.35.6 i, 6.1 i[], 6.38.1 iabcuv, 6.7.24 ibasis, 6.52.10 ibpdv, 6.20.5 ibpu, 6.20.5 icdf, 8.4.55 ichinrem, 6.7.25, 6.7.26 ichrem, 6.7.25, 6.7.26 icosaedre, 11.17.5 icosahedron, 11.17.5 id, 6.18.2 identity, 6.45.1 idivis, 6.7.9 idn, 6.45.1 iegcd, 6.7.23 if, 9.4.18, 9.4.19 ifactor, 6.7.6 ifactors, 6.7.7 ifft, 6.25.4 ifte, 2.5.2 igamma, 6.10.15 igcd, 6.7.2, 6.28.7 igcdex, 6.7.23 ihermite, 6.55.13 ilaplace, 6.62.2 im, 6.12.3 imag, 6.12.3 image, 6.52.11 implicitplot, 3.15 impression, 1.4.1 in, 9.4.21 in_ideal, 6.30.3 incircle, 10.13.4 indets, 6.64.2 inequationplot, 3.11 inf, 6.1 infinity, 6.1 input, 9.4.2 inString, 6.5.10 inscrit, 10.13.4 insmod, 13.2 int, 6.20.1 int, 6.24.26 intDiv, 6.7.11 integer, 2.5.7, 6.25.1 integrate, 6.20.1 integration, 6.20.1 integrer, 6.20.1 inter, 10.8.6, 11.4.4 inter_droite, 10.8.5, 11.4.3 inter_unique, 10.8.5, 11.4.3 interactive_odeplot, 3.22 interactive_plotode, 3.22 interp, 6.27.33 intersect, 6.16.2, 6.38.9, 6.40.4 interval2center, 6.37.3 inv, 6.34.11, 6.34.16, 6.52.2 inverse, 6.34.16, 6.52.2 inversion, 10.17.7, 11.14.7 `invisible_point`, 10.3.5 invlaplace, 6.62.2 iPart, 6.18.2 iquo, 6.7.11 iquorem, 6.7.13 iratrecon, 6.34.12 irem, 6.7.12 is_collinear, 10.18.2, 11.13.6 is_concyclic, 10.18.3, 11.13.7 is_conjugate, 10.18.14 is_coplanar, 11.13.2 is_cospheric, 11.13.8 is_cycle, 6.11.9 is_element, 10.18.1, 11.13.1 is_equilateral, 10.18.5, 11.13.9 is_harmonic, 10.18.15 is_harmonic_circle_bundle, 10.18.17 is_harmonic_line_bundle, 10.18.16 is_included, 6.40.2 is_inside, 10.18.4 is_isosceles, 10.18.6, 11.13.10 is_orthogonal, 10.18.13, 11.13.5 | is_parallel, 10.18.11, 11.13.3 is_parallelogram, 10.18.10, 11.13.14 is_permu, 6.11.8 is_perpendicular, 10.18.12, 11.13.4 is_prime, 6.7.17 is_pseudoprime, 6.7.16 is_rectangle, 10.18.7 is_rhombus, 10.18.9, 11.13.13 is_square, 10.18.8, 11.13.12 ismith, 6.55.14 isobarycenter, 10.8.9, 11.4.6 isobarycentre, 10.8.9, 11.4.6 isom, 6.56.1 isopolygon, 10.12.2, 11.9.2 isopolygone, 10.12.2, 11.9.2 isosceles_triangle, 10.10.3, 11.7.2 isPrime, 6.7.17 isprime, 6.7.17 ithprime, 6.7.19, 6.7.22 JordanBlock, 6.45.6 jacobi_symbol, 6.7.31 `jaune`, 10.3.5 jordan, 6.55.5 jusqua, 9.4.23 jusque, 9.4.21 keep_pivot, 6.61.3 ker, 6.52.12 kernel, 6.52.12 kill, 9.7.7 kolmogorovd, 8.4.48 kolmogorovt, 8.4.49, 8.5.5 LIST, 9.4.6 Li, 6.10.6 Line, 10.9.4 LineHorz, 3.10.2 LineTan, 3.10.4 LineVert, 3.10.3 LQ, 6.57.4 LSQ, 6.61.7 LU, 6.57.6 l1norm, 6.42.1, 6.54.4 l2norm, 6.42.1, 6.54.4 label, 9.4.25 labels, 10.3.3 lagrange, 6.27.33 lagrange, 6.27.33, 6.52.4, 6.55.7 laguerre, 6.29.3 laplace, 6.62.2 laplacian, 6.59.2 latex, 1.10.1 lcm, 6.7.5, 6.28.10 lcoeff, 6.27.11 ldegree, 6.27.10 lef, 6.5.5 left, 6.37.2, 6.38.6, 6.41.8, 6.60.4 left, 6.45.5 left_rectangle, 3.11.1, 3.12 legend, 10.3 legend, 10.3.3, 10.3.4 legende, 10.3, 10.3.4, 10.6, 10.16.1 legende, 10.3.3, 10.3.4 legendre, 6.29.1 legendre_symbol, 6.7.30 length, 6.5.3, 6.41.15 lgcd, 6.7.4 lhs, 6.60.4 lieu, 10.20.1 `ligne_chapeau_carre`, 10.3.5 `ligne_chapeau_plat`, 10.3.5 `ligne_chapeau_rond`, 10.3.5 ligne_polygonale, 8.2.6 ligne_polygonale_pointee, 8.2.8 `ligne_tiret`, 10.3.5 `ligne_tiret_point`, 10.3.5 `ligne_tiret_pointpoint`, 10.3.5 `ligne_trait_plein`, 10.3.5 limit, 6.22.1, 6.22.2 limite, 6.22.1, 6.22.2 lin, 6.26.4 line, 3.10.1, 10.9.1, 11.5.1, 11.5.2 line_inter, 10.8.5, 11.4.3 line_paper, 10.2.7 line_segments, 11.16.8 line_width_1, 10.3.5 line_width_2, 10.3.5 line_width_8, 10.3.5 linear_interpolate, 8.2.9 linear_regression, 8.2.10 linear_regression_plot, 8.2.11 lineariser, 6.26.4 lineariser_trigo, 6.24.3 linfnorm, 6.54.4 linsolve, 6.61.6 list, 6.27.7, 6.27.28 list2mat, 6.41.41 listplot, 8.2.7 lll, 6.57.10 ln, 6.18.2 ln, 6.23.2, 6.24.26 lname, 6.64.2 lncollect, 6.26.5 lnexpand, 6.26.3 local, 9.1.2 locus, 10.20.1 log, 6.18.2 log, 6.23.2 log10, 6.18.2 logarithmic_regression, 8.2.14 logarithmic_regression_plot, 8.2.15 logb, 6.18.2 logistic_regression, 8.2.20 logistic_regression_plot, 8.2.21 loi_normale, 8.4.11 longueur, 10.16.2, 11.12.7 longueur2, 10.16.4, 11.12.8 losange, 10.11.3, 11.8.2 lsq, 6.61.7 lu, 6.57.5 lu, 6.45.5 lvar, 6.64.3 M, 1.4.2 `magenta`, 10.3.5 makelist, 6.41.38 makemat, 6.46.3 makesuite, 6.41.13 makevector, 6.41.14 map, 6.41.34, 6.41.35 maple2mupad, 1.12.2 maple2xcas, 1.12.1 maple_ifactors, 6.7.8 maple_mode, 1.7.5 markov, 8.4.56 mat2list, 6.41.42, 6.41.42 mathml, 1.11.1 matpow, 6.55.6 matrix, 6.44, 6.45.2, 6.46.4, 6.51 matrix, 6.41.34 matrix_norm, 6.54.4 max, 6.18.2 maxnorm, 6.42.1 mean, 6.43, 6.50.5, 8.1.1 median, 6.43, 6.50.5, 8.1.5 median_line, 10.9.9 mediane, 10.9.9 mediatrice, 10.9.11, 11.6.2 member, 6.41.25 mgf, 8.4.53 mid, 6.5.4, 6.41.4, 6.41.4 middle_point, 3.11.1, 3.12 midpoint, 6.38.7, 10.8.8, 11.4.5 milieu, 6.38.7, 10.8.8, 11.4.5 min, 6.18.2 minor_det, 6.52.4 minus, 6.16.2, 6.40.5 mkisom, 6.56.2 mksa, 5.1.4 mod, 6.7.12, 6.16.2, 6.35 modgcd, 6.28.9 mods, 6.7.12 moustache, 6.43, 6.50.5, 8.1.12 moyenne, 6.43, 6.50.5, 8.1.1 mRow, 6.49.8 mRowAdd, 6.49.9 mul, 6.41.33 mult_c_conjugate, 6.12.9 mult_conjugate, 6.14.9 multinomial, 8.4.7 multinomial, 6.41.39, 6.45.3 multiplier_conjugue, 6.14.9 multiplier_conjugue_complexe, 6.12.9 mupad2maple, 1.13.2 mupad2xcas, 1.13.1 NewFold, 2.6.3 NUM, 9.4.6 Nullspace, 6.52.13 nCr, 6.8.2 ncols, 6.50.8 nDeriv, 4.3.2 negbinomial, 8.4.4 negbinomial_cdf, 8.4.5 negbinomial_icdf, 8.4.6 newList, 6.41.37 newMat, 6.45.2 newton, 4.3.1 newton_solver, 4.5.4 newtonj_solver, 4.6.4 nextperm, 6.11.3 nextprime, 6.7.20 nInt, 4.3.3 nodisp, 2.5.13, 10.4, 10.5 `noir`, 10.3.5 nop, 6.39.6 nops, 6.41.15 norm, 6.42.1, 6.54.4 normal, 6.14.16, 6.34.1, 6.34.2, 6.34.3, 6.34.4, 6.34.9 normal_cdf, 8.4.12 normal_icdf, 8.4.13 normald, 8.4.11 normald, 6.41.39, 6.45.3 normald_cdf, 8.4.12 normald_icdf, 8.4.13 normalize, 6.12.7, 6.42.2, 10.16.18 normalize, 3.20, 3.22 normalt, 8.5.2 not, 6.2.3 nPr, 6.8.3 nprimes, 6.7.18 nrows, 6.50.7 nSolve, 4.4 nstep, 3.7, 10.3.3 nuage_points, 8.2.4 nullspace, 6.52.12 numer, 6.9.3, 6.31.2 Output, 9.4.11 Ox_2d_unit_vector, 10.2.3 Ox_3d_unit_vector, 11.3.1 Oy_2d_unit_vector, 10.2.3 Oy_3d_unit_vector, 11.3.1 Oz_3d_unit_vector, 11.3.1 octaedre, 11.17.3 octahedron, 11.17.3 odd, 6.7.15 odeplot, 3.21, 3.23 odesolve, 4.3.5, 4.3.6 of, 6.41.34 op, 6.17.3, 6.37.2, 6.38.6, 6.41.13 open_polygon, 10.12.4, 11.9.4 or, 6.2.3 ord, 6.5.7 order_size, 6.36.2, 6.36.3 ordinate, 10.15.3, 11.12.2 ordonnee, 10.15.3, 11.12.2 orthocenter, 10.8.7 orthocentre, 10.8.7 orthogonal, 11.5.8, 11.6.4 osculating_circle, 7.5.3 output, 9.4.11 Pause, 9.7.10 Psi, 6.10.17 p1oc2, 6.11.12 p1op2, 6.11.10 pa2b2, 6.7.28 pade, 6.36.6 papier_ligne, 10.2.7 papier_pointe, 10.2.6 papier_quadrille, 10.2.8 papier_triangule, 10.2.9 parabola, 10.14.3, 11.11.3 parabole, 10.14.3, 11.11.3 parallel, 10.9.6, 11.5.6 parallele, 10.9.6, 11.5.6 parallelepiped, 11.16.3 parallelepipede, 11.16.3 parallelogram, 10.11.5, 11.8.4 parallelogramme, 10.11.5, 11.8.4 parameq, 10.15.8, 11.12.6 paramplot, 3.16, 3.16.2, 11.15.6 parfrac, 6.24.26, 6.31.9 pari, 6.7.4, 6.7.17, 6.9.11 part, 6.14.27 partfrac, 6.31.9 partfrac, 6.24.26, 6.31.9 pas, 9.4.21 pcar, 6.55.7 pcar_hessenberg, 6.55.8 pcoef, 6.27.25 pcoeff, 6.27.25 pente, 10.16.12 pente, 10.9.1, 10.16.12 penteen, 10.16.13 penteenbrut, 10.16.13 perimeter, 10.16.10 perimeterat, 10.16.11 perimeteratraw, 10.16.11 perimetre, 10.16.10 perimetreen, 10.16.1, 10.16.11 perimetreenbrut, 10.16.1, 10.16.11 perm, 6.8.3 perminv, 6.11.15 permu2cycles, 6.11.4 permu2mat, 6.11.7, 6.57.5 permuorder, 6.11.17 perpen_bisector, 10.9.11, 11.6.2 perpendiculaire, 10.9.7, 11.5.7, 11.6.5 perpendiculaire_commune, 11.5.9 perpendicular, 10.9.7, 11.5.7, 11.6.5 peval, 6.27.13 phi, 6.7.29 pi, 6.1 piecewise, 2.5.2 pivot, 6.61.5 plan, 11.6.1 plan, 3.21 plane, 11.6.1 plane, 3.21 playsnd, 12.1.3 plot, 3.8 plot3d, 3.9 plotarea, 3.12, 10.16.7 plotcontour, 3.13 plotdensity, 3.14 plotfield, 3.20, 3.23 plotfunc, 3.7, 6.21.2 plotimplicit, 3.15 plotinequation, 3.11 plotlist, 8.2.7 plotode, 3.21, 3.23 plotparam, 3.16, 3.16.2 plotpolar, 3.18 plotseq, 3.19, 6.15.4 `plus_point`, 10.3.5 pmin, 6.13.2, 6.55.9 pmin, 6.55.7 point, 10.8.2, 11.4.1 `point`, 10.3.3, 10.3.3 point2d, 10.8.3 point3d, 11.4.2 `point_carre`, 10.3.5 `point_croix`, 10.3.5 point_div, 10.19.1 `point_etoile`, 10.3.5 `point_invisible`, 10.3.5 `point_losange`, 10.3.5 point_milieu, 3.11.1, 3.12 `point_plus`, 10.3.5 `point_point`, 10.3.5 point_polaire, 10.8.4 `point_triangle`, 10.3.5 `point_width_1`, 10.3.5 `point_width_2`, 10.3.5 `point_width_8`, 10.3.5 poisson, 8.4.8 poisson, 6.41.39, 6.45.3 poisson_cdf, 8.4.9 poisson_icdf, 8.4.10 polaire, 10.19.5 polaire_reciproque, 10.19.6 polar, 10.19.5 polar_coordinates, 10.15.6 polar_point, 10.8.4 polarplot, 3.18 pole, 10.19.5 poly1, 6.27.1 poly2symb, 6.27.3, 6.27.4 polyEval, 6.27.13 polyedre, 11.16.5 polygon, 10.12.3, 11.9.3 polygone, 10.12.3, 11.9.3 polygone_ouvert, 10.12.4, 11.9.4 polygonplot, 8.2.6 polygonscatterplot, 8.2.8 polyhedron, 11.16.5 polynom, 6.36.2, 6.36.3 polynom, 6.24.26, 6.27.7, 6.27.27, 6.27.29 polynomial_regression, 8.2.16 polynomial_regression_plot, 8.2.17 poslbdLMQ, 6.32.6 posubLMQ, 6.32.5 potential, 6.59.6 pour, 9.4.21 pow2exp, 6.26.7 power_regression, 8.2.18 power_regression_plot, 8.2.19 powermod, 6.34.10 powerpc, 10.13.7 powexpand, 6.26.6 powmod, 6.34.10 prepend, 6.41.19 preval, 6.14.26 prevperm, 6.11.2 prevprime, 6.7.21 primpart, 6.27.16 print, 9.4.8 printpow, 9.4.10 prism, 11.16.4 prisme, 11.16.4 product, 6.41.33, 6.47.6, 6.47.8 produit_scalaire, 6.42.7 projection, 10.17.8, 11.14.8 proot, 4.8 propFrac, 6.9.2 propfrac, 6.9.2, 6.31.8 psrgcd, 6.28.9 ptayl, 6.27.22 puissance, 10.13.7 purge, 2.5.10, 6.25.1 pyramid, 11.16.2 pyramide, 11.16.2 QR, 6.57.3 Quo, 6.28.3, 6.35.1 q2a, 6.58.1 qr, 6.57.2 `quadrant1`, 10.3.4 `quadrant2`, 10.3.4 `quadrant3`, 10.3.4 `quadrant4`, 10.3.4 quadrilateral, 10.11.6, 11.8.5 quadrilatere, 10.11.6, 11.8.5 quadrique, 6.58.8 quadrique_reduite, 6.58.9 quand, 2.5.2 quantile, 6.43, 6.50.5, 8.1.9 quartile1, 6.43, 8.1.7 quartile3, 6.43, 8.1.8 quartiles, 6.43, 6.50.5, 8.1.6 quest, 2.5.14 quo, 6.28.2, 6.34.5 quorem, 6.28.6, 6.34.7 quote, 6.5.1, 6.14.5 RandSeed, 8.3.1 REDIM, 6.49.2 REPLACE, 6.49.3 Rem, 6.28.5, 6.35.2 Rref, 6.35.7 r2e, 6.27.3, 6.27.4 radical_axis, 10.13.8 radius, 10.16.15 rand, 6.8.4, 8.3, 8.3.2, 8.3.2, 8.3.3 randbinomial, 8.3.4 randexp, 8.3.8 randMat, 6.45.3, 8.3.9 randmarkov, 8.4.57 randmatrix, 6.45.3, 8.3.9 randmultinomial, 8.3.5 randNorm, 8.3.7 randnorm, 8.3.7 randPoly, 6.27.30 randperm, 6.11.1 randpoisson, 8.3.6 randpoly, 6.27.30 randseed, 8.3.1 randvector, 6.41.39 rank, 6.52.6 ranm, 6.27.32, 6.45.3, 8.3.9 rassembler_trigo, 6.24.5 rat_jordan, 6.55.4 rational_det, 6.52.4 rationalroot, 6.32.7 ratnormal, 6.14.19 rayon, 10.16.15 rdiv, 6.10.3 re, 6.12.2 read, 2.6.8, 9.5.1 readrgb, 12.2.2 readwav, 12.1.1 real, 6.12.2 realroot, 6.32.2 reciprocation, 10.19.6 rectangle, 10.11.4, 11.8.3 rectangle_droit, 3.11.1, 3.12 rectangle_gauche, 3.11.1, 3.12 rectangular_coordinates, 10.15.5 `red`, 10.3.5 redim, 6.49.5 reduced_conic, 6.58.7 reduced_quadric, 6.58.9 ref, 6.61.2 reflection, 10.17.3, 11.14.3 regroup, 6.14.15 regrouper, 6.14.15 rem, 6.28.4, 6.34.6 remain, 6.7.12 remove, 6.41.24 `rempli`, 10.3.3, 10.3.5 reorder, 6.27.31 repeat, 9.4.23 repere_2d, 10.2.4 repere_3d, 11.3.2 repeter, 9.4.23 replace, 6.49.6 residue, 6.36.5 resoudre, 3.10.7, 6.14.11, 6.59.1, 6.60.6, 9.4.17 resoudre_dans_C, 6.60.7 resoudre_systeme_lineaire, 6.61.6 restart, 2.5.11 resultant, 6.28.19 retourne, 9.1.2 return, 9.1.2 reverse_rsolve, 6.61.8 revert, 6.36.4 revlist, 6.41.9 rhombus, 10.11.3, 11.8.2 `rhombus_point`, 10.3.5 rhs, 6.60.5 right, 6.5.5, 6.37.2, 6.38.6, 6.41.8, 6.60.5 right, 6.45.5 right_rectangle, 3.11.1, 3.12 right_triangle, 10.10.4 risch, 6.20.2 rm_a_z, 2.4.5 rm_all_vars, 2.4.6 rmbreakpoint, 9.7.5 rmwatch, 9.7.3 romberg, 4.3.3 gauss15, 3.11.1 rombergm, 3.11.1 rombergt, 3.11.1 root, 6.10.4 rootof, 6.27.23 roots, 6.27.24 rotate, 6.41.10 rotation, 10.17.4, 11.14.4 `rouge`, 10.3.5 round, 6.18.2 row, 6.48.2 row, 6.41.27, 6.41.28, 6.41.29, 6.41.30, 6.50.1, 6.50.2, 6.50.3, 6.50.4 rowAdd, 6.49.7 rowDim, 6.50.7 rowdim, 6.50.7 rowNorm, 6.54.2 rownorm, 6.54.2 rowSwap, 6.49.10 rowspace, 6.52.15 rowswap, 6.49.10 rref, 6.34.17, 6.61.3 rsolve, 6.15.3 SCALE, 6.49.8 SCALEADD, 6.49.9 SCHUR, 6.55.12 SetFold, 2.6.4 Si, 6.10.8 SortA, 6.41.21 SortD, 6.41.22 STR, 9.4.6 Store, 2.5.2, 9.4.16 SVD, 6.57.9 SVL, 6.57.7 saisir, 9.4.2 saisir_chaine, 9.4.2 sans_factoriser, 3.15 scalar_product, 6.42.7 scalarProduct, 6.42.7 scale, 6.49.8 scaleadd, 6.49.9 scatterplot, 8.2.4 sec, 6.24.1 secant_solver, 4.5.5 segment, 10.9.3, 11.5.4 select, 6.41.23 semi_augment, 6.49.13 seq, 6.39.5, 9.4.22 seq[], 6.39.1, 6.41.13 seqplot, 3.19 seqsolve, 6.15.2 series, 6.36.3 set[], 6.40.1 shift, 6.41.11 shift_phase, 6.24.4 si, 9.4.18 sign, 6.18.2 signature, 6.11.14 similarity, 10.17.6, 11.14.6 similitude, 10.17.6, 11.14.6 simp2, 6.9.6, 6.31.6 simplex_reduce, 6.53 simplifier, 6.14.17, 6.24.6 simplify, 6.14.17, 6.24.6 simpson, 3.11.1 simult, 6.61.4 sin, 6.24.1 array, 6.24.26 sin, 6.23.2, 6.24.26 sin2costan, 6.24.15 sincos, 6.24.13 sincos, 6.24.26 single_inter, 10.8.5, 11.4.3 sinh, 6.18.2 sinon, 9.4.18 size, 6.5.3, 6.41.15 sizes, 6.41.16 slope, 10.16.12 slope, 10.9.1, 10.16.12 slopeat, 10.16.13 slopeatraw, 10.16.13 smod, 6.7.12 snedecor, 8.4.23 snedecor_cdf, 8.4.24 snedecor_icdf, 8.4.25 snedecord, 8.4.23 `solid_line`, 10.3.5 solve, 3.10.7, 6.14.11, 6.59.1, 6.60.6, 9.4.17 sommet, 6.17.3, 6.37.2, 6.38.6 sommets, 10.8.12, 11.16.1, 11.16.6 sommets_abc, 10.8.12 sommets_abca, 10.8.13 sort, 6.41.20 sorta, 6.41.21 sortd, 6.41.22 soundsec, 12.1.4 specnorm, 6.54.4 sphere, 11.15.4 spline, 6.27.34 split, 6.14.10 sq, 6.18.2 sqrfree, 6.27.19 sqrt, 6.18.2 square, 10.11.2, 11.8.1 `square_point`, 10.3.5 srand, 8.3.1 sst, 9.7.1 sst_in, 9.7.1 `star_point`, 10.3.5 stdDev, 6.43, 8.1.3 stddev, 6.43, 6.50.5, 8.1.2 stddevp, 6.43, 8.1.3 steffenson_solver, 4.5.6 sto, 2.5.2, 9.4.16 string, 6.5.14, 9.5.7 string, 6.24.26 student, 8.4.15 student_cdf, 8.4.16 student_icdf, 8.4.17 studentd, 8.4.15 studentt, 8.5.3 sturm, 6.28.15 sturmab, 6.28.16 sturmseq, 6.28.17 style, 10.3.3 subMat, 6.48.3 subs, 6.14.23 subsop, 6.41.12, 6.49.1 subst, 6.14.21 substituer, 6.14.21 subtype, 9.4.5 sum, 6.20.3, 6.41.31, 6.47.4 sum_riemann, 6.20.4 supposons, 2.5.7 suppress, 6.41.6 surd, 6.18.2 svd, 6.57.8 svl, 6.57.7 swapcol, 6.49.11 swaprow, 6.49.10 switch, 9.4.20 switch_axes, 10.2.2 sylvester, 6.28.18 symb2poly, 6.27.5, 6.27.6 symetrie, 10.17.3, 11.14.3 syst2mat, 6.61.1 TeX, 1.10.1 TRUE, 6.2.1 table, 6.44, 6.51 table_fonction, 6.15.1, 6.21.2 table_suite, 6.15.4 tablefunc, 6.15.1, 6.21.2 tableseq, 6.15.4 tail, 6.5.4, 6.41.7 tan, 6.24.1 tan, 6.24.26 tan2cossin2, 6.24.18 tan2sincos, 6.24.14 tan2sincos2, 6.24.17 tangent, 3.10.5, 10.9.8, 11.6.3 tangente, 3.10.5 tanh, 6.18.2 tantque, 9.4.24 taux_accroissement, 6.19.2 taylor, 6.36.2 tCollect, 6.24.5 tchebyshev1, 6.29.4 tchebyshev2, 6.29.5 tcoeff, 6.27.12 tcollect, 6.24.5 tExpand, 6.23.1 tetraedre, 11.16.2 tetraedre_centre, 11.17.1 tetrahedron, 11.16.2 texpand, 6.23.1 textinput, 9.4.2 then, 9.4.18 thickness, 10.3 thickness, 10.3.3 throw, 9.7.13 time, 1.2 title, 10.3.3 titre, 10.3.3 tlin, 6.24.3 trace, 6.52.3, 10.20.3 tracer_aire, 3.12, 10.16.7 trames, 3.24, 10.3.3 tran, 6.52.1 translation, 10.17.2, 11.14.2 transpose, 6.52.1 trapeze, 3.11.1, 3.12 trapezoid, 3.11.1, 3.12 triangle, 10.10.2, 11.7.1 triangle_equilateral, 10.10.5, 11.7.4 triangle_isocele, 10.10.3, 11.7.2 triangle_paper, 10.2.9 `triangle_point`, 10.3.5 triangle_rectangle, 10.10.4, 11.7.3 trig, 6.23.2 trig2exp, 6.24.22 trigcos, 6.24.24 trigexpand, 6.24.2 trigsin, 6.24.23 trigtan, 6.24.25 trn, 6.52.7 true, 6.2.1 trunc, 6.18.2 truncate, 6.27.26 try, 9.7.12 tsimplify, 6.24.4, 6.26.9 tstep, 10.3.3 type, 9.4.4 UTPC, 8.4.22 UTPF, 8.4.26 UTPN, 8.4.14 UTPT, 8.4.18 ufactor, 5.1.6 ugamma, 6.10.14 unapply, 6.17.2 unarchive, 2.5.5 unfactored, 3.15 uniform, 8.4.39 uniform_cdf, 8.4.40 uniform_icdf, 8.4.41 uniformd, 8.4.39 uniformd_cdf, 8.4.40 uniformd_icdf, 8.4.41 union, 6.16.2, 6.38.8, 6.40.3 unitV, 6.12.7, 6.42.2 unquote, 6.14.6 until, 9.4.23 user_operator, 6.16.3 usimplify, 5.1.7 ustep, 10.3.3 VAR, 9.4.6 VARS, 2.4.5, 2.4.6, 2.6.7 VAS, 6.32.3 VAS_positive, 6.32.4 valuation, 6.27.10 vandermonde, 6.45.8 variance, 6.43, 6.50.5, 8.1.4 vecteur, 10.9.5, 11.5.5 vecteur_unitaire_Ox_2d, 10.2.3 vecteur_unitaire_Ox_3d, 11.3.1 vecteur_unitaire_Oy_2d, 10.2.3 vecteur_unitaire_Oy_3d, 11.3.1 vecteur_unitaire_Oz_3d, 11.3.1 vector, 10.9.5 version, 0.2, 0.2.6 `vert`, 10.3.5 vertices, 10.8.12 vertices_abc, 10.8.12 vertices_abca, 10.8.13 vpotential, 6.59.7 vstep, 10.3.3 WAIT, 9.7.11 watch, 9.7.2 weibull, 8.4.45 weibull_cdf, 8.4.46 weibull_icdf, 8.4.47 weibulld, 8.4.45 weibulld_cdf, 8.4.46 weibulld_icdf, 8.4.47 when, 2.5.2 while, 9.4.24 `white`, 10.3.5 widget_size, 1.7.1, 1.7.2 wilcoxonp, 8.4.50 wilcoxons, 8.4.51 wilcoxont, 8.4.52 write, 9.5.2 writergb, 12.2.4 writewav, 12.1.2 xor, 6.2.3 xstep, 3.7, 10.3.3 xyztrange, 1.6.2, 3.4, 10.2.10 `yellow`, 10.3.5 ystep, 3.7, 10.3.3 Zeta, 6.10.18 zeros, 6.14.13 zip, 6.41.36 zstep, 3.7, 10.3.3 ztrans, 6.63.1

# Pour commencer

## 0.1 Style de l’index et notations

- Notes concernant l’index de ce manuel
- Remarques concernant les notations

## 0.2 La librairie `giac` et ses interfaces sous Unix

`giac` est la bibliothèque C++ de fonctions de calcul formel.
Pour connaitre le numéro de la version de `giac` que vous utilisez, on tape :

`version()`

On obtient par exemple :

`"giac 1.1.0, (c) B. Parisse and R. De Graeve, Institut Fourier, Universite de Grenoble I"`

Sous Unix, on peut utiliser cette bibliothèque de calcul formel avec plusieurs interfaces :

- `Xcas` interface qui est une feuille de calcul permettant d’avoir des niveaux de différentes natures (calcul formel, géométrie dynamique et formelle, tableur formel, dessin tortue, langage de programmation etc...),
- `icas` ou `giac` interface en ligne de commande,
- `texmacs`,
- `emacs`,
- un programme `C++`,
- un module `C++` pour créer de nouvelles fonctions.

- Interface `Xcas`
- Interface en ligne de commande
- Interface `texmacs`
- Interface `emacs`
- Utilisation dans un programme ou un module `C++`
- Savoir avec quelle version on travaille : `version giac`

# Chapitre 1 L’interface `Xcas`

## 1.1 Mise en route de l’interface `Xcas`

- Sous Unix
- Sous Windows
- Sous MacOS

## 1.2 Les différents niveaux d’entrée

Cette interface va vous permettre d’ouvrir plusieurs sessions de calculs : ces sessions ont plusieurs niveaux d’entrée, sont indépendantes les unes des autres et peuvent être pliée ou dépliée.
Chaque session peut contenir des niveaux d’entrée numérotés qui contiendront :

- soit une ligne de commandes pour exécuter des commandes de `Xcas` ou pour exécuter des programmes avec un emplacement pour les sorties intermédiaires qui seront écrites en bleu et un emplacement pour la réponse (que l’on obtient si on a validé la commande avec `Enter`). L’emplacement pour la réponse est un éditeur d’expressions, ou un écran graphique selon la nature de la commande (commande renvoyant une expression ou un graphique). Lorsqu’on a, sur un même niveau, plusieurs commandes separées par un point virgule ou par une virgule, ces commandes sont faites es unes après les autres et c’est la nature de la dernière commande qui détermine la nature de la sortie. Par exemple, la réponse à la ligne : `a:=1;cercle(0,a)` sera un cercle de centre 0 et de rayon 1.
  Les instructions `print` d’un programme ou l’évaluation du temps d’un long calcul seront écrites en bleu. L’évaluation du temps est approximatif, si vous voulez plus de précision sur votre temps de calcul, il faut utiliser la commande `time` qui renvoie le temps mis pour l’évaluation en secondes.
  `time` a comme argument une commande et renvoie deux temps (le temps CPU et le temps chronomèté en secondes) sous linux et seulement le temps CPU sur mac et win.
  On tape par exemple :
  `time(factor(x```^```10-1))`
  On obtient en mode réel et sous Linux :
  `[0.0022,0.0053107029]`
  On tape par exemple :
  `time(factor(x```^```100-1))`
  On obtient en mode complexe et sous Linux :
  `[1.93,1.371075654]`
  Vous remarquerez alors : `Temps mis pour l’évaluation : 1.93` en vert. Le premier nombre est le temps CPU (temps mis par le processeur pour faire uniquement ces calculs, en seconde), le deuxième nombre est le temps mis pour faire le calcul comme si on chronomètrait. Pour les commandes qui donnent un résultat rapidement, elles sont exécutées plusieurs fois et la moyenne de temps de calcul est renvoyée.
  On a aussi `time()` sans argument, qui renvoie le temps de calcul depuis le début de la session, on tape :
  `time()`
  On obtient par exemple :
  `2.37`
- soit un éditeur d’expressions,
- soit un niveau de géométrie 2-d, son écran graphique, ses menus, ses boutons et ses lignes de commandes,
- soit un niveau de géométrie 3-d, son écran graphique, ses menus, ses boutons et ses lignes de commandes,
- soit un niveau de dessin tortue, son écran graphique, son éditeur de programmes et ses lignes de commandes,
- soit un tableur et son écran graphique,
- soit un éditeur de programmes,
- soit un commentaire,
- soit un regroupement de ces niveaux en un groupe.

Au sein d’une même session, les différents niveaux d’entrée ne sont pas indépendants, par exemple, une variable définie dans une ligne de commandes pourra être utilisée en géométrie ou dans le tableur.
L’ensemble de toutes ces sessions constitue votre espace de travail.
Le niveau actif est celui où se trouve le curseur et le niveau selectionné est obtenu quand on clique sur son numéro, numéro qui sécrit alors sur fond noir.
On peut déplacer un niveau ou un groupe de niveau dans une session, ou le recopier dans une autre session.
Vous pouvez , à tout moment insérer un nouveau niveau ou encore changer l’entrée d’un niveau : `Enter` valide le changement de ce niveau et sélectionne l’entrée suivante, mais attention les niveaux suivants ne seront pas recalculés. Il est toutefois possible après une modification de réexécuter, soit tous les niveaux, soit les niveaux situés après la modification (menu `Edit` puis `Executer session` ou `Executer en-dessous`).
Il faut savoir qu’il suffit de faire :

- `Alt+c` pour ouvrir un niveau de type ligne de commentaires,
- `Alt+e` pour ouvrir un niveau de type éditeur d’éxpressions,
- `Alt+n` pour ouvrir un niveau de type ligne de commandes,
- `Alt+t` pour ouvrir un niveau de type tableur,
- `Alt+p` pour ouvrir un niveau de type éditeur de programmes.
- `Alt+g` pour ouvrir un niveau de type écran de géométrie plane,
- `Alt+h` pour ouvrir un niveau de type écran de géométrie 3,
- `Alt+d` pour ouvrir un niveau de type écran de dessin tortue,

## 1.3 Que voit-on au démarrage ?

Vous obtenez au démarrage l’ouverture d’une session avec de haut en bas :

1. La barre du menu général `Fich Edit Cfg...` contenant les fonctions de `Xcas` et ce qu’il faut pour les configurer et pour sauver ou charger une session de travail.
2. Une ligne des noms de sessions qui contiendra les noms (ou `Unnamed` si elles n’ont pas de noms) de vos différentes sessions. Au démarrage il n’y a qu’une session qui n’a pas de nom donc sur cette ligne il y a `Unnamed`,
3. Un bandeau général avec de gauche à droite :
   - Un bouton `?` permettant d’ouvrir le sous menu `Index` du menu `Aide`. Il sert aussi de touche de tabulation, car il ouvre le menu `Aide`à l’endroit indiqué par la ligne de commandes où figure le curseur,
   - Un bouton `Save`, sur fond rose, servant à sauver dans un fichier la session de calcul. Si on clique sur `Save`, on vous demande la première fois un nom de fichier d’extension `.xws` Quand la session a été sauvée le fond du bouton `Save` devient vert et `Unnamed` est remplacé par le nom de fichier, par exemple par `session1.xws`. Notez que les noms des sessions ont comme extension `.xws` et cette extension est rajoutée automatiquement si vous l’avez oubliée.
   - Un bouton `Config : exact real RAD 12 xcas 12.65M` ou
     `Config essai.xws : exact real RAD 12 xcas 12.65M` si on a sauvé la session sous le nom `essai.xws`.
     Ce bouton "ligne d’état" ouvre la fenêtre permettant de configurer le calcul formel et rappelle la configuration choisie : dans l’exemple, on est en mode exact et réel, les angles sont exprimés en radian, les calculs numériques sont faits avec 12 chiffres significatifs, le style de programmation est `xcas` et enfin les recources en mémoire demandées par le calcul sont de 12.65M (c’est la taille mémoire en Mégabits utilisée par `Xcas`).
     Sur cette "ligne d’état", le mode numérique sera noté `approx` et le mode complexe sera noté :
     - `cplx` si les variables ne sont pas considérées comme complexes (on a alors `re(z)=z` et `conj(z)=z`),
     - `CPLX` si les variables sont considérées comme complexes (on a alors `re(z)=re(z)` et `im(z)=im(z)` qui seront notés respectivement R(z) et I(z) dans la réponse).
     Notez que ce bouton "ligne d’état" ouvre la fenêtre de configuration qui est aussi obtenue à partir du menu : `Cfg``▸``Configuration du CAS`,
   - Un bouton rouge `STOP` pour arrêter un calcul trop long,
   - Un bouton `Kbd`, servant à faire apparaitre ou disparaitre un clavier scientifique. On remarquera sur ce clavier :
     - la touche `cmds` qui sert à faire apparaitre ou disparaitre une barre de boutons contenant les commandes du CAS, appelée bandeau du CAS. Dans le bandeau, on remarquera la touche `kbd` qui sert à faire apparaitre ou disparaitre le clavier.
     - la touche `msg`, servant à faire apparaitre ou disparaitre une fenêtre de messages facilement lisible grâce à sa barre de scroll. Cette fenêtre vous donne des messages comme Success pour dire que tout s’est bien passé, ou affiche une aide succinte sur la commande choisie à partir du menu général, ou ce qu’il faut insérer dans votre fichier LATEXpour insérer la figure sauvée, par exemple, sous le nom `session1.eps` :
       Use `\includegraphics[width=\textwidth]{session1}`
       inside your latex document, with header `\usepackage{graphicx}`
     - la touche `abc`, servant à faire apparaitre ou disparaitre un clavier contenant les lettres en minuscule, par ordre alphabétique, ainsi que des signes de ponctuation. On notera qu’en appuyant sur la touche `α` on obtient un clavier contenant les lettres grecques et qu’en appuyant sur la touche `Maj` transforme le clavier avec des lettres en majuscule.
     - la touche `◂``` qui permet de supprimer ce que l’on a sélectionné,
     - la touche `coller` qui permet de recopier ce que l’on a sélectionné,
     - la touche verte `↩` qui sert de touche `Enter`.
     - la touche situé tout en haut à droite, permettant de faire disparaitre le clavier `Kbd`.
   - Un bouton times situé tout à droite, permettant de fermer la session en cours. Cela provoquera éventuellement un avertissement si les dernières modifications n’ont pas été sauvées.
4. Un premier niveau ou les deux premiers niveaux, selon le démarrage choisi.

## 1.4 Les menus

- Le menu `Fich`
- Le menu `Edit`
- Le menu `Cfg`
- Le menu `Aide`
- Les menus des commandes de calcul
  - Déscription des menus des commandes de calcul
  - Rajouter un menu
  - Supprimer un menu

## 1.5 Comment bien gérer son espace de travail

- Pour sélectionner ou désélectionner un niveau
- Pour remplir les niveaux

## 1.6 Les différentes configurations

Les différentes configurations se font :

- pour la configuration du calcul formel avec le menu `Cfg``▸``Configuration du CAS` ou avec le bouton donnant la ligne d’état (c’est la ligne écrite à coté de `Save` et qui rappelle une partie de cette configuration).
- pour la configuration graphique avec le menu `Cfg``▸``Configuration graphique` .
- pour la configuration générale avec le menu `Cfg``▸``Configuration generale`.

- Configuration du Cas
- Configuration du graphique avec le menu :
  `Cfg``▸``Configuration graphique`
- Configuration générale

## 1.7 Les différentes configurations avec les commandes

- Le fichier `.xcasrc`
- La configuration générale et la fonction : `widget_size`
- La configuration du cas avec la fonction : `cas_setup`
- Nombres de chiffres significatifs : `Digits DIGITS`
- Choix du mode de langage `Xcas` ou Maple ou MuPad ou TI89 : `maple_mode`
- Choix de l’unité d’angle : `angle_radian`
- Choix du mode approximatif ou exact : `approx_mode`
- Choix du mode réel ou complexe : `complex_mode`
- Variables réelles ou complexes : `complex_variables`

## 1.8 L’aide

On peut avoir de l’aide sur les différentes fonctions de calcul formel de plusieurs façons. On peut cocher la case `Aide HTML automatique` de la configuration générale pour avoir l’ouverture de l’aide detailléeà chaque appel d’une fonction se trouvant dans les menus ou ne pas cocher cette case pour avoir de l’aide seulement lorqu’on le désire, toutefois une aide succincte apparait dans la ligne des messages à chaque appel d’une fonction se trouvant dans les menus. On peut avoir accès à l’aide générale ou à l’aide par fonction tout le temps (voir ci-dessous).

- Aide générale
- Aide sur une fonction : `findhelp` ou `?`

## 1.9 Sauver et imprimer

Il est préférable de mettre les suffixe suivants :
`.cxx` (ou `.map` ou `.mu` ou `.ti` selon le mode) pour un script et par exemple,
`.xws` pour la session de travail,
`.cxx` pour une fonction,
`.tab` pour le tableur,
`.tex` pour le graphique en latex,
`.eps` pour le graphique et pouvoir ensuite inclure le fichier dans un texte en latex ou en postscipt,
`.png` pour le graphique et pouvoir ensuite inclure le fichier dans un texte en html.

- Pour sauver une session
- Pour sauver un tableur
- Pour sauver un programme
- Pour imprimer

## 1.10 Traduction Latex

- Traduction Latex d’une entrée : `latex TeX`
- Imprimer la session ou/et la convertir en un fichier Latex
- Traduction Latex d’un écran de géométrie
- Traduction Latex de l’écran `DispG`
- Traduction Latex de l’écran `3-d` : `graph3d2tex`

## 1.11 Traduction Mathml

- Traduction Mathml d’une expression : `mathml`
- Traduction Mathml du tableur

## 1.12 Traduction de fichiers Maple en fichier `Xcas` ou Mupad

- Fichier Maple traduit en fichier `Xcas` : `maple2xcas`
- Fichier Maple traduit en fichier Mupad : `maple2mupad`

## 1.13 Traduction d’un fichier Mupad en un fichier `Xcas` ou Maple

- Fichier Mupad traduit en fichier `Xcas` : `mupad2xcas`
- Fichier Mupad traduit en fichier Maple : `mupad2maple`

# Chapitre 2 Saisie

## 2.1 Pour écrire un commentaire : `Alt+c`

On peut à tout moment faire apparaitre une ligne pour écrire un commentaire avec `Alt+c`. Le commentaire s’écrit sans utiliser de guillemets et apparait en vert. Le commentaire ne génère pas de réponse.
Le commentaire sert à commenter votre session.
Depuis un commentaire on peut ouvrir le navigateur à une adresse donnée On tape dans une ligne de commentaire :

`Exercice 1`

On obtient :

`aucune réponse`

Dans une ligne de commentaire, on peut ouvrir le navigateur à une adresse donnée : On tape dans une ligne de commentaire :

`Pour plus d’info cf :
@www-fourier.ujf-grenoble.fr/ parisse/giac/doc/fr/casrouge/index.html`

On obtient :

`l’ouverture dans le navigateur de l’index du document sur l’algorithmique`

Attention
Pour faire un commentaire dans un programme il faut utiliser la commande `comment` qui a comme argument une chaîne de caractères ou bien utiliser `//` qui doit etre suivi du commentaire et d’un retour à la ligne. Quand il y a un commentaire dans un programme, tout se qui se trouve entre `//` et le retour à la ligne n’est pas pris en compte par le programme.
On tape :

`bs():={comment("bonjour"); return "Salut";}`

On tape :

`bs():={//"bonjour"`
`return "Salut";}`

On obtient :

`un programme ayant comme commentaire "bonjour"`

## 2.2 L’éditeur d’expressions

Dans l’éditeur d’expressions, l’affichage ne se fait pas linéairement mais se fait en dimension `2d`.
Quand on a mis une expression dans l’éditeur d’expressions, on peut facilement sélectionner des sous-expressions et appeler les fonctions des menus sur ces sous-expressions puis appuyer sur `enter` pour avoir la réponse en dessous de l’éditeur d’expressions ou encore évaluer la sélection dans l’éditeur d’expressions avec le bouton `eval`.
Dans l’éditeur d’expressions, on peut utiliser les raccourcis suivants sur la sélection de sous-expressions :
`Ctrl+s` pour la commande `simplify`
`Ctrl+r` pour la commande `integrate`

- Comment éditer une équation
- Comment sélectionner
- Comment éditer une chaîne de caractères
- Utilité de l’éditeur d’expressions

## 2.3 Les éditeurs de matrices et les tableurs

Il faut tout d’abord ouvrir un tableur avec `Alt+t`.
À chaque tableur est attaché un écran de géométrie, une barre de menu (`Fich Edit Statistiques`), des boutons (`reeval`,`val`,`Save`), deux cases (l’une donne le nom du fichier de sauvegarde et l’autre le nom de la cellule sélectionnée) et deux lignes (l’une contient une case de sélection et une ligne dite ligne de commandes qui sert soit à remplir la cellule sélectionnée, soit à afficher ce que l’on a mis dans la cellule sélectionnée, et l’autre est la ligne d’état qui rappelle la configuration du tableur et sert de bouton pour ouvrir un écran de configuration du tableur).

- Les sauvegardes d’un tableur
- Les menus d’un tableur
- La configuration d’un tableur
- Les boutons d’un tableur

## 2.4 Les commandes d’effacement

- Effacer dans le tableur
- Effacer l’écran `DispG` de géométrie : `ClrGraph ClrDraw`
- Effacer les écrans de géométrie : `erase`
- Effacer une ligne de commande : touche `esc`
- Effacer les noms des variables d’une seule lettre minuscule : `rm_a_z`
- Effacer toutes les variables : `rm_all_vars`

## 2.5 Les variables

- Le nom des variables et la variable `CST`
- L’affectation : `:= => sto Store`
- L’affectation par référence dans une variable désignant un élément d’une liste ou d’une matrice : `=<`
- L’incrémentation d’une variable : `+= -= *= /=`
- Archiver et désarchiver des variables et leur contenu : `archive unarchive`
- Copier sans l’évaluer le contenu d’une variable : `CopyVar`
- Faire une hypothèse sur une variable : `assume supposons`
- Faire une hypothèse suppl’ementaire sur une variable : `additionally`
- Connaitre les hypothèses faites sur une variable : `about`
- Effacer le contenu d’une variable : `purge DelVar`
- Effacer le contenu de toutes les variables : `restart`
- Accès aux réponses : `ans(n)`
- Pour ne pas afficher la réponse : `nodisp :;`
- Accès aux questions : `quest(n)`

## 2.6 Les répertoires

- Comment créer un répértoire sur vôtre disque dur
- Comment sauver un fichier dans un répértoire de vôtre disque dur
- Comment créer un répértoire de travail : `NewFold`
- Comment aller dans un répértoire de travail : `SetFold`
- Nom du répértoire en cours : `GetFold`
- Effacer un répértoire vide : `DelFold`
- Comment connaitre les variables et les répértoires créés : `VARS`
- Lire un fichier depuis `Xcas` : `read`

# Chapitre 3 Le graphique

## 3.1 Généralités

Si le graphe dépend d’une fonction utilisateur, il faut que la fonction soit définie lorsque le(s) paramètre(s) a (ont) une valeur formelle, ce qui peut se faire en testant le type du paramètre, comme dans l’exemple suivant : Je définis f avec le test du type du paramètre et g sans le test par :

    f(x):= {
      if (type(x)!=DOM_FLOAT) return 'f'(x);
      while(x>0){ x--; }
      return x;
    }:;
    g(x):= {
      while(x>0){ x--; }
      return x;
    }:;

Si je tape :
`F:=plotfunc(f(x))` ou `G:=plotfunc(g(x))` j’obtiens le même graphe. Le problème apparait lorsque x n’a pas de valeur et que l’on réutilise `G`.
Mais si on fait :
`G:=plotfunc(g(x))` puis `symetrie(droite(y=x),G)` ou même simplement `G` on a l’erreur :
`"Unable to eval test in loop : x>0.0 Error: Bad Argument Value"`
parce que l’évaluation de g(x) ne peut pas se faire si x est formel.
Par contre, `F:=plotfunc(f(x))` puis `symetrie(droite(y=x),F)` renvoie bien le symétrique du graphe par rapport à la première bissectrice grâce au test de la ligne :
`if (type(x)!=DOM_FLOAT) return ’f’(x);`. D’ou l’intérêt de rajouter le test.
Par contre on peut taper directement sans provoquer d’erreurs :
`symetrie(droite(y=x),plotfunc(g(x)))`.
Explications
Il faut savoir que dans les réponses de certaines commandes (par exemple `G:=plotfunc(g(x))`) il va figurer l’expression formelle de `g(x)` (par exemple `G` contient `expr("curve(group[pnt[x+(i)*g(x),x,x,-5.0,5.0125,0]...]))`). Lors de l’évaluation de `G` il y aura une erreur car `x+(i)*g(x)` ne pourra pas être évalué puisque l’évaluation de `g(x)` provoque l’évaluation du test `x>0` qui ne peut pas être évalué car `x` n’a pas de valeur ....d’où une erreur mais si dans la fonction figure le test : `if (type(x)!=DOM_FLOAT) return ’g’(x);` cela supprime l’évaluation de `g(x)` et donc l’erreur due au test `x>0`.
En effet, `F:=plotfunc(f(x))` puis `symetrie(droite(y=x),F)` renvoie bien le symétrique du graphe par rapport à la première bissectrice grâce au test de la ligne :
`if (type(x)!=DOM_FLOAT) return ’f’(x);`.
Par contre on peut taper directement sans provoquer d’erreurs :
`symetrie(droite(y=x),plotfunc(g(x)))`

## 3.2 L’écran graphique et ses boutons

Un écran graphique 2-d ou 3-d s’ouvre automatiquement en réponse d’une commande graphique 2-d ou 3-d. À un écran graphique 2-d ou 3-d est attaché des boutons situés en haut et à droite de cet écran.
Un écran de géométrie plane s’ouvre avec les touches `Alt+g` : c’est un écran graphique 2-d interactif muni de lignes d’entrée, d’une barre de menus contenant les menus `Fich Edit` et d’un bouton `Save`. Cet écran graphique est interactif : on peut définir des points et des segments en cliquant avec la souris.
Un écran de géométrie 3-d s’ouvre avec les touches `Alt+h` : c’est un écran graphique 3-d muni de lignes d’entrée, d’une barre de menus contenant les menus `Fich Edit` et d’un bouton `Save`. Les boutons d’un écran graphique 2-d et 3-d sont les mêmes en apparence mais leurs contenus sont quelquefois différents :

- les flèches de couleur rouge servent à se promener sur l’axe des x,
- les flèches de couleur verte servent à se promener sur l’axe des y,
- les flèches de couleur bleue servent en 2-d à augmenter ou à diminuer l’échelle des y (pour faire un zoom selon les y), et en 3-d à se promener sur l’axe des z,
- les boutons `in` (resp `out`) permettent de faire des zooms c’est à dire augmente (resp diminue) l’échelle des x et des y,
- le bouton `⊥` permet d’avoir un repère orthonormé,
- le bouton `cfg` permet de changer de configuration (cf 3.4)
- le bouton ▸| permet de démarrer ou d’arrêter une animation,
- le bouton `M` permet avec ses menus
  - `Voir` d’avoir des menus simulant les boutons ci-dessus,
  - `Trace` d’intervenir sur une trace,
  - `Animation` d’intervenir sur une animation,
  - `3-d` d’avoir différentes vues d’un graphique 3-d,
  - `Export/Imprimer` d’imprimer le graphique avec un fichier `.eps` ou de traduire le graphique en Latex.

## 3.3 La configuration de l’écran graphique

Avant de faire un tracé, il faut régler les différents paramètres de la configuration de l’écran graphique :
le menu `Cfg``▸``Configuration graphique` (cf section 1.6.2) règle les paramètres de tous les graphiques qui se feront lors de la session. On peut changer ensuite ses paramètres au coup par coup avec le bouton `cfg` attaché à chaque écran graphique (cf3.4).
Les commandes du `cas` qui ont comme réponses un graphique 2-d ou 3-d seront tapées dans une ligne d’entrée. Toutefois les commandes du `cas` qui ont comme réponses un graphique 2-d peuvent aussi être tapées soit dans une ligne d’entrée d’un écran de géométrie. Attention! Un écran de géométrie est un écran graphique interactif.
Les commandes graphiques se trouvent dans le sous-menu `Graphic` du menu `Cmds`.
Les commandes de géométrie se trouvent dans le menu `Geo`.

## 3.4 Configuration graphique avec `cfg`

Le bouton `cfg` permet de régler la fenêtre graphique.

- `WX-,...,WZ` désignent les coordonnées de ce qui est visible. Pour effacer facilement les cases, on peut mettre les plages en surbrillance en utilisant soit `Shift+Tab` qui met en surbrillance la plage qui précède celle où se trouve le curseur, soit `Ctrl+Tab` qui met en surbrillance la plage qui est suit celle où se trouve le curseur.
- `Pixels` en 2-d, permet de définir les valeurs de `X-tick` et de `Y-tick` en prenant comme unité le pixel,
- `X-tick, Y-tick` pour modifier l’écartement des graduations mises sur les axes x et y, l’unité est le pixel si `Pixels` a été coché ou sinon l’unité depent des unités définies par `WX-,WX+,WY-,WY+`,
- `ry,rz,rx` en 3-d, sont les valeurs en degrés des angles d’Euler : ces valeurs permettent de retrouver facilement la position que l’on a choisie pour le repère (cf 11.2),
- `Montrer les noms` pour voir les noms des points ou des objets géométrique ou ne pas les voir,
- `Autoname` il faut mettre une lettre. Ainsi, au fur et à mesure que l’on clique dans l’écran de géométrie, les noms des points seront définis automatiquement en commençant par cette lettre en sautant les points déjà définis,
- `Montrer les axes` pour voir les axes ou ne pas les voir,
- `animate` pour donner le temps d’affichage des objets lors d’une animations (en faisant bouger la souris à droite ou à gauche on augmente ou on diminue ce temps ou on tape un nombre),
- `Round` pour avoir les coordonnèes visibles arrondies automatiquement au dizaines,
- `Default` remet les paramètre choisis par défaut,
- `Autoscale` choisit les échelles de façon automatique et appropriée,
- `Apply` a le même effet que la touche `enter` (pour valider une valeur sans fermer la fenêtre `cfg`),
- `OK` pour valider et fermer la fenêtre `cfg`,
- `Annuler` pour annuler (annule cequi n’a pas été validé par `enter` ou `Apply`) et fermer la fenêtre `cfg`.

## 3.5 Pour transformer un graphique en un fichier Latex

Voir aussi : 1.10.3 et 1.10.5 Il faut employer la commande `graph2tex("nom.tex")` (ou pour un graphique 3-d `graph3d2tex("nom.tex")`) pour transformer tous les graphiques réalisés en le fichier Latex `nom.tex`.
Ce fichier pourra être visualisé seul ou bien inséré dans un autre fichier Latex en otant l’en tête `\documentclass{article}...\begin{document}`, et le `\end{document}` de la fin et de rajouter `\usepackage{pstricks}` dans l’en-tête du fichier dans lequel on l’insère.
Attention Dans ce fichier tous les graphiques seront superposés : pour n’avoir qu’un seul graphique, il faut supprimer les niveaux contenant les autres graphiques avant de faire `graph2tex("nom.tex")`.

## 3.6 Graphe d’une matrice de transition probabiliste :
`graphe_probabiliste`

`graphe_probabiliste` a comme argument une matrice de transition probabiliste A ayant au plus 7x7 entrées. On peut rajouter en option la liste des positions des sommets du graph associé à la matrice A.
On tape :

`graphe_probabiliste([[1/2,1/3,1/12,1/12],[1/3,1/2,1/6,0], [0,0,1/2,1/2],[1/4,1/4,1/4,1/4]])`

On obtient :

On tape :

`graphe_probabiliste([[1/2,1/3,1/12,1/12],[1/3,1/2,1/6,0], [0,0,1/2,1/2],[1/4,1/4,1/4,1/4], ["Gare","Campus","Bibli","Centre"]])`

On obtient :

On tape :

`graphe_probabiliste([[1/2,1/3,1/12,1/12],[1/3,1/2,1/6,0], [0,0,1/2,1/2],[1/4,1/4,1/4,1/4]],[0,1,i,1/2+2/3*i])`

On obtient :

On tape :

`graphe_probabiliste([[1/2,1/3,1/12,1/12],[1/3,1/2,1/6,0], [0,0,1/2,1/2],[1/4,1/4,1/4,1/4], ["Gare","Campus","Bibli","Centre"]], [0,1,i,1/2+2/3*i])`

On obtient :

Si on ne met pas les "" autour d’un nom, si ce nom est le nom d’une variable qui contient une valeur c’est cette valeur que sera affichée sinon les noms s’afficheront sans "".
On peut aussi définir les points pour définir le graphe, par exemple, on tape dans un nieau de géométrie 2d :
:
`A:=point(0);`
`B:=point(1);`
`C:=point(i);`
`D:=point(2/2+2i/3);`
`graphe_probabiliste([[1/2,1/3,1/12,1/12],[1/3,1/2,1/6,0], [0,0,1/2,1/2],[1/4,1/4,1/4,1/4]],[A,B,C,D])`
On peut alors bouger les points `A,B,C,D` en mode pointeur.
On obtient après avoir bougé `D` :

## 3.7 Graphe d’une fonction : `plotfunc funcplot DrawFunc Graph`

- Graphe en 2-d
- Graphe en 3-d
- Graphe "3-d" avec les couleurs de l’arc en ciel
- Graphe en "4D"

## 3.8 Graphe 2-d pour compatibilité Maple : `plot graphe`

`plot(f(x),x)` trace la représentation graphique de y=f(x).
On tape :

`plot(x```^```2-2,x)`

On obtient :

`la représentation graphique de y=x```^```2-2`

On peut rajouter un paramètre pour indiquer le saut d’échantillonnage en x c’est à dire le pas en x que l’on veut utiliser pour faire le graphe. On tape :

`plot(x```^```2-2,xstep=1)`

ou encore

`plot(x```^```2-2,x,xstep=1)`

On obtient :

`une ligne polygonale qui est la représentation grossière de y=x```^```2-2`

On peut aussi spécifier le nombre de points d’échantillonage de la fonction à représenter en utilisant `nstep` à la place de `xstep`. Par exemple, on tape :

`plot(x```^```2-2,x=-2..3,nstep=30)`

## 3.9 Surface 3-d pour compatibilité Maple `plot3d graphe3d`

`plot3d` a trois arguments une fonction de deux variables (ou une expression de deux variables ou une liste de trois fonctions de deux variables ou encore une liste de trois expressions de deux variables) et les noms de ces deux variables.
`plot3d` trace la surface définie par le premier argument (soit z=f(x,y), soit x=f(u,v),y=g(u,v),z=h(u,v)).
On peut faire tourner ce graphique selon l’axe des `x`, l’axe des `y` ou l’axe des `z`. Pour cela, il faut cliquer avec la souris dans la fenêtre graphique en dehors du parallélépipéde servant à la représentation, puis faire bouger la souris (sans relacher son bouton) ou utiliser les touches `x`, `X`, `y`, `Y`, `z` et `Z`.
On tape :

`plot3d(x*y,x,y)`

On obtient :

La surface z=x*y

On tape :

`plot3d([v*cos(u),v*sin(u),v],u,v)`

On obtient :

Le cône x=v*cos(u),y=v*sin(u),z=v

Pour n’avoir qu’une portion de surface on peut indiquer l’intervalle de variation dans le deuxième et le troisème argument.
On tape :

`plot3d([v*cos(u),v*sin(u),v],u=0..pi,v=0..3)`

On obtient :

Une portion du cône x=v*cos(u),y=v*sin(u),z=v

## 3.10 Graphe d’une droite et les tangentes à un graphe

- Tracé d’une droite : `line droite`
- Tracé d’une droite horizontale en 2-d : `LineHorz`
- Tracé d’une droite verticale en 2-d : `LineVert`
- Tangente à un graphe en 2-d : `LineTan droite_tangente`
- Tangente en un point d’un graphe en 2-d : `tangent tangente`
- Tracé d’une droite donnée par un point et sa pente : `DrawSlp`
- Intersection d’un graphe en 2-d avec les axes

## 3.11 Représentation graphique d’inéquations à 2 variables : `plotinequation inequationplot`

`plotinequation([f1(x,y)<a1,..,fk(x,y)<ak],[x=x1..x2,y=y1..y2])` trace la surface du plan définie par les inéquations à 2 variables :

f1(x,y)<a1

...

fk(x,y)<ak

x1<x<x2

y1<y<y2

On tape :

`plotinequation(x```^```2-y```^```2<3, [x=-2..2,y=-2..2],xstep=0.1,ystep=0.1)`

On obtient :

`la partie contenant l’origine et délimitée par l’hyperbole x```^```2-y```^```2=3 est remplie`

On tape :

`plotinequation([x+y>3,x```^```2<y], [x-2..2,y=-1..10],xstep=0.2,ystep=0.2)`

On obtient :

`le morceau du plan définit par -2<x<2,y<10,x+y>3,y>x```^```2 est rempli`

Attention
Si on ne met pas les bornes pour x et y ce sont les valeurs de `X-,X+,Y-,Y+` mises dans la configuration générale du graphique (`Cfg``▸``Configuration graphique`) qui seront prises en compte.

- Aire sous une courbe : `area aire`

## 3.12 Représentation graphique de l’aire sous une courbe : `tracer_aire graphe_aire aire_graphe plotarea areaplot`

- Avec deux arguments, `aire_graphe` ou `plotarea` permet de représenter et d’afficher avec 3 digits l’aire sous une courbe.
  Ainsi, `plotarea(f(x),x=a..b)` trace l’aire sous la courbe y=f(x) pour a<x<b, c’est à dire la portion du plan définie par les inéquations a<x<b et selon le signe de f(x) 0<y<f(x) ou 0>y>f(x).
  On tape :
  `plotarea(sin(x),x=0..2*pi)`
  On obtient :
  `la portion de plan situé dans les deux arches de sin(x)`
- Avec quatre arguments, `aire_graphe` ou `plotarea` permet de représenter l’aire qui est caculée avec la méthode numérique choisie parmi :
  `trapezoid, left_rectangle, right_rectangle, middle_point` ou `trapeze, rectangle_gauche, rectangle_droit, point_milieu`.
  Ainsi, `plotarea(f(x),x=a..b,n,trapeze)` trace l’aire de n trapèzes : le troisième argument est un entier n, et le quatrième argument est le nom de la méthode numérique d’intégration lorsqu’on partage [a,b] en n parties égales.
  On tape :
  `plotarea(x```^```2,x=0..1,5,trapeze)`
  Ou on tape pour voir la courbe en rouge :
  `plotarea(x```^```2,x=0..1,5,trapeze); plot(x```^```2,x=0..1,affichage=rouge)`
  On obtient :
  `les 5 trapèzes qui sont utilisés dans la méthode dite des trapèzes, pour approcher une intégrale`
  On tape :
  `plotarea(x```^```2,x=0..1,5,point_milieu)`
  Ou on tape pour voir la courbe en rouge :
  `plotarea(x```^```2,x=0..1,5,point_milieu); plot(x```^```2,x=0..1,affichage=rouge)`
  On obtient :
  `les 5 rectangles qui sont utilisés dans la méthode dite du point milieu, pour approcher une intégrale`

Remarque 1 On peut aussi taper, pour n’avoir que la valeur de l’aire :

`plotarea(x```^```2,x=0..1,5,trapeze)[0,3];`

On obtient :

`0.34`

Remarque 2 Si on utilise `plotarea` avec le menu `Graphic->Courbes->plotarea` une boite de dialogue s’ouvre : vous entrez, l’expression de la fonction, le nom de la variable, les bornes de l’intervalle `xmin,xmax`, le pas `xstep` (on a alors `n=(xmax-xmin)/xstep`), la méthode d’intégration et aussi la couleur du dessin (on retrouve en effet le bouton `Attribut` en haut et à gauche de la boite de dialogue).

## 3.13 Lignes de niveaux : `plotcontour contourplot
DrwCtour`

`plotcontour(f(x,y),[x,y])` (ou `DrwCtour(f(x,y),[x,y])` ou
encore `contourplot(f(x,y),[x,y])`) trace les 11 lignes de niveaux z=−10, z=−8,.., z=0, z=2,.., z=10 de la surface définie par z=f(x,y).
On tape :

`plotcontour(x```^```2+y```^```2,[x=-3..3,y=-3..3],[1,2,3], affichage=[vert,rouge,noir]+[rempli$3])`

On obtient :

`le graphe des trois cercles x```^```2+y```^```2=n pour n=1,2,3; les zones comprises entre ces cercles sont remplies avec la couleur verte,rouge ou noire`

On tape :

`plotcontour(x```^```2-y```^```2,[x,y])`

On obtient :

`le graphe des 11 hyperboles x```^```2-y```^```2=n pour n=-10,-8,..10`

Pour visualiser la surface, on tape (`plotfunc(f(x,y),[x,y])` trace la représentation graphique de z=f(x,y), voir 3.7.2):

`plotfunc( x```^```2-y```^```2,[x,y])`

On obtient :

`Un graphique en 3-d représentant z=x```^```2+y```^```2`

On peut faire tourner ce graphique selon l’axe des `x`, l’axe des `y` ou l’axe des `z`. Pour cela, il faut cliquer avec la souris dans la fenêtre graphique en dehors du parallélépipéde servant à la représentation, puis faire bouger la souris (sans relacher son bouton) ou utiliser aux touches `x`, `X`, `y`, `Y`, `z` et `Z`.

## 3.14 Graphe d’une fonction par niveaux de couleurs : `plotdensity densityplot`

`plotdensity(f(x,y),[x,y])` ou encore `densityplot(f(x,y),[x,y])` trace le graphe de z=f(x,y) dans le plan en représentant z par une des couleurs de l’arc en ciel.
On tape :

`plotdensity(x```^```2-y```^```2,[x=-2..2,y=-2..2],xstep=0.1,ystep=0.1)`

On obtient :

`Un graphique en 2-d représentant pour chaque z, l’hyperbole définie par x```^```2-y```^```2=z par une couleur de l’arc en ciel`

On remarquera que l’on a l’echelle des couleurs en dessous du graphe.

## 3.15 Courbe implicite : `plotimplicit implicitplot`

`plotimplicit` ou `implicitplot` permet de tracer des courbes ou des surfaces définies de façon implicite par une expression. Pour que `Xcas` ne cherche pas à factoriser l’expression, la commande `plotimplicit` ou `implicitplot` peut être utilisée avec l’option `unfactored` ou `sans_factoriser` mise comme dernier paramètre, :

- avec `unfactored` l’expression ne sera pas modifiée,
- sans `unfactored` `Xcas` réduit l’expression au même dénominateur puis cherche à factoriser le numérateur.

- Courbe implicite en 2-d
- Surface implicite en 3-d

## 3.16 Courbe et surface en paramétrique : `plotparam paramplot DrawParm courbe_parametrique`

- Courbe 2-d en paramétrique
- Surface 3-d en paramétrique : `plotparam paramplot DrawParm courbe_parametrique`

## 3.17 Courbes de Bézier : `bezier`

Soient n+1 points Pj de contrôle (j=0..n) et L la séquence de ces points.
La courbe de Bézier ayant les points de la séquence `L` comme points de contrôle, a comme équation paramétrique :
∑j=0n comb(n,j)tj(1−t)n−j*L[j].
`bezier(L,plot)` renvoie le tracé de la courbe d’équation paramétrique : ∑j=0n comb(n,j)tj(1−t)n−j*L[j].
`parameq(bezier(L))` renvoie l’équation paramétrique de la courbe de Bézier ayant comme points de contrôle les points de la séquence `L`.
On tape :

`bezier(1,1+i,2+i,3-i,plot)`

On obtient :

`Le tracé de la courbe de Bézier ayant comme points de contrôle les points d’affixe 1,1+i,2+i,3-i`

On tape :

`parameq(bezier(1,1+i,2+i,3-i))`

On obtient :

`L’équation paramétrique de la courbe précédente`

On tape :

`bezier(point([0,0,0]),point([1,1,0]),point([0,1,1]),plot)`

On obtient :

`Le tracé de la courbe de Bézier ayant comme points de contrôle les points point([0,0,0]),point([1,1,0]),point([0,1,1])`

On tape :

`parameq(bezier(point([0,0,0]),point([1,1,0]),point([0,1,1])))`

On obtient :

`L’équation paramétrique de la courbe précédente`

## 3.18 Courbe en polaire : `plotpolar polarplot DrawPol courbe_polaire`

`plotpolar(f(t),t)` trace la représentation polaire de la courbe définie par : ρ=f(t).
On tape si dans la configuration du graphique `t` va de 0 à 10 :

`plotpolar(t,t)`

On obtient :

`La spirale` `ρ``=t est dessinée`

On peut rajouter un paramètre (`tstep=`) pour indiquer le saut d’échantillonnage en t c’est à dire le pas en t que l’on veut utiliser pour faire le graphe. On tape si dans la configuration du graphique `t` va de 0 à 10 :

`plotpolar(t,t,tstep=1)`

ou :

`plotpolar(t,t=0..10,tstep=1)`

On obtient :

`La spirale` `ρ``=t est dessinée grossièrement`

## 3.19 Tracé d’une suite récurrente : `plotseq seqplot graphe_suite`

`plotseq(f(x),a,n)` ou `plotseq(f(t),t=a,n)` permet de visualiser les n premiers termes d’une suite récurrente définie par :
u0=a, un=f(un−1)
On tape :

`plotseq(sqrt(1+x),3,5)`

On obtient :

`Le dessin de y=sqrt(1+x), de y=x et des 5 premiers termes de la suite u_0=3 et u_n=sqrt(1+u_(n-1))`

## 3.20 Le champ des tangentes : `plotfield fieldplot`

On peut tracer le champ des tangentes de léquation différentielle y′=f(t,y) ou du système déquations différentielles x′=u(x,y),y′=v(x,y) et on peut spécifier les plages de valeurs des paramètres.

- Soit f(t,y) une expression dependant de deux variables t et y, alors `plotfield(f(t,y),[t,y])` trace le champ des tangentes de l’équation différentielle y′=f(t,y) où y représente une variable réelle et t est représenté en abscisse,
- Soit V=[u(x,y),v(x,y)] est un vecteur 2-d de coordonnées deux expressions dépendant de 2 variables x,y mais indépendant du temps, alors `plotfield(V,[x,y])` trace le champ des tangentes du système [x′(t)=u(x,y),y′(t)=v(x,y)],
- Les plages de valeurs de t,y ou de x,y peuvent être spécifiées par `t=tmin..tmax`, `x=xmin..xmax`, `y=ymin..ymax` à la place du nom de variable seul.
- On peut spécifier le cadrage en mettant par exemple :
  `plotfield(f(t,y),[t=tmin..tmax,y=ymin..ymax])`
- On peut spécifier que le champ des tangentes soit, dans un repère orthonormé, de norme 1 avec l’option `normalize`. Sans l’option `normalize` le point de contact est l’origine du vecteur tangent et avec l’option `normalize` le point de contact se trouve au milieu des tangentes.
- On peut aussi spécifier la valeur des pas en t et en y avec `xstep=...` et `ystep=...`.

On tape :

`plotfield(4*sin(t*y),[t=0..2,y=-3..7])`

On obtient :

`Des segments de pente 4*sin(t*y) sont tracés en différents points. Ces segments représentent les vecteurs tangents dirigés selon les` `t` `croissants et dont l’origine est le point de contact`

On tape :

`plotfield(4*sin(t*y),[t=0..2,y=-3..7],normalize, xstep=0.7,ystep=0.7))`

On obtient :

`Des segments de longueur 1 et de pente 4*sin(t*y) qui représentent les tangentes au point situé en leur milieu. Ces points espacés de 0.7`

On tape :

`plotfield(5*[-y,x],[x=-1..1,y=-1..1])`

On obtient :

`Des vecteurs` `[-y,x]``sont tracés aux points` `(x,y)``. Ces vecteurs représentent des vecteurs tangents en leur origine aux courbes solutions du système` `x(t)′=-y,y(t)′=x``. Ils sont dirigés selon les` `t` `croissants.`

On tape :

`plotfield(5*[-y,x],[x=-1..1,y=-1..1],normalize)`

On obtient :

`Des segments de longueur 1 et de pente` `-y/x` `qui représentent les tangentes au point situé en leur milieu aux courbes solutions du système` `x(t)′=-y,y(t)′=x``.`

## 3.21 Tracé de solutions d’équation différentielle : `plotode odeplot`

On peut tracer les solutions de léquation différentielle y′=f(t,y) ou du système déquations différentielles x′=u(t,x,y),y′=v(t,x,y) et on peut spécifier les plages de valeurs des paramètres.

- `plotode(f(t,y),[t,y],[t0,y0])` trace en fonction du temps la solution y(t) de l’équation différentielle y′=f(t,y) passant par le point `(t0,y0)`, où f(t,y) désigne une expression dépendant de la variable de temps t et de la variable y.
- Par défaut, t varie dans les 2 directions. On peut spécifier la plage du temps par le paramètre optionnel `t=tmin..tmax`.
- Lorsque y=(X,Y) est un vecteur de longueur 2 et f à valeurs dans ℝ2, on peut également représenter dans l’espace (t,X,Y) ou dans le plan (X,Y) la solution d’une équation différentielle y′=f(t,y) c’est à dire [X′,Y′]=[f(t,X,Y)]. Pour cela, il suffit de remplacer y par le noms des variables X,Y et la valeur initiale par les deux valeurs initiales des variables au temps t0.

On tape :

`plotode(sin(t*y),[t,y],[0,1])`

On obtient :

Le graphe de la solution de y’=sin(t,y) passant par le point (0,1) est tracé

On tape :

`S:=odeplot([h-0.3*h*p, 0.3*h*p-p], [t,h,p],[0,0.3,0.7])`

On obtient le graphe dans l’espace de la solution de

[h,p]′=[h−0.3 h p, 0.3 h p−p] [h,p](0)=[0.3,0.7]

Pour avoir le graphe dans le plan, on ajoute l’option `plan` ou `plane`

`S:=odeplot([h-0.3*h*p, 0.3*h*p-p], [t,h,p],[0,0.3,0.7],plan)`

Pour visualiser les valeurs de la solution, se reporter à la section 4.3.6 On tape :

`plotfield(5*[-y,x],[x=-1..1,y=-1..1],normalize)`
`plotode(5*[-y,x],[t=0..1,x,y],[0,0.3,0.7],tstep=0.05,plan)`

On obtient :

Le graphe de la solution de x’=-y,y’=x pour t=0 passant par le point (0.3,0.7) est tracé

Exemple On trace 4 solutions du système d’équations différentielles dépendant de 2 paramètre a et b :
x′=−y+b
y′−1+(x−a)2+(y−b)2
Les conditions initiales sont :
pour t=0 x0=a+1,y0=b+0.5
pour t=0 x0=a+1,y0=b+0.1
pour t=0 x0=a+0.827,y0=b+0.827
pour t=0 x0=a−1.1,y0=b+
On tape :

    avril(a,b):={
    local L;
    L:=NULL;
    L:=L,affichage(plotode([-y+b,-1+(x-a)^2+(y-b)^2],[t=-3..3,x,y],[0,a+1,b+0.5],
    plan),94+epaisseur_ligne_8);
    L:=L,affichage(plotode([-y+b,-1+(x-a)^2+(y-b)^2], [t=-3..3,x,y],[0,a+1,b+0.1],
    plan),4+epaisseur_ligne_8);
    L:=L,affichage(plotode([-y+b,-1+(x-a)^2+(y-b)^2],[t=-6..3.65,x,y],
    [0,a+0.827,b+0.827],plan),1+epaisseur_ligne_4);
    L:=L,affichage(plotode([-y+b,-1+(x-a)^2+(y-b)^2], [t=-1.3..1.3,x,y],[0,a-1.1,b],
    plan),1+epaisseur_ligne_4);
    return L;
    }:;

Puis on tape par exemple :

    affichage(cercle(0,5,3*pi/4,4*pi/3),4+epaisseur_ligne_4);
    affichage(cercle(0,5,5*pi/3,2*pi+pi/4),4+epaisseur_ligne_4);
    affichage(segment(5*exp(-i*pi/3),5*exp(-2*i*pi/3)),4+epaisseur_ligne_4);
    avril(-1.4,-1);

## 3.22 Tracé interactif des solutions d’équation différentielle : `interactive_plotode interactive_odeplot`

`interactive_plotode(f(t,y),[t,y])` trace le champ des tangentes de l’équation différentielle y′=f(t,y) dans l’écran `DispG` et
`interactive_plotode(f(t,y),[t=a...b,y])` trace le champ des tangentes pour `t` allant de `a` à `b` de l’équation différentielle y′=f(t,y) dans l’écran `DispG`.
Lorsqu’on clique sur un point, on obtient le tracé de la solution de y′=f(t,y) passant par ce point.
On peut faire autant de tracés que l’on veut (un tracé se fait chaque fois que l’on clique sur un point avec la souris). On termine les tracés en tapant sur la touche `Esc` ou `Echap`.
On peut aussi spécifier, comme dans `plotfield`, que le champ des tangentes soit de norme 1 avec l’option `normalize`. Attention Si on ne veut pas de superposition avec les dessins faits auparavant, il ne faut pas oublier de taper `ClrGraph`, avant d’utiliser `interactive_plotode`, pour effacer l’écran `DispG`. On tape :

`interactive_plotode(-y+x+1,[x=-4..4,y])`

On obtient :

`Le champ des tangentes est tracé ainsi que la solution de y’=sin(t,y) passant par le point qui a été cliqué avec la souris`

IL se trouve que l’on sait résoudre cette équation : les solutions sont `y(x)=C*exp(-x)+x` et on peut donc vérifier...
On tape :

`interactive_plotode(sin(t*y),[t=-4..4,y])`

On obtient :

`Le champ des tangentes est tracé ainsi que la solution de y’=sin(t,y) passant par le point qui a été cliqué avec la souris`

On tape :

`interactive_plotode(sin(t*y),[t=-4..4,y],normalize)`

On obtient :

`Le tracé du champ des tangentes avec une norme égale à 1 et le graphe de la solution de y’=sin(t,y) passant par le point qui a été cliqué avec la souris`

## 3.23 Tracé interactif des solutions d’équation différentielle dans un niveau de géométrie : `plotfield fieldplot` et `plotode odeplot`

Dans un niveau de géométrie, le menu `Graphe->Slopefield/Ode(2d)` ouvre une boite de dialogues qui demande :

- si on veut que soit tracé le champ des tangentes,
- si on veut que ces tangentes soient normalisées dans un repère orthonormé,
- la valeur de y′,
- le nom des variables,
- les différentes valeurs de cadrage et de pas.

Lorsqu’on appuie sur `OK`, l’écran de géométrie est en mode `plotode` et si l’on a coché `Field`, le champ des tangentes apparait et la commande correspondante s’inscrit au niveau suivant de l’écran de géométrie, par exemple :

`plotfield(sin(t*y),[t=-5.7..5.7,y=-5.7..5.7],normalize, xstep=0.7,ystep=0.7)`

Si on a coché `Field` et `||=1`, et que y′=sin(t*y).
Ensuite, il suffit de cliquer en différents points de lécran de géométrie pour avoir les tracés des solutions passant par ces points et les commandes correspondantes stockées dans une variable, par exemple :

`A:=plotode(sin(t*y),[t,y],point(-2.863,1.327),plan)`

Pour terminer, il suffit de changer de mode, par exemple passer en mode `Repere`. Il faut noter que le mode `plotode` n’est pas accessible directement : on doit réouvrir la boite de dialogue avec le menu `Graphe->Slopefield/Ode(2d)`.
Si on trouve que le champ des tangentes est génant, on peut le supprimer facilement en supprimant le niveau correspondant à sa commande.

## 3.24 Faire une animation en 2-d, 3-d ou "4D"

`Xcas` permet d’animer des graphes en 2-d, 3-d ou "4D" en calculant une fois pour toute une suite d’objets graphiques et en affichant chaque objet de la sequence en boucle.

- Le temps d’affichage d’un objet peut se régler avec `animate` dans `cfg` (plus le nombre est petit et plus le temps d’affichage est petit i.e la vitesse d’animation est grande).
- Si on met `animate` à `0`, à chaque clic de la souris dans l’écran graphique, on a un affichage.
- Le nombre d’images peut se régler avec un argument de la forme `frames=` ou `trames=` .
- On peut interrompre ou relancer l’affichage en boucle en cliquant sur le bouton ▸ ∣ (à droite de `M`).

- Animation d’un graphe 2-d :`animate`
- Animation d’un graphe 3-d :`animate3d`
- Animation d’une séquence d’objets graphiques :`animation`

# Chapitre 4 Calcul numérique

## 4.1 Codage des réels et des décimaux

Voici comment sont codées les nombres réels lorsque le nombre de chiffres significatifs demandés est inférieur ou égal à 16 (par exemple `Digits:=15`).
On écrit d, un nombre réel ou décimal, sous la forme :
d=2α(1+m) avec 0<m<1 et −210<α≥ 210.
On utilse 64 bits pour représenter ce nombre :

- le premier bit pour le signe de d (0 pour ’+’ et 1 pour ’-’),
- les 11 bits suivant sont pour codés l’exposant (on code α+210−1),
- les 52 derniers sont pour codés la mantisse m.

Codage de 2α :
α=0 est codé 011 1111 1111
α=1 est codé 100 0000 0000
α=4 est codé 100 0000 0011
α=5 est codé 100 0000 0100
α=−1 est codé 011 1111 1110
α=−4 est codé 011 1111 1011
α=−5 est codé 011 1111 1010
α=210 est codé 111 1111 1111
α=2−10−1 est codé 000 0000 0000.

Remarque
2−52=0.2220446049250313e−15

- Un exemple : codage de 3.1 et de 3
- Différence de codage entre (3.1-3) et 0.1

## 4.2 Évaluation des réels : `evalf approx` et `Digits`

On peut évaluer une expression numérique grâce à la commande `evalf` ou `approx`.
En mettant un deuxième argument `n` à `evalf` (ou `approx`), on peut spécifier le nombre de chiffres significatifs de l’approximation.
Mettre ce deuxième argument a l’avantage de ne pas modifier la valeur de `Digits` (i.e. la case `Chiffres` de la configuration du CAS).
Attention l’affichage tiendra compte de la valeur `p` de `Digits` si `p<15` et si le deuxième argument `n` de `evalf` est supérieur à `p` mais les calculs seront faits avec `n` chiffres significatifs.
Exemple 1 Avec `Digits:=12`.
On tape : `a:=1234+1/7`
On obtient : `8639/7`
On tape : `b:=evalf(a,9)`
On obtient : `1234.14286` (9 chiffres significatifs avec un arrondi)
On tape : `c:=evalf(a,16)`
On obtient : `0.1234142857142857e4` (16 chiffres significatifs)
On tape : `d:=evalf(a,21)`
On obtient : `0.123414285714285714286e4` (21 chiffres significatifs)
On tape : `7*a,7*b,7*c,7*d`
On obtient :
`8639,8639.00002,0.8639000000000001e4,0.863900000000000000000e4`
Mais avec `Digits:=7`.
On tape : `a:=1234+1/7`
On obtient : `8639/7`
On tape : `b:=evalf(a,9)`
On obtient : `1234.143` (à l’affichage juste 7 chiffres significatifs)
On tape : `b-1234`
On obtient : `0.14286` (ce qui prouve que `b` vaut 1234.14286)
On tape : `b-1234.14286`
On obtient : `0.0` (ce qui prouve encore que `b` vaut 1234.14286)
On tape : `c:=evalf(a,16)`
On obtient : `0.1234142857142857e4`
On tape : `d:=evalf(a,21)`
On obtient : `0.123414285714285714286e4`
Exemple 2 Avec `Digits:=7` ou si dans la configuration du `cas` (menu `Cfg`) on a choisit `Chiffres=7`.
On tape :

`evalf(sqrt(2))`

On obtient :

`1.414214`

On tape :

`evalf(sqrt(2),3)`

On obtient :

`1.41`

On tape :

`evalf(sqrt(2),3)-1.414214`

On obtient :

`-0.000214`

ce qui montre que `evalf(sqrt(2),3)` est le nombre `1.414`
On tape :

`evalf(sqrt(2),10)`

On obtient :

`1.414214`

On obtient toujours un affichage avec 7 chiffres significatifs si `n` est supérieur ou égal à 7 :

`1.414214`

On tape :

`evalf(sqrt(2))-1.414214`

On obtient toujours lorsque `Digits:=7`) :

`-4.376269e-07`

ce qui montre que `Xcas` fait les calculs avec 14 chiffres significatifs.
Par contre, dés que le 2-ième argument `n` de `evalf` est strictement supérieur à 14 l’affichage se fait avec `n` chiffres significatifs.
On tape :

`evalf(sqrt(2),15),evalf(sqrt(2),16)`

On obtient :

`1.41421356237310,1.414213562373095`

On tape :

`evalf(sqrt(2),20)`

On obtient :

`1.4142135623730950488`

et cela n’a pas modifié la configuration du CAS.
On peut changer le nombre de chiffres significatifs avec la variable `DIGITS` ou `Digits`.
On tape :

`DIGITS:=20`

Cela a pour effet de changer `Configuration du CAS` et de mettre 20 dans la case `Chiffres`.

`evalf(sqrt(2))`

On obtient 20 chiffres significatifs :

`1.4142135623730950488`

Notation : Le nombre réel 10−4 est un nombre exact alors que 1e−4 est un nombre approché.
On tape :

`evalf(10```^```-5)`

On obtient :

`1e-05`

On tape :

`evalf(10```^```15)`

On obtient :

`1e+15`

On tape :

`evalf(sqrt(2))*10```^```-5`

On obtient si `Digits:=20`:

`0.14142135623730950488e-4`

Remarques On tape :

`DIGITS:=20`
`a:=evalf(sqrt(2))`

On obtient :

`1.4142135623730950488`

On tape :

`evalf(a,10)`

On obtient :

`1.4142135624`

On tape :

`evalf(sqrt(2),10)`

On obtient :

`1.414213562373`

On tape :

`DIGITS:=10`
`b:=evalf(sqrt(2))`

On obtient :

`1.414213562`

On tape :

`evalf(b,10)`

On obtient :

`1.414213562`

On tape :

`evalf(sqrt(2),10)`

On obtient :

`1.414213562`

Attention
Si vous définissez une fonction F(a) qui renvoie une séquence formée par un nombre fractionnaire p/q et un entier n alors `evalf(F(a))` renvéra une approximation de p/q avec n chiffres significatifs ! Il faut donc écrire `evalf([F(a)])` pour avoir une liste constituée d’une approximation de p/q et de n.

## 4.3 Quelques fonctions

- Solution approchée d’une équation : `newton`
- Calcul approché du nombre dérivé : `nDeriv`
- Calcul approché d’intègrales avec la méthode de Romberg : `romberg nInt`
- Calcul approché d’intègrales par une quadrature de Gauss adaptative à 15 points : `gaussquad`
- Solution approchée de y’=f(t,y) : `odesolve`
- Solution approchée du système v’=f(t,v) : `odesolve`

## 4.4 Résolution numérique d’équations avec `nSolve`

`nSolve` permet de résoudre numériquement des équations non polynomiales : f(x)=0 pour x ∈ ]a,b[ (`nSolve` est une commande compatible `ti`).
Les paramètres de `nSsolve` sont `f(x)=0`, `x`, ou `x=x0` où `x0` est un point de ]a,b[.
On tape :

`nSolve((cos(x))=x,x)`

On obtient soit :

`0.739085133215`

soit une solution complexe :

`-9.10998745394-2.95017086176*i`

En effet, si on ne précise pas la valeur qui démarre l’itération, `Xcas` démarre l’itération avec une valeur aléatoire réelle ou complexe.
On vérifie :
`cos(-9.10998745394-2.95017086176*i)=-9.10998745394-2.95017086176*i`
On tape :

`nSolve((cos(x))=x,x=0)`

On obtient :

`0.739085133215`

On tape :

`nSolve((cos(x))=x,x=-9-3*i))`

On obtient :

`-9.10998745394-2.9501708617*i`

## 4.5 Résolution d’équations avec `fsolve`

`fsolve` permet de résoudre numériquement des équations non polynomiales : f(x)=0 pour x ∈ ]a,b[.
`fsolve` a comme arguments f(x)=0 et x=a..b ou f(x)=0, x et a..b.
`fsolve` donnera aussi les racines numériques complexes si dans la configuration du CAS on a coché `Complexe`. Si `Complexe` est décoché il faut utiliser `cfsolve` pour avoir les racines numériques complexes.
On tape :

`fsolve(sin(x)=0,x=0..10)`

Ou on tape :

`fsolve(sin(x)=0,x,0..10)`

On obtient :

`[0.0,3.14159265359,6.28318530718,9.42477796077]`

On peut rajouter en dernier argument la valeur de l’échantillonage en spécifiant la valeur de `xstep` ou la valeur de `nstep` (nombre de découpages de l’intervalle ]a,b[).
On tape :

`fsolve(sin(x)=0,x=0..10,xstep=1 )`

On obtient :

`[0.0,3.14159265359,6.28318530718,9.42477796077]`

On tape :

`fsolve(sin(x)=0,x=0..10,nstep=10)`

On obtient :

`[0.0,3.14159265359,6.28318530718,9.42477796077]`

On peut utiliser différents algorithmes pour résoudre numériquement f(x)=0 pour x ∈ ]a,b[.
Si on veut indiquer la mèthode, les paramètres de `fsolve` sont `f(x)=0`, `x`, `a..b` ou selon les méthodes un point `x0` de ]a,b[ et le nom de la méthode utilisée.
Les différentes méthodes sont détaillées ci dessous.

- `fsolve` avec l’option `bisection_solver`
- `fsolve` avec l’option `brent_solver`
- `fsolve` avec l’option `falsepos_solver`
- `fsolve` avec l’option `newton_solver`
- `fsolve` avec l’option `secant_solver`
- `fsolve` avec l’option `steffenson_solver`

## 4.6 Résolution des systèmes d’équations avec `fsolve`

On propose six méthodes pour résoudre numériquement des systèmes d’équations de la forme f(x)=0.
Remarque
`fsolve` donnera aussi les racines numériques complexes si dans la configuration du CAS on a coché `Complexe`. Si `Complexe` est décoché il faut utiliser `cfsolve` pour avoir les racines numériques complexes.
Trois méthodes utilisent la matrice jacobienne f′(x) et leurs noms se terminent par `j_solver`.
Les trois autres méthodes utilisent des méthodes d’approximation de f′(x) et utilisent uniquement f.
Les six méthodes utilisent une itération de type Newton :
xn+1=xn−f′(xn)−1*f(xn).
Les quatre méthodes `hybrid*_solver` utilisent aussi une méthode de descente de gradient lorsque l’itération Newtonienne donne un pas trop grand.
La longueur du pas est calculé sans facteur d’échelle pour `hybrid_solver` et `hybridj_solver` ou avec facteur d’echelle (calculé à partir de f′(xn)) pour `hybrids_solver` et `hybridsj_solver`

- `fsolve` avec l’option `dnewton_solver`
- `fsolve` avec l’option `hybrid_solver`
- `fsolve` avec l’option `hybrids_solver`
- `fsolve` avec l’option `newtonj_solver`
- `fsolve` avec l’option `hybridj_solver`
- `fsolve` avec l’option `hybridsj_solver`

## 4.7 Résolution sur ℂ d’équations ou de systèmes `cfsolve`

`cfsolve` effectue la résolution numérique sur ℂ d’une équation ou d’un système, même si `Complexe` est décoché dans la configuration du CAS.
`fsolve` donne aussi les racines numériques complexes d’une équation ou d’un système si dans la configuration du CAS on a coché `Complexe`.
On tape :

`cfsolve(sin(x)=2)`

On obtient :

`[1.57079632679-1.31695789692*i,1.57079632679+1.31695789692*i]`

On tape :

`cfsolve(cos(x)=2)`

On obtient :

`[1.31695789692*i,-1.31695789692*i]`

On tape :

`cfsolve([x```^```2+y+2,x+y```^```2+2],[x,y])`

On obtient :

`[[0.500000000000014794+1.65831239517770439*i, 0.500000000000000000-1.65831239517771331*i], [0.500000000000014794-1.65831239517770439*i, 0.500000000000000000+1.65831239517771331*i], [-0.499999999999994291-1.32287565553229745*i,-0.499999999999999999-1.32287565553230177*i],[-0.499999999999994291+1.32287565553229745*i,-0.499999999999999999+1.32287565553230177*i]]`

## 4.8 Racines numériques d’un polynôme : `proot`

`proot` a comme argument un polynôme ou le vecteur de composantes les coefficients d’un polynôme (par ordre décroissant).
`proot` renvoie un vecteur dont les composantes sont les racines numériques non multiples du polynôme.
On peut mettre en option un entier n pour préciser le nombre n de chiffres significatifs de la réponse. Pour chercher les racines numériques de P(x)=x3+1, on tape :

`proot([1,0,0,1])`

ou on tape :

`proot(x```^```3+1)`

On obtient :

`[0.5+0.866025403784*i,0.5-0.866025403784*i,-1.0]`

On tape pour avoir 20 chiffres significatifs :

`proot([1,0,0,1],20)`

ou on tape :

`proot(x```^```3+1)`

On obtient :

`[-1.000000000000000000,
0.5000000000000000000-0.8660254037844386468*i,
0.5000000000000000000+0.8660254037844386468*i]`

On tape pour avoir les racines numériques de x2−3 :

`proot([1,0,-3])`

ou :

`proot(x```^```2-3)`

On obtient :

`[1.73205080757,-1.73205080757]`

On tape pour avoir les racines numériques de P(x)=x2−3 avec 20 chiffres significatifs :

`proot([1,0,-3],20)`

ou on tape :

`proot(x```^```2-3,20)`

On obtient :

`[-1.732050807568877294,1.732050807568877294]`

On tape pour avoir les racines numériques de P(x)=x10−15*x8+90*x6−270*x4+405*x2−243 :

`proot([1,0,-15,0,90,0,-270,0,405,0,-243])`

ou on tape :

`proot(x```^```10-15*x```^```8+90*x```^```6-270*x```^```4+405*x```^```2-243)`

On obtient :

`[1.73205080757,-1.73205080757,1.73205080757,-1.73205080757, 1.73205080757,-1.73205080757,1.73205080757,-1.73205080757, 1.73205080757,-1.73205080757]`

## 4.9 Factorisation numérique d’une matrice : `cholesky qr lu svd`

Pour avoir les factorisations numériques de :

- Cholesky,
- QR,
- LU,
- svd,

d’une matrice, on se repotera à la section 6.57.

# Chapitre 5 Les unités et les constantes physiques

Les constantes physiques (sous-menu `Constante`), les fonctions de conversion (sous-menu `Unit_convert`), les préfixes (sous-menu `Unit_prefix`) et les unités classées par thème, se trouvent dans le menu `Phys`.

## 5.1 Les unités

- La notation des unités
- Les calculs avec des unités
- La conversion d’un objet-unité dans une autre unité : `convert convertir =>`
- Les changements d’unités en unités MKSA : `mksa`
- Les conversions entre degré Célsius et degré Fahrenheit : `Celsius2Fahrenheit et Fahrenheit2Celsius`
- Mise en facteur d’une unité : `ufactor`
- Simplifier une unité : `usimplify`
- Les préfixes disponibles pour les noms d’unités

## 5.2 Les constantes physiques

- La notation des constantes physiques
- Bibliothèque des constantes physiques

# Chapitre 6 Les fonctions de calcul formel

## 6.1 Les constantes symboliques : `e pi infinity inf i euler_gamma`

`e` ou `%e` désigne le nombre exp(1);
`pi` ou `%pi` désigne le nombre π.
`infinity` désigne ∞.
`+infinity` ou `inf` désigne +∞.
`-infinity` ou `-inf` désigne −∞.
`i` ou `%i` désigne le nombre complexe i.
`euler_gamma` désigne la constante d’Euler. On a :
`euler_gamma=limit(sum(1/k,k,1,n)-ln(n),n,+infinity)=`γ.

## 6.2 Les booléens

- Les valeurs d’un booléen : `true false`
- Les tests : `==, !=, >, >=, <, <=`
- Les opérateurs booléens : `or xor and not`
- Transformer une expression en liste : `exp2list`

## 6.3 Évaluation des booléens : `evalb`

On peut évaluer une expression booléenne grâce à la commande `evalb` cette commande sert surtout pour la compatibilité Maple car en `Xcas`, les booléens sont toujours évalués.
On tape :

`evalb(sqrt(2)>1.41)`

Ou on tape :

`sqrt(2)>1.41`

On obtient :

`1`

On tape :

`evalb(sqrt(2)>1.42)`

Ou on tape :

`sqrt(2)>1.42`

On obtient :

`0`

## 6.4 Les opérateurs bit à bit

- Les opérateurs `bitor, bitxor, bitand`
- Distance de Hamming bit à bit : `hamdist`

## 6.5 Les chaînes de caractères

- Écriture d’une chaîne ou d’un caractère : `"`
- Écriture du caractère "retour à la ligne" : `"\n"`
- Longueur d’une chaîne : `size length`
- Début, milieu et fin d’une chaîne : `head mid tail`
- Partie droite et gauche d’une chaîne : `droit ou right, gauche ou left`
- Concaténation d’une suite de mots : `cumSum`
- Le code ASCII d’un caractère : `ord`
- Le code ASCII d’une chaîne : `asc`
- La chaîne associée à une suite d’ASCII : `char`
- Repérer un caractère dans une chaîne : `inString`
- Concaténer des objets en une chaîne : `cat`
- Concaténer des objets en une chaîne : `+`
- Pour concaténer des nombres et des chaînes : `cat +`
- Pour transformer un nombre réel ou entier en une chaîne : `string`
- Pour transformer un nombre réel en une chaîne : `format`
- Pour transformer une chaîne en un nombre ou en une commande : `expr`

## 6.6 Écriture en base b d’un entier

- Transformer un entier en la liste des coefficients de son écriture en base b : `convert convertir`
- Transformer la liste des coefficients d’ une écriture en base b en un entier : `convert convertir`

## 6.7 Les entiers (et les entiers de Gauss)

Dans tout ce paragraphe, on peut utiliser des entiers de Gauss (nombres complexes de la forme a+i*b avec a et b dans ℤ), à la place des entiers dans les différentes fonctions.

- La factorielle : `factorial`
- Le PGCD : `gcd igcd`
- Le PGCD : `Gcd`
- Le PGCD d’une liste d’entiers : `lgcd`
- Le PPCM : `lcm`
- Factoriser un entier : `ifactor factoriser_entier`
- Liste des facteurs d’un entier : `facteurs_premiers ifactors`
- Matrice des facteurs d’un entier : `maple_ifactors`
- Liste des diviseurs d’un entier : `idivis divisors`
- Quotient entier infixé de la division euclidienne : `div`
- Quotient entier de la division euclidienne : `iquo intDiv`
- Reste entier de la division euclidienne : `irem remain smod mods mod %`
- Le quotient et le reste de la division euclidienne : `iquorem`
- Test de parité : `even est_pair`
- Test de non parité : `odd est_impair`
- Test de pseudo-primalité : `is_pseudoprime`
- Test de primalité : `is_prime isprime isPrime`
- Nombre pseudo-premier : `nprimes`
- N-ième nombre pseudo-premier : `ithprime`
- Nombre pseudo-premier après `n` : `nextprime`
- Nombre pseudo-premier avant `n` : `prevprime`
- Le `n`-ième nombre premier : `ithprime`
- Identité de Bézout : `iegcd igcdex bezout_entiers`
- Résolution de au+bv=c dans ℤ : `iabcuv`
- Restes chinois : `ichinrem, ichrem`
- Reste chinois pour des polynômes connus modulo plusieurs entiers : `ichinrem, ichrem`
- Reste chinois pour des listes d’entiers : `chrem`
- Résolution de a2+b2=p dans ℤ : `pa2b2`
- Indicatrice d’Euler : `euler Phi`
- Symbole de Legendre : `legendre_symbol`
- Symbole de Jacobi : `jacobi_symbol`

## 6.8 Analyse combinatoire

- La factorielle : `factorial !`
- Les coefficients binomiaux : `comb nCr`
- Les arrangements : `perm nPr`
- Les nombres entiers aléatoires : `rand alea hasard`

## 6.9 Les rationnels

- Transformer un nombre décimal en rationnel : `exact
  float2rational`
- Partie entière et fractionnaire : `propfrac propFrac`
- Numérateur d’une fraction après simplification : `numer`, `getNum`
- Dénominateur d’une fraction après simplification : `denom getDenom`
- Numérateur et dénominateur d’une fraction : `f2nd fxnd`
- Simplification d’un couple : `simp2`
- Développement en fraction continue d’un réel : `dfc`
- Transformer une fraction continue en un réel : `dfc2f`
- Le nième nombre de Bernoulli : `bernoulli`
- Le polynôme de Bernoulli : `bernoulli`
- Accès aux fonctions de PARI/GP: commande `pari`

## 6.10 Les réels

- Évaluer un réel et nombre de digits : `evalf` et `Digits`, `DIGITS`)
- Les fonctions infixées de base sur les réels : `+,-,*,/,^`
- Les fonctions prefixées de base sur les réels : `rdiv`
- La fonction racine n-ième : `root`
- La fonction exponentielle integrale Ei : `Ei`
- La fonction logarithme integral Li : `Li`
- La fonction cosinus integral Ci : `Ci`
- La fonction sinus integral Si : `Si`
- La fonction de Heaviside : `Heaviside`
- La distribution de Dirac : `Dirac`
- La fonction erf : `erf`
- La fonction erfc : `erfc`
- La fonction Γ : `Gamma`
- La fonction γ supérieure : `ugamma`
- La fonction γ incomplète : `igamma`
- La fonction β : `Beta`
- Les derivées de la fonction DiGamma : `Psi`
- La fonction ζ : `Zeta`
- Les fonctions de Airy : `Airy_Ai` et `Airy_Bi`

## 6.11 Les permutations

Une permutation p de longueur n est une bijection de [0..n−1] sur [0..n−1] et est représentée par la liste : [p(0),p(1),p(2)...p(n−1)].
Par exemple, la permutation p représentée par [1,3,2,0] est l’application de [0,1,2,3] sur [0,1,2,3] définie par : p(0)=1, p(1)=3, p(2)=2, p(3)=0.
Un cycle c d’ordre p est représenté par la liste [(a0,...,ap−1)] (0≤ p≤ n−1) et c’est une permutation telle que :
c(ai)=ai+1 pour (i=0..p−2), c(ap−1)=a0 et c(ai)=ai (i=p+1..n).
Un cycle c est représenté par la liste et une décomposition en cycles par une liste de listes.
Par exemple, le cycle c représenté par la liste [3,2,1] est la permutation c définie par c(3)=2, c(2)=1, c(1)=3, c(0)=0 (qui est représenté en tant que permutation par la liste [0,3,1,2]).

- Permutation aléatoire : `randperm`
- Permutation précédente : `prevperm`
- Permutation suivante : `nextperm`
- Décomposition en cycles : `permu2cycles`
- Produit de cycles : `cycles2permu`
- Transformer un cycle en permutation : `cycle2perm`
- Transformer une permutation en une matrice : `permu2mat`
- Reconnaitre une permutation : `is_permu`
- Reconnaitre un cycle : `is_cycle`
- Composition de deux permutations : `p1op2`
- Produit d’un cycle et d’une permutation : `c1op2`
- Produit d’une permutation et d’un cycle : `p1oc2`
- Produit de deux cycles : `c1oc2`
- Signature d’une permutation : `signature`
- Inverse d’une permutation : `perminv`
- Inverse d’un cycle : `cycleinv`
- Ordre d’une permutation : `permuorder`
- Groupe engendré par deux permutations : `groupermu`

## 6.12 Les complexes

Vous trouverez dans le menu `Math (Cmplx)` les fonctions ayant comme paramètre une expression à valeur complexe.
Remarque
Les nombres complexes sont utilisés pour représenter un point sur l’écran graphique : par exemple, le graphe de y=f(x) est l’ensemble des points x+i*f(x) pour x variant entre `WX-` et `WX+` (`WX-` et `WX+` sont initialisés avec le menu `Cfg``▸``Configuration graphique`).

- Les fonctions de base sur les complexes : `+,-,*,/,^`
- La partie réelle d’un nombre complexe : `re real`
- La partie imaginaire d’un nombre complexe : `im imag`
- Écriture des complexes sous la forme `re(z)+i*im(z)` : `evalc`
- Le module d’un nombre complexe : `abs`
- L’argument d’un nombre complexe : `arg`
- Le nombre complexe normalisé : `normalize unitV`
- Le nombre complexe conjugué : `conj`
- Multiplier par le complexe conjugué : `mult_c_conjugate multiplier_conjugue_complexe`
- Barycentre de complexes : `barycenter barycentre`

## 6.13 Les nombres algébriques

- Définition
- Polynôme minimal d’un nombre algébrique : `pmin`

## 6.14 Les expressions algébriques

- Qu’est-ce qune expression
- Pour évaluer une expression : `eval`
- Pour changer le niveau dévaluation : `eval_level`
- Pour évaluer une expression en mode Maple : `evala`
- Pour ne pas évaluer une expression : `quote hold ou ’`
- Pour forcer à évaluer une expression : `unquote`
- Distributivité : `expand fdistrib developper`
- Forme canonique : `canonical_form`
- Multiplier par la quantité conjuguée : `mult_conjugate multiplier_conjugue`
- Séparation des variables : `split`
- Factorisation : `factor factoriser`
- Factorisation dans ℂ : `cFactor factoriser_sur_C cfactor`
- Zéros d’une expression : `zeros`
- Zéros complexe d’une expression : `cZeros`
- Regrouper et simplifier : `regrouper regroup`
- Développer et simplifier : `normal`
- Simplifier : `simplify simplifier`
- Pour réécrire les résultats selon son choix : `autosimplify`
- Simplifier à l’aide de fractions rationnelles : `ratnormal`
- Substituer une valeur à une variable : `|`
- Substituer une valeur à une variable : `subst substituer`
- Pour substituer plus simplement une valeur à une variable dans une expression : `()`
- Substituer une valeur à une variable (compatibilité Maple et Mupad) : `subs`
- Substituer dans une expression, une expression algébrique par une variable : `algsubs`
- Éliminer une (ou des) variable(s) dans une liste d’équations : `eliminate`
- Évaluer une primitive : `preval`
- Sous-expression d’une expression : `part`

## 6.15 Valeurs de un

- Tableau de valeurs des termes d’une suite : `tablefunc table_fonction`
- Valeurs d’une suite récurrente ou d’un système de suites récurrentes : `seqsolve`
- Valeurs d’une suite récurrente ou d’un système de suites récurrentes : `rsolve`
- Tableau de valeurs et graphe d’une suite récurrente : `tableseq table_suite` et `plotseq graphe_suite`

## 6.16 Les fonctions infixées ou opérateur

Un opérateur est une fonction infixée.

- Les opérateurs usuels :`+, -, *, /, ^`
- Les autres opérateurs de `Xcas`
- Définition d’un opérateur: `user_operator`

## 6.17 Les fonctions et les expressions de variables symboliques

- Différence entre fonction et expression
- Transformer une expression en une fonction : `unapply`
- Sommet et feuille d’une expression : `sommet feuille op`

## 6.18 Les fonctions

- Les fonctions ayant plusieurs usages
  - `+` et `-`
  - `*`
  - `/`
- Les fonctions usuelles
- Définition d’une fonction
  - Définition d’une fonction de ℝp dans ℝ
  - Définition d’une fonction de ℝp dans ℝq
  - Définition d’une fonction de ℝp−1 dans ℝq à partir d’une fonction de ℝp dans ℝq
- Composition de fonctions : `@`
- Puissance n-ième de composition d’une fonction : `@@`
- Definir une fonction avec l’historique : `as_function_of`

## 6.19 Dérivation

- Gńéralités
- Calcul du taux d’accroissement : `taux_accroissement`
- Fonction dérivée d’une fonction : `function_diff
  fonction_derivee`
- Derivées et derivées partielles d’une expression et derivées d’une fonction : `diff derive deriver ’`
  - Généralités
  - Derivée et fonction derivée
  - Derivées et derivées partielles d’ordre 1 : `diff derive deriver ’`
  - Derivée et derivée partielle d’ordre n : `diff derive deriver`

## 6.20 Intégration

- Primitive et intégrale définie : `integrate Int integrer int integration`
- Primitive et intégrale définie : `risch`
- Somme indicée finie et infinie et primitive discrète : `sum`
- Somme de Riemann : `sum_riemann`
- Intégration par parties : `integrer_par_parties_dv ibpdv` et `integrer_par_parties_u ibpu`
  - `ibpdv`
  - `ibpu`
- Changement de variables : `subst substituer`
- Longueur d’un arc de courbe : `arcLen`

## 6.21 Maximum, minimum, tableau de valeurs et graph

- Maximum et minimum d’une expression : `fMax fMin`
- Tableau de valeurs et graphe : `tablefunc table_fonction` et `plotfunc`

## 6.22 Limites

- Limites : `limit limite`
- Limite et intégrale

## 6.23 Réécrire des expressions transcendantes et trigonométriques

- Développer une expression transcendante et trigonométrique : `texpand tExpand developper_transcendant`
- Rassembler les termes de même nature : `combine`

## 6.24 Les expressions trigonométriques

- Les différentes fonctions trigonométriques
- Développer une expression trigonométriques : `trigexpand`
- Linéariser une expression trigonométrique : `tlin
  lineariser_trigo`
- Augmenter la phase de π/2 dans les expressions trigonométriques : `shift_phase`
- Rassembler les sinus et les cosinus de même angle : `tcollect tCollect rassembler_trigo`
- Simplifier : `simplify simplifier`
- Transformer les arccos en arcsin : `acos2asin`
- Transformer les arccos en arctan : `acos2atan`
- Transformer les arcsin en arccos : `asin2acos`
- Transformer les arcsin en arctan : `asin2atan`
- Transformer les arctan en arcsin : `atan2asin`
- Transformer les arctan en arccos : `atan2acos`
- Transformer les exponentielles complexes en sin et en cos : `sincos exp2trig`
- Transformer tan(x) en sin(x)/cos(x) : `tan2sincos`
- Transformer sin(x) en cos(x)*tan(x) : `sin2costan`
- Transformer cos(x) en sin(x)/tan(x) : `cos2sintan`
- Transformer tan(x) avec sin(2x) et cos(2x) : `tan2sincos2`
- Transformer tan(x) avec cos(2x) et sin(2x) : `tan2cossin2`
- Transformer une expression trigonométrique en fonction de tan(x/2) : `halftan`
- Transformer les expressions trigonomètriques et hyperboliques en tan(x/2) et en exp(x): `halftan_hyp2exp`
- Transformer avec des fonctions trigonométriques inverses en logarithmes : `atrig2ln`
- Transformer une expression trigonométrique en des exponentielles complexes: `trig2exp`
- Simplifier en privilégiant les sinus : `trigsin`
- Simplifier en privilégiant les cosinus : `trigcos`
- Simplifier en privilégiant les tangentes : `trigtan`
- Réecriture d’une expression avec différentes options : `convert convertir =>`

## 6.25 Transformée de Fourier

- Les coefficients de Fourier : `fourier_an` et `fourier_bn` ou `fourier_cn`
  - `fourier_an`
  - `fourier_bn`
  - `fourier_cn`
- Transformée de Fourier discrète
  - Les propriétes
  - Où interviennent ces sommes ?
- La transformée de Fourier rapide : `fft`
- L’inverse de la transformée de Fourier rapide : `ifft`
- Un exercice utilisant `fft`

## 6.26 Les Exponentielles et les Logarithmes

- Transformer les fonctions hyperboliques en exponentielles : `hyp2exp`
- Développer les exponentielles : `expexpand`
- Développer les logarithmes : `lnexpand`
- Linéariser les exponentielles : `lin lineariser`
- Regrouper les log : `lncollect`
- Transformer une puissance en produit de puissances :
  `powexpand`
- Transformer une puissance en une exponentielle : `pow2exp`
- Transformer exp(n*ln(x)) en puissance : `exp2pow`
- Écrire avec des exponentielles complexes : `tsimplify`

## 6.27 Les polynômes

- Les polynômes à une variable `poly1[...]`
- Les polynômes à plusieurs variables
- Transformer le format interne dense récursif en une écriture polynômiale : `poly2symb r2e`
- Transformer le format interne creux distribué du polynôme en une écriture polynômiale : `poly2symb r2e`
- Transformer un polynôme en une liste (format interne récursif dense) : `symb2poly e2r`
- Transformer un polynôme au format interne : `e2r symb2poly`
- Transformer un polynôme au format interne en une liste et réciproquement : `convert`
- Coefficients d’un polynôme : `coeff coeffs`
- Degré d’un polynôme : `degree`
- Valuation d’un polynôme : `valuation ldegree`
- Coefficient du terme de plus haut degré d’un polynôme : `lcoeff`
- Coefficient du terme de plus bas degré d’un polynôme : `tcoeff`
- Évaluation d’un polynôme : `peval polyEval`
- Mise en facteur de xn dans un polynôme : `factor_xn`
- PGCD des coefficients d’un polynôme : `content`
- Partie primitive d’un polynôme : `primpart`
- Factorisation sur les entiers : `collect`
- Factorisation : `factor factoriser`
- Factorisation sans facteur carré : `sqrfree`
- Liste des facteurs d’un polynôme : `factors`
- Évaluer un polynôme : `horner`
- Écriture selon les puissances de (x-a) : `ptayl`
- Calcul avec les racines exactes d’un polynôme : `rootof`
- Racines exactes d’un polynôme : `roots`
- Coefficients d’un polynôme défini par ses racines : `pcoeff pcoef`
- Troncature d’ordre n : `truncate`
- Convertir un développement limité en polynôme : `convert convertir`
- Convertir un polynôme de n variables en une liste : `convert convertir`
- Convertir une liste en polynôme de n variables : `convert convertir`
- Polynômes aléatoires : `randpoly randPoly`
- Changer l’ordre des variables : `reorder`
- Liste aléatoire : `ranm`
- Interpolation de Lagrange : `lagrange interp`
- Les splines naturelles: `spline`

## 6.28 Arithmétique des polynômes

Les polynômes sont représentés par des expressions ou par la liste de leurs coefficients par ordre de puissances décroissantes. Dans le premier cas la variable utilisée par défaut est x. Pour les polynômes à coefficients dans ℤ/nℤ, appliquez `% n` à l’expression ou à chaque coefficient de la liste.

- Liste des diviseurs d’un polynôme : `divis`
- Quotient euclidien de 2 polynômes : `quo`
- Quotient euclidien : `Quo`
- Reste euclidien de 2 polynômes : `rem`
- Reste euclidien : `Rem`
- Quotient et reste euclidien : `quorem divide`
- PGCD de polynômes par l’algorithme d’Euclide : `gcd igcd`
- PGCD de deux polynômes par l’algorithme d’Euclide : `Gcd`
- Choisir l’algorithme du PGCD de deux polynômes : `ezgcd heugcd modgcd psrgcd`
- PPCM de deux polynômes : `lcm`
- Idendité de Bézout : `egcd gcdex`
- Résolution polynômiale de au+bv=c : `abcuv`
- Les restes chinois : `chinrem`
- Polynôme cyclotomique : `cyclotomic`
- Suites de Sturm et nombre de de changements de signe de P sur ]a; b] : `sturm`
- Nombre de changements de signe sur ]a; b] : `sturmab`
- Suites de Sturm : `sturmseq`
- Matrice de Sylvester de deux polynômes : `sylvester`
- Résultant de deux polynômes : `resultant`

## 6.29 Polynômes orthogonaux

- Polynôme de Legendre : `legendre`
- Polynôme de Hermite : `hermite`
- Polynôme de Laguerre : `laguerre`
- Polynôme de Tchebychev de 1-ière espèce : `tchebyshev1`
- Polynôme de Tchebychev de 2-ième espèce : `tchebyshev2`

## 6.30 Base et réduction de Gröbner

- Base de Gröbner : `gbasis`
- Réduction par rapport à une base de Gröbner : `greduce`
- Test d’appartenance d’un polynôme ou d’une liste de polynômes à un idéal donné par une base de Groebner : `in_ideal`
- Construire un polynôme de n variables : `genpoly`

## 6.31 Les fractions rationnelles

- Numérateur : `getNum`
- Numérateur après simplification : `numer`
- Dénominateur : `getDenom`
- Dénominateur après simplification : `denom`
- Numérateur et dénominateur : `f2nd fxnd`
- Simplifier : `simp2`
- Réduire au même dénominateur : `comDenom`
- Partie entière et fractionnaire : `propfrac`
- Décomposition en éléments simples : `partfrac =>+`
- Décomposition en éléments simples sur C : `cpartfrac`

## 6.32 Racines exactes d’un polynôme

- Encadrement exact des racines complexes d’un polynôme :
  `complexroot`
- Encadrement exact des racines réelles d’un polynôme avec leur multiplicité: `realroot`
- Encadrement exact des racines réelles d’un polynôme : `VAS`
- Encadrement exact des racines réelles positives d’un polynôme : `VAS_positive`
- Borne supérieure des racines réelles positives d’un polynôme : `posubLMQ`
- Borne inférieure des racines réelles positives d’un polynôme : `poslbdLMQ`
- Valeurs exactes des racines rationnelles d’un polynôme : `rationalroot`
- Valeurs exactes des racines complexes rationnelles d’un polynôme : `crationalroot`

## 6.33 Fraction rationnelle, ses racines et ses pôles exacts

- Racines et pôles exacts d’une fraction rationnelle : `froot`
- Coefficients d’une fraction rationnelle définie par ses racines et ses pôles : `fcoeff`

## 6.34 Le calcul modulaire dans ℤ/pℤ ou dans ℤ/pℤ[x]

On peut faire des calculs modulo `p` c’est à dire dans ℤ/pℤ ou dans ℤ/pℤ[x] et la façon de s’y prendre dépends de la syntaxe choisie :

- En mode `Xcas`, les nombres n de ℤ/pℤ sont notés n% p.
  Exemples de notation
  - un entier `n` de ℤ/13ℤ
    `n:=12% 13`.
  - un vecteur `V` de coordonnées dans ℤ/13ℤ
    `V:=[1,2,3]% 13` ou `V:=[1% 13,2% 13,3% 13]`.
  - une matrice `A` de coefficients dans ℤ/13ℤ
    `A:=[[1,2,3],[2,3,4]]% 13` ou
    `A:=[[1% 13,2% 13,3% 13],[2% 13,3% 13,4% 13]]`.
  - un polynôme `A` de ℤ/13ℤ[x] en représentation symbolique
    `A:=(2*x```^```2+3*x-1)%13` ou
    `A:=2%13*x```^```2+3%13*x-1%13`.
  - un polynôme `A` de ℤ/13ℤ[x] en représenté avec une liste
    `A:=poly1[1,2,3]%13` ou `A:=poly1[1%13,2%13,3%13]`.
  Pour transformer un objet `o` à coefficients modulaires en un objetà coefficients entiers tapez `o % 0`. Par exemple, si on tape `o:=4% 7` puis `o% 0`, on obtient `-3`.
- En mode `Maple`, on n’utilise pas % pour représenter les entiers modulo p : ces entiers sont représentés comme les entiers usuels et pour eviter les confusions on utilise les commandes commençant par une majuscule que l’on fait suivre par la commande mod (on se repotera à la section suivante).

Remarques

- Pour certaines commandes dans ℤ/pℤ ou dans ℤ/pℤ[x], il faut choisir un nombre `p` premier.
- La représentation choisie est la représentation symétrique :
  `11%13 = -2%13`.

- Développer et réduire : `normal`
- Addition dans ℤ/pℤ ou dans ℤ/pℤ[x] : `+`
- Soustraction dans ℤ/pℤ ou ℤ/pℤ[x] : `-`
- Multiplication dans ℤ/pℤ ou ℤ/pℤ[x] : `*`
- Quotient : `quo`
- Remainder : `rem`
- Quotient and remainder : `quorem`
- Division dans ℤ/pℤ ou ℤ/pℤ[x] : `/`
- Puissance dans ℤ/pℤ et dans ℤ/pℤ[x] : `^`
- Calcul de an mod p ou de A(x)n mod¶(x),p: `powmod powermod`
- Inverse dans ℤ/pℤ : `inv` ou `/`
- Transformer un entier en sa fraction modulo p : `fracmod iratrecon`
- PGCD dans ℤ/pℤ[x] : `gcd`
- Factorisation dans ℤ/pℤ[x] : `factor factoriser`
- Déterminant d’une matrice de ℤ/pℤ : `det`
- Inverse d’une matrice de ℤ/pℤ : `inv inverse`
- Résolution d’un système linéaire de ℤ/pℤ : `rref`
- Construction d’un corps de Galois : `GF`
- Factorisation d’un polynôme à coefficients dans un corps de Galois : `factor`

## 6.35 Le calcul modulaire comme Maple dans ℤ/pℤ[x]

- Quotient euclidien : `Quo`
- Reste euclidien : `Rem`
- PGCD dans ℤ/pℤ[x] : `Gcd`
- Factorisation dans ℤ/pℤ[x] : `Factor`
- Déterminant d’une matrice de Z/pZ : `Det`
- Inverse d’une matrice de ℤ/pℤ : `Inverse`
- Résolution d’un système linéaire de ℤ/pℤ : `Rref`

## 6.36 Développements limités et asymptotiques

- Division selon les puissances croissantes : `divpc`
- Développement limité : `taylor`
- Développement limité : `series`
- Développement réciproque d’un développement en séries en 0 : `revert`
- Résidu d’une expression en un point : `residue`
- Développement de Padé: `pade`

## 6.37 Les plages de valeurs

- Définition d’une plage de valeurs : `a1..a2`
- Pour accéder aux bornes d’une plage de valeurs : `left gauche right droit`
- Centre d’une plage de valeurs : `interval2center`
- Plages de valeurs définies par leur centre : `center2interval`

## 6.38 Les intervalles

- Définition : `i[]`
- Somme de 2 intervalles
- Opposé d’un intervalle
- Produit de 2 intervalles
- Inverse d’un intervalle
- Pour accéder aux bornes d’un intervalle : `left gauche right droit`
- Milieu d’un intervalle : `midpoint milieu`
- Union de 2 intervalles : `union`
- Intersection de 2 intervalles : `intersect`
- Tester si un élément est dans un intervalle : `contains`
- Convertir un nombre en un intervalle : `convert`

## 6.39 Les séquences

- Définition : `seq[] ()`
- Concaténer deux séquences : `,`
- Pour accéder à un élément d’une séquence : `[]`
- Pour extraire une sous-séquence d’une séquence : `[]`
- Pour fabriquer une séquence ou une liste : `seq $`
- Pour transformer une séquence en liste : `[] nop`
- L’effet de l’opérateur `+` sur deux séquences

## 6.40 Les ensembles

- Définition : `set[]`
- Tester si 2 ensembles (ou listes) sont inclus(e) l’un(e) dans l’autre :`is_included, est_inclus`
- Union de deux ensembles ou de deux listes : `union`
- Intersection de deux ensembles, de deux listes : `intersect`
- Différence de deux ensembles ou de deux listes : `minus`

## 6.41 Les listes ou les vecteurs

- Les différentes listes
- Aplatir une liste : `flatten`
- Accès à un élément ou à une sous-liste d’une liste : `at []`
  - Accès à un élément
  - Extraire une sous-liste
- Extraire une sous-liste d’une liste : `mid`
- Avoir le premier élément d’une liste : `head`
- Supprimer un élément dans une liste : `suppress`
- Avoir la liste privée de son premier élément : `tail`
- Partie droite et gauche d’une liste : `droit ou right, gauche ou left`
- Avoir la liste permutée : `revlist`
- Avoir la liste permutée à partir de son n-ième élément : `rotate`
- Avoir la liste permutée à partir de son n-ième élément : `shift`
- Modifier un élément d’une liste : `subsop`
- Transformer une liste en séquence : `op makesuite`
- Transformer une séquence en liste : `makevector []`
- Longueur d’une liste : `size nops length`
- Longueur d’une liste de listes : `sizes`
- Concaténer deux listes ou une liste et un élément: `concat
  augment`
- Rajouter un élément à la fin d’une liste : `append`
- Rajouter un élément au début d’une liste : `prepend`
- Trier : `sort`
- Trier une liste selon l’ordre croissant : `SortA et sorta`
- Trier une liste selon l’ordre décroissant : `SortD sortd`
- Sélectionner des éléments d’une liste : `select`
- Supprimer des éléments d’une liste : `remove`
- Tester si un élément est dans une liste : `member`
- Tester si un élément est dans une liste : `contains`
- Compter les éléments d’une liste ou d’une matrice vérifiant une propriété : `count`
- Nombre d’éléments ayant une valeur donnée : `count_eq`
- Nombre d’éléments inférieurs à une valeur : `count_inf`
- Nombre d’éléments supérieurs à une valeur : `count_sup`
- Somme des éléments d’une liste : `sum add`
- Somme cumulée des éléments d’une liste : `cumSum`
- Produit indicé : `product mul`
  - Produit des valeurs d’une expression : `product`
  - Produit des éléments d’une liste : `product`
- Appliquer une fonction d’une variable aux éléments d’une liste : `map apply of`
- Appliquer une fonction de plusieurs variables à un polynôme donné au format interne :`map`
- Appliquer une fonction de 2 variables aux éléments de 2 listes : `zip`
- Faire une liste de zéros : `newList`
- Faire une liste avec une fonction : `makelist`
- Faire une liste aléatoire : `randvector`
- Liste des différences de termes consécutifs : `deltalist`
- Faire une matrice avec une liste : `list2mat`
- Faire une liste avec une matrice : `mat2list`

## 6.42 Fonctions utiles pour les vecteurs et les composantes d’un vecteur

- Les normes d’un vecteur : `maxnorm l1norm l2norm norm`
- Pour normaliser les composantes d’un vecteur : `normalize unitV`
- Somme terme à terme de deux listes : `+ .+`
- Différence terme à terme de deux listes : `- .-`
- Produit terme à terme de deux listes : `.*`
- Quotient terme à terme de deux listes : `./`
- Le produit scalaire : `scalar_product dotprod dot dotP * scalar_Product produit_scalaire`
- Le produit vectoriel : `cross crossP crossproduct`

## 6.43 Fonctions utiles pour les statistiques : `mean moyenne,variance, stddev ecart_type, stddevp ecart_type_population, stdDev, median, quantile, quartiles, quartile1, quartile3, boxwhisker, moustache`

Voir aussi 6.50.5 and 8.
Fonctions utiles pour les statistiques dont les donn’ees sont des listes :

- `mean` ou `moyenne` pour calculer la moyenne des éléments d’une liste.
  On tape :
  `mean([3,4,2])`
  On obtient :
  `3`
  On tape :
  `mean([1,0,1])`
  On obtient
  `2/3`
- `stddev` ou `ecart_type` pour calculer l’écart type numèrique des éléments d’une liste.
  On tape :
  `stddev([3,4,2])`
  On obtient :
  `sqrt(2/3)`
  On a en effet la moyenne qui vaut 3 et l’écart type qui vaut :
  √((3−3)2+(4−3)2+(2−3)2)/3=√2/3
- `stddevp` ou `stdDev` ou `ecart_type_population` pour calculer une estimation de l’écart type numèrique de la population à partir d’un échantillon dont les éléments sont donnés dans une liste.
  On tape :
  `stddevp([3,4,2])`
  On obtient :
  `1`
  On a en effet la moyenne qui vaut 3 et l’écart type qui vaut :
  √((3−3)2+(4−3)2+(2−3)2)/2=√2/2=1
  On a la relation :
  `stddevp(l)```^```2=size(l)*stddev(l)```^```2/(size(l)-1)`.
- `variance` pour calculer la variance numèrique des éléments d’une liste.
  On tape :
  `variance([3,4,2])`
  On obtient :
  `2/3`
- `median` pour calculer la médiane des éléments d’une liste.
  On tape :
  `median([0,1,3,4,2,5,6])`
  On obtient :
  `3.0`
- `quantile` pour calculer les déciles des éléments d’une liste.
  On tape :
  `quantile([0,1,3,4,2,5,6],0.25)`
  On obtient le premier quartile :
  `[1.0]`
  On tape :
  `quantile([0,1,3,4,2,5,6],0.5)`
  On obtient la médiane :
  `[3.0]`
  On tape :
  `quantile([0,1,3,4,2,5,6],0.75)`
  On obtient le troisième quartile :
  `[5.0]`
- `quartiles` calcule le minimum, le premier quartile, la médiane, le troisième quartile et le maximum d’une serie statistique.
  On tape :
  `quartiles([0,1,3,4,2,5,6])`
  On obtient :
  `[[0.0],[1.0],[3.0],[5.0],[6.0]]`
- `quartile1` calcule le premier quartile d’une serie statistique.
  On tape :
  `quartile1([0,1,3,4,2,5,6])`
  On obtient :
  `1.0`
- `quartile3` calcule le troisième quartile d’une serie statistique.
  On tape :
  `quartile3([0,1,3,4,2,5,6])`
  On obtient :
  `5.0`
- `boxwhisker` ou `moustache` pour afficher la boite à moustaches des éléments d’une liste.
  On tape :
  `moustache([0,1,3,4,2,5,6])`
  On obtient le dessin de la boite à moustaches de la liste mise comme paramètre.

Soit `A` la liste `[0,1,2,3,4,5,6,7,8,9,10,11]`.
On tape :
`A:=[0,1,2,3,4,5,6,7,8,9,10,11]`
On obtient :
`11/2` pour `mean(A)`
`sqrt(143/12)` pour `stddev(A)`
`0` pour `min(A)`
`[1.0]` pour `quantile(A,0.1)`
`[2.0]` pour `quantile(A,0.25)`
`[5.0]` pour `median(A)` ou pour `quantile(A,0.5)`
`[8.0]` pour `quantile(A,0.75)`
`[9.0]` pour `quantile(A,0.9)`
`11` pour `max(A)`
`[[0.0],[2.0],[5.0],[8.0],[11.0]]` pour `quartiles(A)`
Voir aussi ces fonctions pour les matrices à la section 6.50.5 et pour les listes pondérées au chapitre 8.

## 6.44 Les tableaux indicés par des chaînes : `table`

Une table est une liste indicée par quelque chose de plus général que des entiers.
Une table peut être utilisée, par exemple, pour stocker des numèros de téléphone indicés par des noms.
Dans `Xcas`, les indices d’une table peuvent être n’importe quels objets de `Xcas`.
L’accés se fait par un algorithme qui trie par `type` puis utilise l’ordre de chaque type (par exemple < pour le type numérique, l’ordre lexicographique pour les chaines etc...).
Par exemple pour définir une table représentant une matrice creuse, on peut mettre des indices doubles entre des parenthèses. La commande `matrix` permet de transformer une table ainsi définie en une matrice.
Inversement `table` permet de transformer une matrice en une table. `table` a comme argument une liste ou une séquence d’égalité de la forme :
`"nom_index"=valeur_element`.
`table` renvoie cette table.
On tape :

`T:=table(3=-10,"a"=10,"b"=20,"c"=30,"d"=40)`

On tape :

`T["b"]`

On obtient :

`20`

On tape :

`T[3]`

On obtient :

`-10`

Pour définir une matrice creuse par une table, on tape par exemple :

`B:=table([1,2] = 12,[2,3] = 13,[3,4] = 14)`

Ou on tape de façon plus simple, on peut définir la variable `B` à l’aide d’une multi-affectation, à condition que la variable `B` soit purgée :

`purge(B)`
`B[1..3,2..4]:=[12..14]`

On tape :

`B[1,2]`

On obtient :

`12`

Attention
`B` n’est pas une matrice mais une table ! On obtient facilement une matrice à partir de `B` avec `convert(B,array)` ou `matrix(B)`.
On tape :

`B`

On obtient :

`table([1,2] = 12,[2,3] = 13,[3,4] = 14)`

On tape :

`b:=convert(B,array)`

Ou on tape de façon plus simple :

`b:=matrix(B)`

On obtient :

`[[0,0,0,0,0],[0,0,12,0,0],[0,0,0,13,0],[0,0,0,0,14]]`

Remarque
On peut faire toutes les opérations matricielles sur les tables par exemple :
`B*B, B+B`
Ne pas oublier de faire `purge(B)` avant de définir la variable `B` à l’aide d’une multi-affectation.
Exemple
On veut coder les lettres "a","b",.."z" par 1,2,....26.
On tape :
`alphab:="abcdefghijklmnopqrstuvwxyz";`
puis :
`code:=table(seq(alphab[j]=j+1,j=0..25));`
On tape `code["c"]`
On obtient `3`
ou bien on écrit une fonction :

    Code(a):={
    local code,alphab,j;
    alphab:="abcdefghijklmnopqrstuvwxyz";
    code:=table(seq(alphab[j]=j+1,j=0..25));
    return code(a);
    };

On tape `Code("c")`
On obtient `3`
Remarque
Si on fait une affectation du type `T[n]:= ...` où `T` est le nom d’une variable et `n` un entier

- si la variable `T` contient une liste ou une séquence, alors le n-ième élément de `T` est modifié,
- si la variable `T` n’est pas assignée, une table `T` est créée avec une entrée (correspondant à l’indice n). Notez qu’après cette assignation `T` n’est pas une liste, bien que n soit un entier.

## 6.45 Les matrices particulières

Une matrice est representée par une liste de listes de même longueur. Dans les réponses de `Xcas`, les matrices sont parenthésées avec []. Par exemple, [1,2,3] désigne la matrice [[1,2,3]] qui a une seule ligne, alors que [1,2,3] désigne la liste [1,2,3].
Dans ce document, on utilise la notation habituelle ( [[1,2,3]]) pour les matrices renvoyées comme réponses.

- Matrice identité : `idn identity`
- Matrice de zéros : `newMat matrix`
- Matrice aléatoire : `ranm randMat randmatrix`
- Diagonale d’une matrice ou matrice d’une diagonale : `diag BlockDiagonal`
- Matrice triangulaire inférieure ou supérieure associée à une matrice : `diag`
- Bloc de Jordan : `JordanBlock`
- Matrice de Hilbert : `hilbert`
- Matrice de Vandermonde : `vandermonde`

## 6.46 Création des matrices et extraction d’éléments

- Création et modification par affectation
- Création par multi-affectation
- Faire une matrice avec une fonction : `makemat`
- Définir une matrice : `matrix`
- Modifier un élément ou une ligne d’une matrice contenue dans une variable : `:=` et `=<`

## 6.47 Arithmétique des matrices

- Pour évaluer une matrice : `evalm`
- Addition et soustraction de deux matrices : `+ - .+ .-`
- Multiplication de deux matrices : `* &*`
- Addition des éléments d’une même colonne d’une matrice : `sum`
- Somme cumulée des éléments d’une même colonne d’une matrice : `cumSum`
- Multiplication des éléments d’une même colonne d’une matrice : `product`
- Elévation d’une matrice à une puissance entière : ^ &^
- Produit de Hadamard : `hadamard product`
- Produit de Hadamard (version infixée): `.*`
- Division de Hadamard (version infixée): `./`
- Puissance de Hadamard (version infixée): `.^`

## 6.48 Extraire des élément(s) ou des sous-matrices d’une matrice

- Extraire un ou des élément(s) d’une matrice : `at`
- Extraire des lignes ou des colonnes d’une matrice (compatibilité Maple) : `row col`
- Extraire une sous-matrice d’une matrice (compatibilité TI) : `subMat`

## 6.49 Modifier une matrice

- Modifier un élément ou une ligne d’une matrice : `subsop`
- Redimensionner une matrice ou un vecteur : `REDIM`
- Remplacer une partie d’une matrice ou d’un vecteur : `REPLACE`
- Supprimer des lignes ou des colonnes d’une matrice :
  `delrows delcols`
- Redimensionner une matrice ou un vecteur : `redim`
- Remplacer une partie d’une matrice ou d’un vecteur : `replace`
- Ajouter une ligne à une autre : `rowAdd`
- Multiplier une ligne par une expression : `mRow` et `scale SCALE`
- Ajouter k fois une ligne à une autre : `mRowAdd` et `scaleadd SCALEADD`
- Échanger deux lignes : `rowSwap swaprow rowswap`
- Échanger deux colonnes : `colSwap swapcol colswap`
- Faire une matrice avec une liste de matrices : `blockmatrix`
- Faire une matrice avec deux matrices : `semi_augment`
- Faire une matrice avec deux matrices : `augment concat`
- Rajouter une colonne à une matrice : `border`

## 6.50 Pour compter...

- Compter les éléments d’une matrice vérifiant une propriété : `count`
- Compter les éléments ayant une valeur donnée : `count_eq`
- Compter les éléments plus petits qu’une valeur donnée :
  `count_inf`
- Compter les éléments plus grands qu’une valeur donnée : `count_sup`
- Fonctions utiles pour les colonnes d’une matrice : `mean` ou `moyenne`, `stddev` ou `ecart_type`, `variance`, `median`, `quantile`, `quartiles`, `boxwhisker` ou
  `moustache`
- Dimension d’une matrice : `dim`
- Nombre de lignes : `rowdim rowDim nrows`
- Nombre de colonnes : `coldim colDim ncols`

## 6.51 Définition des matrices creuses : `matrix`

- Définition
- Opérations

## 6.52 Algèbre linéaire

- Transposée d’une matrice : `tran transpose`
- Inverse d’une matrice : `inv inverse /`
- Trace d’une matrice : `trace`
- Déterminant d’une matrice : `det`
- Déterminant d’une matrice creuse : `det_minor`
- Rang d’une matrice : `rank`
- Matrice adjointe : `trn`
- Matrice équivalente : `changebase`
- Base d’un sous espace vectoriel : `basis`
- Base de l’intersection de deux sous espaces vectoriels : `ibasis`
- Image d’une application linéaire : `image`
- Noyau d’une application linéaire : `kernel nullspace ker`
- Noyau d’une application linéaire : `Nullspace`
- Espace engendré par les colonnes d’une matrice : `colspace`
- Espace engendré par les lignes d’une matrice : `rowspace`

## 6.53 Programmation linéaire

- La commande `Xcas` : `simplex_reduce`
- Écriture matricielle et algorithme du simplexe
- Premier cas : 3 arguments
- Deuxième cas: un argument
- Passage de la forme standard à la forme canonique

## 6.54 Les différentes norme d’une matrice

Voir aussi 6.42.1 pour les différentes norme d’un vecteur.

- Norme de Frobenius d’une matrice : `frobenius_norm`
- Norme d’une matrice avec la norme des lignes : `rownorm`
  `rowNorm`
- Norme d’une matrice avec la norme des colonnes : `colnorm colNorm`
- La triple norme d’une matrice : `matrix_norm` et `l1norm`, `l2norm` ou `norm` ou `specnorm`, `linfnorm`
- Norme : `COND cond`

## 6.55 Réduction des matrices

- Valeurs propres : `eigenvals eigenvalues`
- Matrice de Jordan : `egvl eigVl`
- Vecteurs propres : `egv eigenvectors eigenvects eigVc`
- Matrice de Jordan rationnelle : `rat_jordan`
- Matrice de passage et matrice de Jordan : `jordan`
- Puissance n d’une matrice carrée : `matpow`
- Polynôme caractéristique : `pcar charpoly`
- Polynôme caractéristique d’une matrice creuse de grande dimension: `pcar_hessenberg`
- Polynôme minimal : `pmin`
- Comatrice : `adjoint_matrix`
- Matrice compagnon d’un polynôme : `companion`
- Réduction de Hessenberg d’une matrice : `hessenberg`
- Forme normale de Hermite : `ihermite`
- Forme normale de Smith : `ismith`

## 6.56 Les isométries

- Reconnaitre une isométrie : `isom`
- Trouver la matrice d’une isométrie : `mkisom`

## 6.57 Factorisation des matrices

La factorisation des matrices renvoie en général des matrices numériques et quelquefois des matrices symboliques.

- Décomposition de Cholesky : `cholesky`
- Décomposition QR : `qr`
- Décomposition QR (compatible TI) : `QR`
- Décomposition LQ (compatible HP) : `LQ`
- Décomposition LU : `lu`
- Décomposition LU (compatible TI): `LU`
- Valeurs singulières (compatible HP) : `SVL svl`
- Singular value decomposition : `svd`
- Singular value decomposition (compatible HP) : `SVD`
- Recherche d’une base de vecteurs courts d’un réseau : `lll`

## 6.58 Les formes quadratiques

- Matrice d’une forme quadratique : `q2a`
- Transformer une matrice en une forme quadratique : `a2q`
- Méthode de Gauss : `gauss`
- Algorithme du gradient conjugué : `conjugate_gradient`
- Procédé de Gramschmidt : `gramschmidt`
- Tracé d’une conique : `conic conique`
- Réduction d’une conique : `conique_reduite
  reduced_conic`
- Tracé d’une quadrique : `quadrique`
- Réduction d’une quadrique : `quadrique_reduite
  reduced_quadric`

## 6.59 Les expressions de plusieurs variables

- Le gradient : `derive deriver diff grad`
- Le Laplacien : `laplacian`
- La matrice hessienne : `hessian`
- La divergence : `divergence`
- Le rotationnel : `curl`
- Le potentiel : `potential`
- Champ à flux conservatif : `vpotential`

## 6.60 Équations

- Écrire une équation : `equal`
- Transformer une équation en diffèrence : `equal2diff`
- Transformer une équation en une liste : `equal2list`
- Pour avoir le membre de gauche d’une équation : `left gauche lhs`
- Pour avoir le membre de droite d’une équation : `right droit rhs`
- Résolution d’équations : `solve resoudre`
- Résoudre des équations dans ℂ : `resoudre_dans_C csolve cSolve`

## 6.61 Les systèmes linéaires

Dans tout ce paragraphe, on appelle "matrice augmentée" du système A*X=B la matrice formée par la matrice A bordée à droite par le vecteur colonne B ("matrice augmentée" du système A*X=B=`border(A,tran(B))`).

- Matrice d’un système : `syst2mat`
- Réduction de Gauss d’une matrice : `ref`
- Réduction de Gauss-Jordan : `rref gaussjord`
- Résolution de A*X=B : `simult`
- Étape de la réduction de Gauss-Jordan d’une matrice : `pivot`
- Résoudre un système linéaire : `linsolve
  resoudre_systeme_lineaire`
- Norme minimale d’un système linéaire : `LSQ lsq`
- Résolution d’une récurrence linéaire : `reverse_rsolve`

## 6.62 Les équations différentielles

Pour le calcul numérique de solutions déquations différentielles on se reportera à `odesolve` et pour la représentation graphique de solutions déquations différentielles on se reportera à `plotfield`, `plotode`, `interactive_plotode`.

- Équations différentielles : `desolve deSolve dsolve`
- Transformée de Laplace et transformée de Laplace inverse : `laplace ilaplace invlaplace`

## 6.63 Transformée en z et transformée en z inverse

- Transformée en z d’une suite, la fonction ztrans : `ztrans`
- Transformée en z inverse d’une fraction rationnelle, la fonction invztrans : `invztrans`

## 6.64 Autres fonctions

- Négliger les petites valeurs : `epsilon2zero`
- Liste des variables : `lname indets`
- Liste des variables et des expressions : `lvar`
- Liste des variables et des expressions algébriques : `algvar`
- Test de la présence d’une variable dans une expression : `has`
- Évaluation numérique : `evalf`
- Approximation rationnelle : `float2rational exact`

## 6.65 Lejour de la semaine : `dayofweek`

`dayofweek(j,m,a` renvoie 0 pour dimanche, 1 pour lundi ...6 pour samedi pour çindiquer le jour de la semaine qui correspond à la date donnée en argument date supérieure au 15 octobre 1582. On tape :

`dayofweek(15,10,1582)`

On obtient :

`5`

Donc le 15 octobre 1582 était un vendredi. En effet le calendrier grégorien date du 15 octobre 1582 (le lendemain du jeudi 4 octobre 1582 fut le vendredi 15 octobre 1582 car avant les annèes bissextiles étaient tous les 4 ans ce qui donne comme durée moyenne de l’annèe civile 365.25 jours alors que la révolution de la terre autour du soleil est plus courte (365.242 jours) d’où un décalage qui était de 10 jours en 1582.
Avec la nouvelle règle (la dernière année de chaque siécle est bissextile si son millésime est divisble par 400) l’écart n’est plus que de l’ordre de 1 jour tous les 3000 ans.
On tape :

`dayofweek(1,10,2014)`

On obtient :

`3`

Donc le 1ier octobre 2014 était un mercredi.

# Chapitre 7 Propriétés métriques des courbes planes ou gauches

## 7.1 Tangente et plans tangents

Soit une courbe Γ lieu des points M=M(t) de coordonnées x(t),y(t),z(t) dans un repère orthonormé Oxyz.
Le vecteur directeur de la tangente à Γ est le premier vecteur T= dpM/dtp qui ne soit pas nul.
À chaque tangente en M on associe :
une infinité de plans tangents qui sont les plans contenant T et
une infinité de normales qui sont toutes perpendiculaires en M à T et qui forment le plan normal en M.

## 7.2 Place de la courbe par rapport à un plan tangent

Comment se place la courbe par rapport à un certain plan Π tangent en M à Γ ? Soit N la normale qui est perpendiculaire à Π en M.
Soit M1 un point de Γ et m1 la projection de M1 sur T.
Mm1 a le sens de (t1−t)pdpM/dtp ( dpM/dtp étant le premier vecteur derivé de OM non nul.
M1 est dans la même région par rapport à Pi que le vecteur (t1−t)qdqM/dtq où (t1−t)qdqM/dtq est la première des dérivées suivantes qui soit non nulles et non situés dans Pi

## 7.3 Notion d’abscisse curviligne :

Soit une courbe Γ lieu des points M=M(t) de coordonnées x(t),y(t),z(t) dans un repère orthonormé Oxyz.
On suppose que x(t),y(t),z(t) sonr continues , dérivables et à dérivées continues.
On note dM/dt le vecteur de coordonnées x′(t),y′(t),z′(t) qui est un vecteur tangent à Γ quelque soit t.
On introduit un nouveau paramétre s pour Γ pour que dM/ds soit unitaire c’est à dire tel que :
ds2=dx2+dy2+dz2
Cette relation définie da dérivée de s par rapport à t au signe près :
ds/dt=√x′(t)2+y′(t)2+z′(t)2 si on oriente Γ selon les t croissants,
ds/dt=−√x′(t)2+y′(t)2+z′(t)2 si on oriente Γ selon les t décroissants.
On appelle abscisse curviligne à partir de l’origine M0=M(t0), la fonction s(t) ayant pour dérivée : ds/dt=√x′(t)2+y′(t)2+z′(t)2 (ou ds/dt=−√x′(t)2+y′(t)2+z′(t)2 selon l’orientation choisie) et telle que s(t0)=0.
La tangente orientée de Γ au point M est alors :
τ= dM/ds qui est le vecteur :
en coordonnées cartésiennes : τ=(dx/ds,dy/ds,dz/ds).
en coordonnées semi-polaires τ=(dρ/ds,ρ dθ/ds,dz/ds).

## 7.4 Le plan osculateur

Soit une courbe Γ lieu des points M=M(t) de coordonnées x(t),y(t),z(t) dans un repère orthonormé Oxyz.
Le vecteur directeur de la tangente à Γ est le premier vecteur dpM/dtp qui ne soit pas nul.
Considérons le cas le plus courant où dM/dt et d2M/dt2 sont non nuls et non colinéaires. Le plan osculateur est le plan des deux vecteurs dM/dt et d2M/dt2 et plus généralement le plan des deux premiers vecteurs : dpM/dtp et dp+hM/dtp+h qui ne sont ni nuls et ni colinéaires.
Remarque Le plan osculateur comme la tangente ne dépend pas du paramètre utilisé.
Le vecteur d2M/ds2=dτ/ds est donc dans le plan osculateur et il est orthogonal à τ. On appelle normale principale l’intersection du plan normal (plan perpendiculaire à la tangente τ) et du plan osculateur.
Soit n le vecteur unitaire de la normale principale orientée dans le sens de la concavité i.e. selon dτ/ds

## 7.5 Courbure et Cercle osculateur: `curvature, courbure`

- Première formule de Frenet
- Courbure : `curvature, courbure`
- Cercle osculateur : `osculating_circle`
- Applications

## 7.6 Torsion

- Trièdre de Frenet
- Deuxième et troisième formule de Frenet

## 7.7 Cas des courbes planes

Lorsque Γ est une courbe du plan Oxy : son plan osculateur est le plan Oxy.
La torsion d’une courbe plane est nulle.
Soit α l’angle (Ox,τ. On a alors :
1/R dα/ds et donc :
ds/dα=R
Soit ν tel que (τ ν)=π/2, on a ;
dτ =ν dα et si c est le centre de courbure en M on a :
MC= ds/dαν

## 7.8 Développée d’une courbe plane : `evolute`

On appelle développée d’une courbe plane Γ, le lieu des centres de courbure de Γ : c’est aussi l’enveloppe de ses normales. Exemple
Trouver la développée de la spirale logarithmique :
ρ=3eθ/2.
On tape :
`developpee([3*exp(t/2)*cos(t),3*exp(t/2)*sin(t)],t,affichage=2))`
On obtient :

## 7.9 Développante d’une courbe plane

On appelle développante d’une courbe plane Γ les courbes admettant Γ comme développée.

# Chapitre 8 Les fonctions de statistique

## 8.1 Les fonctions de `Xcas` de statistique à 1 variable

On va décrire les différentes fonctions statistiques sur un exemple :
avec la liste `A:=[0,1,2,3,4,5,6,7,8,9,10,11]`
- en prenant comme série statistique d’effectif 1 la liste `A`, ou
- en prenant comme série statistique la liste `A` avec comme effectifs encore la liste `A`.
On tape :
`A:=[0,1,2,3,4,5,6,7,8,9,10,11]`
On pourra se reporter aussi à 6.43 lorsque les arguments sont des listes et à 6.50.5 lorsque les arguments sont des matrices.

- La moyenne : `mean moyenne`
- L’écart-type : `stddev ecart_type`
- L’écart-type de la population : `ecart_type_population stddevp stdDev`
- La variance : `variance`
- La médiane : `median`
- Différentes valeurs statistiques : `quartiles`
- Le premier quartile : `quartile1`
- Le troisième quartile : `quartile3`
- Les déciles : `quantile`
- Le regroupement en classes : `classes`
- Regroupement de termes : `accumulate_head_tail`
- La boite à moustaches : `boxwhisker moustache`
- L’histogramme : `histogram histogramme`
- Les fréquences : `frequencies frequences`
- Les fréquences cumulées : `cumulated_frequencies
  frequences_cumulees`
- Dessiner un diagramme en batons : `diagramme_batons`
- Dessiner un diagramme en camembert : `camembert`

## 8.2 Les fonctions statistiques à 2 variables

On continue à utiliser la liste `A` dans les exemples.
On tape :

`A:=[0,1,2,3,4,5,6,7,8,9,10,11]`

- La covariance : `covariance`
- La corrélation : `correlation`
- Covariance et corrélation : `covariance_correlation`
- Le nuage de points : `scatterplot nuage_points`
- Les batons du nuage de points : `batons`
- Ligne polygonale : `polygonplot ligne_polygonale`
- Ligne polygonale : `listplot plotlist`
- Ligne polygonale et nuage de points : `polygonscatterplot ligne_polygonale_pointee`
- Interpolation linéaire : `linear_interpolate`
- Régression linéaire : `linear_regression`
- Graphe de la régression linéaire :
  `linear_regression_plot`
- Régression exponentielle : `exponential_regression`
- Graphe de la régression exponentielle :
  `exponential_regression_plot`
- Régression logarithmique : `logarithmic_regression`
- Graphe de la régression logarithmique :
  `logarithmic_regression_plot`
- Régression polynômiale : `polynomial_regression`
- Graphe de la régression polynomiale :
  `polynomial_regression_plot`
- Régression puissance : `power_regression`
- Graphe de la régression puissance :
  `power_regression_plot`
- Régression logistique : `logistic_regression`
- Graphe de la régression logistique :
  `logistic_regression_plot`

## 8.3 Les fonctions aléatoires de `Xcas`

- Pour initialiser les nombres aléatoires : `srand randseed RandSeed`
- Tirage équiréparti `rand alea hasard`
  - Tirage équiréparti sur [0,1[ : `rand() alea() hasard`
  - Tirage aléatoire équiréparti sur l’intervalle [a;b[ : `rand(a,b) hasard(a,b) rand(a..b)() hasard(a..b)()`
  - Tirage aléatoire d’entiers équirépartis sur [0,..,n[ : `rand(n) alea(n) hasard(n)`
- Tirage aléatoire sans remise de p objets parmi n : `rand alea hasard`
- Tirage selon une loi binomiale : `randbinomial`
- Tirage selon une loi multinomiale : `randmultinomial`
- Tirage selon une loi de Poisson : `randpoisson`
- Tirage selon une loi normale : `randnorm randNorm`
- Tirage selon une loi exponentielle : `randexp`
- Matrice aléatoire : `ranm randmatrix randMat`

## 8.4 Densité, fonction de répartition et leur inverse

- Probabilité que X égale k lorsque X ∈ B(n,p) : `binomial`
- Fonction de répartition de la loi binomiale : `binomial_cdf`
- Fonction de répartition inverse de la loi binomiale: `binomial_icdf`
- Probabilité que X égale k lorsque X ∈ N eg B in(n,p) : `negbinomial`
- Fonction de répartition de la loi binomiale négative : `negbinomial_cdf`
- Fonction de répartition inverse de la loi binomiale négative : `negbinomial_icdf`
- Probabilité que X égale [k0,k1..kj]+K lorsque X suit une loi multinomiale de probabilité [p0,p1,..pj]=P : `multinomial`
- Probabilité pour que X égale k lorsque X∈ P(µ) : `poisson`
- Fonction de répartition de Poisson : `poisson_cdf`
- Fonction de répartition inverse de Poisson : `poisson_icdf`
- Densité de probabilité de la loi normale : `loi_normale
  normald`
- Fonction de répartition de la loi normale : `normal_cdf normald_cdf`
- Fonction de répartition inverse normale : `normal_icdf normald_icdf`
- Complément à 1 de la fonction de répartition de la loi normale : `UTPN`
- Densité de probabilité de la loi de Student : `student studentd`
- Fonction de répartition de la loi de Student : `student_cdf`
- Fonction de répartition inverse de Student : `student_icdf`
- Complément à 1 de la fonction de répartition de la loi de Student : `UTPT`
- Densité de probabilité de la loi du χ2 : `chisquare chisquared`
- Fonction de répartition de la loi du χ2 : `chisquare_cdf`
- Fonction inverse de la fonction de répartition de la loi du χ2 : `chisquare_icdf`
- Complément à 1 de la fonction de répartition de la loi du χ2 : `UTPC`
- Densité de probabilité de la loi de Fisher-Snédécor : `fisher fisherd snedecor snedecord`
- La fonction de répartition de la loi de Fisher-Snédécor : `fisher_cdf snedecor_cdf`
- Inverse de la fonction de répartition de la loi de Fisher-Snédécor : `fisher_icdf snedecor_icdf`
- Complément à 1 de la fonction de répartition de la loi de Fisher-Snédécor : `UTPF`
- Densité de probabilité de la loi gamma : `gammad`
- Fonction de répartition de la loi gamma : `gammad_cdf`
- Fonction de répartition inverse de la loi gamma : `gammad_icdf`
- Densité de probabilité de la loi beta : `betad`
- Fonction de répartition de la loi beta : `betad_cdf`
- Fonction de répartition inverse de la loi beta : `betad_icdf`
- Densité de probabilité de la loi géométrique : `geometric`
- Fonction de répartition de la loi géométrique : `geometric_cdf`
- Fonction de répartition inverse de la loi géométrique : `geometric_icdf`
- Densité de probabilité de la loi de Cauchy : `cauchy cauchyd`
- Fonction de répartition de la loi de Cauchy : `cauchy_cdf cauchyd_cdf`
- Fonction de répartition inverse de la loi de Cauchy : `cauchy_icdf cauchyd_icdf`
- Densité de probabilité de la loi uniforme : `uniform uniformd`
- Fonction de répartition de la loi uniforme : `uniform_cdf uniformd_cdf`
- Fonction de répartition inverse de la loi uniforme : `uniform_icdf uniformd_icdf`
- Densité de probabilité de la loi exponentielle : `exponential exponentiald`
- Fonction de répartition de la loi de exponentielle : `exponential_cdf exponentiald_cdf`
- Fonction de répartition inverse de la loi exponentielle : `exponential_icdf exponentiald_icdf`
- Densité de probabilité de la loi de Weibull : `weibull weibulld`
- Fonction de répartition de la loi de Weibull : `weibull_cdf weibulld_cdf`
- Fonction de répartition inverse de la loi de Weibull : `weibull_icdf weibulld_icdf`
- Distribution de Kolmogorov-Smirnov : `kolmogorovd`
- Test de Kolmogorov-Smirnov : `kolmogorovt`
- Polynome donnant la distribution du test de Wilcoxon ou de Mann-Whitney `wilcoxonp`
- Statistique de Wilcoxon ou de Mann-Whitney `wilcoxons`
- Test de Wilcoxon ou de Mann-Whitney `wilcoxont`
- Fonction génératrice des moments d’une loi de probabilité: `mgf`
- Distribution cumulée pour une loi de probabilité : `cdf`
- Distribution cumulée inverse pour une loi de probabilité : `icdf`
- Chaine de Markov : `markov`
- Génération d’une marche aléatoire sur un graphe d’état : `randmarkov`

## 8.5 Les tests d’hypothèses

- Généralités
- `normalt`
- `studentt`
- `chisquaret`
- `kolmogorovt`
- Des exemples

# Chapitre 9 Les fonctions de programmation

## 9.1 La forme d’une fonction, d’un programme et d’un script

- Le choix de l’éditeur
- La forme d’une fonction
- La forme d’un programme
- La forme d’un script

## 9.2 Exécuter une fonction pas à pas

On peut exécuter une fonction pas à pas, en utilisant le debuggeur :
on se sert de l’instruction `debug` avec comme argument une fonction et ses arguments et cela permet d’exécuter la fonction pas à pas. On a alors la possibilité de voir l’évolution des variables de son choix (on se reportera pour plus de détails à la section 9.7).

## 9.3 La séquence d’instructions

Un bloc d’instructions ou une séquence d’instructions doit être parenthésé soit par `{}`, soit par `begin` et `end`.
Entre ces accolades (ou entre `begin` et `end`) on met les instructions en les terminant par un point-virgule `;`

## 9.4 Les instructions de base

- Les commentaires : `comment //`
- Les entrées : `input, saisir, Input, InputStr, saisir_chaine, textinput`
- Fonction testant si une touche est pressée : `getKey`
- Fonction testant le type de son argument: `type`
- Fonction testant si le type de son argument est une séquence : `subtype`
- Fonction testant le type de son argument: `getType`
- Fonction testant le type de son argument: `compare`
- Les sorties : `print, Disp, afficher`
- Pour effacer les sorties : `ClrIO`
- Les sorties de ab : `printpow`
- Sortie dans une petite fenêtre : `output Output`
- Les affectations infixées : `=> := =<`
- L’affectation par copie : `copy`
- Les différences entre `:=`, `=<` et `copy`
- Les instructions `copy` et `=<` dans un programme
- L’affectation prefixée : `sto Store`
- L’affectation d’une égalité : `assign`
- L’instruction conditionnelle : `if then else end, si alors sinon fsi`
- L’instruction conditionnelle : `if then elif else end`
- L’instruction conditionnelle : `switch`
- La boucle : `for pour fpour`
- La fonction : `seq`
- La boucle : `repeat until` et `repeter jusqua`
- La boucle : `while` et `tantque`
- Modifier l’ordre d’exécution des instructions : `label goto`

## 9.5 Les autres instructions

- Pour lire les entrées à partir d’un fichier : `read`
- Pour écrire des variables et leur contenu dans un fichier : `write`
- Pour écrire des sorties dans un fichier : `fopen fprint fclose`
- Pour utiliser une chaîne comme nom de variable ou comme nom de fonction : `#`
- Pour utiliser une chaîne comme un nombre : `expr`
- Pour utiliser une chaîne comme nom de commande : `expr`
- Évaluer une expression sous la forme d’une chaîne : `string`

## 9.6 D’autres instructions utiles

- Définir une fonction ayant un nombre variable d’arguments : `args`
- Pour sortir d’une boucle : `break`
- Pour ne pas faire la fin d’une boucle : `continue`
- Ouvrir l’ècran `DispG` depuis un programme : `DispG`
- Effacer l’ècran `DispG` depuis un programme : `ClrGraph`
- Fermer l’ècran `DispG` depuis un programme : `DispHome`

## 9.7 Le debuggeur

- Ouvrir le débuggeur : `debug`
- Instruction du debuggeur : `watch`
- Instruction du debuggeur : `rmwatch`
- Instruction du debuggeur : `breakpoint`
- Instruction du debuggeur : `rmbreakpoint`
- Instruction du debuggeur : `cont`
- Instruction du debuggeur : `kill`
- Instruction en vue d’un debugage : `halt`
- Utilisation des instructions du debuggeur : `cont halt kill`
- Avoir un arrêt momentané : `Pause`
- Avoir un arrêt momentané : `WAIT`
- Intercepter une erreur : `try..catch`
- Générer une erreur : `throw error ERROR`

# Chapitre 10 Les fonctions de géométrie 2-d

## 10.1 Généralités

Toutes les commandes graphiques faites dans une ligne d’entrée auront en réponse l’ouverture d’un écran graphique.
Les dessins de la géométrie 2-d se font en général dans un écran de `géométrie 2-d` qui est un écran graphique interactif muni d’un éditeur de commandes et d’une barre de menus (on ouvre un écran de `géométrie 2-d` avec `Alt+g`).
Les dessins faits dans un écran de `géométrie 2-d` sont interactifs : on peut définir des points et des segments avec la souris et modifier une figure en faisant bouger un de ses points avec la souris.

## 10.2 Les fonctions de base

- Effacer l’écran `DispG` : `erase`
- Effacer les axes : `switch_axes`
- Tracer les vecteurs unitaires : `vecteur_unitaire_Ox_2d Ox_2d_unit_vector`, `vecteur_unitaire_Oy_2d`, `Oy_2d_unit_vector`
- Tracer un repère : `repere_2d frame_2d`
- Effacer les points définis par `TX` et `TY`
- Avoir du papier pointé : `papier_pointe dot_paper`
- Avoir du papier avec des lignes : `papier_ligne
  line_paper`
- Avoir du papier quadrillé : `papier_quadrille
  grid_paper`
- Avoir du papier triangulé : `papier_triangule
  triangle_paper`
- Changer les paramètres de la fenêtre graphique : `xyztrange`

## 10.3 Les attributs des objets graphiques

- Généralités sur les attributs
- Les commandes d’attributs
- Les paramètres optionnels d’attributs
- Mettre une légende : `legende`
- Les commandes d’affichage : `display color affichage couleur`
  - Pour ne pas afficher le nom de l’objet
  - Mettre de la couleur
  - Pour dessiner une figure pleine
  - Les différents affichages de points
  - Les différents formes d’affichage des lignes
  - Les différentes épaisseurs d’affichage des lignes

## 10.4 Comment définir un objet géométrique sans le tracer : `nodisp`

`nodisp` appliqué à une commande permet de ne pas afficher la réponse, même quand il s’agit d’une commande graphique.
On peut aussi terminer la commande par `:;` pour ne pas générer de réponse.
On tape :

`C:=point(1+i)`
`cercle(C,sqrt(2))`

On obtient :

`Le point C d’affixe 1+i et le cercle de centre C et de rayon sqrt(2) sont tracés`

On tape :

`nodisp(C:=point(1+i))`

Ou on tape :

`C:=point(1+i):;`

puis

`cercle(C,sqrt(2))`

On obtient :

`Seul le cercle de centre 1+i et de rayon sqrt(2) est tracé`

## 10.5 Comment définir et tracer sans nom, un objet géométrique

`nodisp` permet de définir un objet géométrique sans le tracer. On peut ensuite tracer l’objet en mettant comme commande son nom, mais alors, son nom n’apparaitra pas sur la figure.
On peut aussi définir un objet géométrique et utiliser `eval`. On tape :

`nodisp(C:=point(1+i))`

Ou on tape :

`C:=point(1+i):;`

puis on tape :

`C`

Ou on tape :

`eval(C:=point(1+i))`

On obtient :

`Le point 1+i est marqué d’une croix mais il n’a pas de nom`

## 10.6 Comment définir et tracer un objet géométrique avec son nom

L’affectation d’un objet géométrique dans une variable permet de définir cet objet géométrique et de le tracer avec une légende ayant comme nom, le nom de la variable.
Si on veut donner à cet objet géométrique un nom différent de celui de la variable, on peut définir l’objet géométrique avec une affectation qui se termine par `:;` et utiliser `legende`. Voici des exemples : On tape :

`nodisp(B:=point(1+i))`

Ou on tape :

`B:=point(1+i):;`

Le point `B` est défini mais n’est pas tracé.
puis on tape :

`legende(B,"Bien")`

Ou on tape :

`point(affixe(B),legende="Bien")`

On obtient :

`Le point 1+i est marqué d’une croix et a comme nom "Bien"`

Remarque
Si on veut définir l’objet géométrique sans le tracer, puis le faire apparaitre avec son nom, on peut aussi utiliser `eval` (voir la commande `eval` 6.14.2).
On tape :

`nodisp(B:=point(1+i))`

Ou on tape :

`B:=point(1+i):;`

Le point `B` est défini mais n’est pas tracé.
puis on tape :

`B:=eval(B,1))`

Ou on tape :

`B:=B`

Ou on tape :

`legende(B,"B")`

Ou on tape :

`point(affixe(B),legende="B")`

On obtient :

`Le point 1+i est marqué d’une croix et a comme nom "B"`

Si on tape :

`B:=eval(B,2))`

On obtient :

`Le point 1+i est marqué d’une croix et n’a pas de nom`

## 10.7 Comment faire une démonstration : `assume`

Pour pouvoir faire une démonstration en géométrie, il suffit de demander au calcul formel de faire les calculs, en choisisant bien les paramètres du problème et ces paramètres doivent être formels....En géométrie les points peuvent avoir des coordonnèes exactes ou numériques ou formelles. Mais pour faire une figure, il faut affecter les paramètres formels. On peut le faire de différentes façons :

- on utilise a commande `assume` avant la création du point à coordonnèes formelles. Par exemple `assume(a=2.1);A:=point(a+i);` fera la figure en donnant à `a` la valeur `2.1`, mais `a` ne sera pas affecté dans les calculs qui seront faits ultérieurement avec le paramètre formel `a` : si on tape `longueur(0,A)`, on obtient `sqrt((-a)```^```2+1)`
- on utilise l’écran de configuration des attributs d’un point déjà crée avec des coordonnèes exactes ou numériques et on coche la rubrique `symb` figurant sur cet écran.
  Pour faire apparaitre l’écran de configuration des attributs d’un point où figure la rubrique `symb`, il faut être en mode `point` ou en mode `Pointeur` et uniquement dans ces 2 modes. On suppose que l’on a déjà défini un point, par exemple `A:=point(2.1,1)`. On clique sur `A` avec le bouton droit de la souris, on fait apparaitre l’écran de configuration des attributs du point `A` où figure la rubrique `symb`. On coche `symb` avec la souris et cela a pour effet de rajouter les deux lignes `assume(Ax=[2.1,-5.0,5.0])`, `assume(Ay=[1,-5.0,5.0])` et de définir automatiquement le point `A` avec les coordonnées symboliques `(Ax,Ay)`. Attention la rubrique `symb` n’apparait que dans l’écran de configuration des attributs d’un point non symbolique : autrement dit si on a défini un point avec des coordonnées symboliques c’est définitif !

## 10.8 Les points en géométrie plane

- Les points et les nombres complexes
- Le point en géométrie plane : `point`
- Définir au hasard un point 2-d : `point2d`
- Le point en polaire en géométrie plane : `polar_point point_polaire`
- Un des points d’intersection de deux objets géométriques : `single_inter inter_unique inter_droite
  line_inter`
- Les points d’intersection de deux objets géométriques : `inter`
- Orthocentre d’un triangle : `orthocenter orthocentre`
- Le milieu d’un segment : `midpoint milieu`
- L’isobarycentre de n points : `isobarycenter
  isobarycentre`
- Point défini comme barycentre de n points : `barycenter barycentre`
- Le centre d’un cercle : `centre center`
- Les sommets d’un polygone : `vertices vertices_abc
  sommets sommets_abc`
- Les sommets d’un polygone : `vertices_abca sommets_abca`
- Point sur un objet géométrique : `element`

## 10.9 Les droites en géométrie plane

- La droite et la droite orientée en géométrie plane : `line droite`
- La demi-droite en géométrie plane : `half_line demi_droite`
- Le segment en géométrie plane : `segment`
- Le segment : `Line`
- Le vecteur en géométrie plane : `vector vecteur`
- Les droites parallèles : `parallel parallele`
- Les droites perpendiculaires en 2-d : `perpendicular perpendiculaire`
- Les tangentes à un objet géométrique plan : `tangent`
- La médiane d’un triangle issue d’un sommet : `median_line mediane`
- La hauteur d’un triangle issue d’un sommet : `altitude hauteur`
- La médiatrice d’un segment : `perpen_bisector mediatrice`
- La bissectrice intérieure d’un angle : `bisector bissectrice`
- La bissectrice extérieur d’un angle : `exbisector exbissectrice`

## 10.10 Les triangles

Pour les dessins dans l’espace voir la section 11.7

- Généralités
- Le triangle quelconque : `triangle`
- Le triangle isocèle : `isosceles_triangle triangle_isocele`
- Le triangle rectangle : `right_triangle triangle_rectangle`
- Le triangle équilatèral : `equilateral_triangle` `triangle_equilateral`

## 10.11 Les quadrilatères

Voir aussi : 11.7.1 pour la géométrie 3-d.
Pour les dessins dans l’espace voir la section 11.8

- Généralités
- Le carré : `square carre`
- Le losange : `rhombus losange`
- Le rectangle : `rectangle`
- Le parallélogramme : `parallelogram parallelogramme`
- Le quadrilatère : `quadrilateral quadrilatere`

## 10.12 Les polygones

Voir aussi : 11.9 pour la géométrie 3-d.

- L’hexagone : `hexagon hexagone`
- Les polygones réguliers : `isopolygon isopolygone`
- Le polygone : `polygon polygone`
- La ligne polygonale : `open_polygon polygone_ouvert`
- L’enveloppe convexe de points du plan: `convexhull`

## 10.13 Les cercles

- Le cercle et ses arcs : `circle cercle`
- Les arcs de cercle : `arc`
- Le cercle (compatibilité TI): `Circle`
- Le cercle inscrit : `incircle inscrit`
- Le cercle circonscrit : `circumcircle circonscrit`
- Le cercle exinscrit : `excircle exinscrit`
- Puissance d’un point par rapport à un cercle : `powerpc puissance`
- Axe radical de deux cercles : `radical_axis axe_radical`

## 10.14 Les coniques

- L’ellipse : `ellipse`
- L’hyperbole : `hyperbola hyperbole`
- La parabole : `parabola parabole`

## 10.15 Les mesures

- L’affixe d’un point ou d’un vecteur : `affix affixe`
- L’abscisse d’un point ou d’un vecteur : `abscissa abscisse`
- L’ordonnée d’un point ou d’un vecteur : `ordinate ordonnee`
- Les coordonnées d’un point, d’un vecteur ou d’une droite : `coordinates coordonnees`
- Les coordonnées rectangulaire d’un point : `rectangular_coordinates coordonnees_rectangulaires`
- Les coordonnées polaire d’un point : `polar_coordinates coordonnees_polaires`
- L’équation cartésienne d’un objet géométrique : `equation`
- L’équation paramétrique d’un objet géométrique : `parameq`

## 10.16 Les mesures

- Remarques générales sur l’affichage des mesures
- La longueur d’un segment et distance entre les deux objets géométriques : `distance longueur`
- La longueur d’un segment et son affichage : `distanceat distanceen` et `distanceatraw distanceenbrut`
- Le carré de la longueur d’un segment : `distance2 longueur2`
- La mesure d’un angle : `angle`
- La mesure d’un angle et son affichage : `angleat angleen` et `angleatraw angleenbrut`
- Représentation graphique de l’aire d’un polygone : `tracer_aire graphe_aire aire_graphe plotarea areaplot`
- Aire d’un polygone : `area aire`
- L’aire d’un polygone et son affichage : `areaat aireen` et `areaatraw aireenbrut`
- Périmètre d’un polygone : `perimeter perimetre`
- Périmètre d’un polygone et son affichage :`perimeterat perimetreen` et `perimeteratraw perimetreenbrut`
- Pente d’une droite : `slope pente`
- Pente d’une droite et son affichage : `slopeat, penteen` et `slopeatraw, penteenbrut`
- Avoir comme réponse la valeur d’une mesure affichée : `extract_measure, extraire_mesure`
- Le rayon d’un cercle : `radius rayon`
- La longueur d’un vecteur : `abs`
- L’angle d’un vecteur avec Ox : `arg`
- Pour normaliser un nombre complexe : `normalize`

## 10.17 Les transformations

- Généralités
- La translation : `translation`
- La symétrie droite et la symétrie point : `reflection symetrie`
- La rotation : `rotation`
- L’homothétie : `homothety homothetie`
- La similitude : `similarity similitude`
- L’inversion : `inversion`
- La projection orthogonale : `projection`

## 10.18 Les propriétés

- Savoir si 1 point est sur un objet graphique : `is_element est_element`
- Savoir si 3 points sont alignés : `is_collinear est_aligne`
- Savoir si 4 points sont cocycliques : `is_concyclic est_cocyclique`
- Savoir si 1 point est à l’intérieur d’un polygone ou d’un cercle : `is_inside est_dans`
- Savoir si on a un triangle équilatéral : `is_equilateral est_equilateral`
- Savoir si on a un triangle isocéle : `is_isosceles est_isocele`
- Savoir si on a un triangle rectangle ou si on a un rectangle : `is_rectangle est_rectangle`
- Savoir si on a un carré : `is_square est_carre`
- Savoir si on a un losange : `is_rhombus est_losange`
- Savoir si on a un parallélogramme : `is_parallelogram est_parallelogramme`
- Savoir si 2 droites sont parallèles : `is_parallel est_parallele`
- Savoir si 2 droites 2-d sont perpendiculaires : `is_perpendicular est_perpendiculaire`
- Savoir si 2 cercles sont orthogonaux : `is_orthogonal est_orthogonal`
- Savoir si des éléments sont conjugués : `is_conjugate est_conjugue`
- Savoir si 4 points forment un division harmonique : `is_harmonic est_harmonique`
- Ces droites sont en faisceau ? `is_harmonic_line_bundle est_faisceau_droite`
- Ces cercles sont-ils en faisceau : `is_harmonic_circle_bundle est_faisceau_cercle`

## 10.19 La division harmonique, pôles et polaires

- Point divisant un segment dans le rapport k : `division_point point_div`
- Le birapport de 4 points alignés : `cross_ratio birapport`
- Division harmonique : `harmonic_division div_harmonique`
- Le conjugué harmonique : `harmonic_conjugate conj_harmonique`
- Pôle et polaire : `pole` et `polar polaire`
- Polaire réciproque: `reciprocation polaire_reciproque`

## 10.20 Les lieux et les enveloppes

- Les lieux : `locus lieu`
- Les enveloppes : `envelope enveloppe`
- La trace d’un objet géométrique: `trace`

# Chapitre 11 Les fonctions de géométrie 3-d

## 11.1 Généralités

Les graphes ou les dessins de la géométrie 3-d se font dans un écran graphique 3-d qui s’ouvre automatiquement en réponse d’une commande graphique 3-d.
Les dessins de la géométrie 3-d se font en général dans un écran de `géométrie 3-d` qui est un écran graphique muni d’un éditeur de commandes et d’une barre de menus at que l’on ouvre avec `Alt+h`.
Si on clique dans la fenêtre graphique avec la souris, en dehors du parallélépipéde servant à la représentation, on peut faire tourner les axes x, y ou z, soit avec les touches `x`, `X`, `y`, `Y`, `z`, `Z`, soit en bougeant la souris sans relacher son bouton. Cela modifie l’axe de vision (axe passant par l’observateur et de vecteur directeur la direction de la visée de l’objet) et le plan de vision (plan perpendiculaire à l’axe de vision dont l’équation est inscrite en haut de l’écran). Le plan de vision est matérialisé par son intersection avec le parallélépipéde servant à la représentation, ces droites d’intersection sont dessinée en pointillé.
On peut aussi translater le plan de vision, le long de l’axe de vision grâce à la molette de la souris : les plans successifs sont obtenus par une translation de vecteur parallèle à l’axe de vision.
On peut se servir d’attributs pour faire une représentation graphique 3-d comme la couleur, l’épaisseur, les lignes en pointillé pour cela voir 10.3. Mais, les points ont toujours la forme d’un carré et il faut mettre une epaisseur d’au moins 3 si on veut le voir (`point_width=3`).
On peut faire des dessins en perspective ou en repère orthonormé (en cochant `Proj_ortho` dans la configuration graphique (bouton `cfg`)), les surfaces sont transparentes ou non et peuvent être éclairées par 8 spots que l’on peut placer en diffèrents endroits repérés par leur coordonnées homogènes (on configure ses spots avec les boutons `l0,l1..l7` situés dans la configuration graphique).
Ces dessins sont interactifs : on peut faire bouger, avec la souris, les points situés dans le plan de vision, et aussi déplacer ces points, avec la molette de la souris, sur une parallèle à l’axe de vision .

À noter que l’on peut aussi faire un zoom-in ou un zoom-out à l’aide des boutons `in` et `out` (voir 3.4).

Si dans la configuration du graphique, on coche `hidden3d`, la surface sera tracée sans dessiner les lignes qui sont cachées et si on veut voir les lignes cachées on décoche `hiden3d` (voir aussi 1.6.2).
Pour la traduction Latex de l’écran `3-d` on se reportera à la section 1.10.5.

## 11.2 Les angles d’Euler

Les angles d’Euler sont utilisés pour modifier le repère de visualisation. Rappel Soient deux repères : l’ancien (Oxyz) et le nouveau (OXYZ).
Soit Ou l’intersection du plan (OY,OZ) avec le plan (Ox,Oz) que l’on oriente arbitrairement.
Soient :

- Ra la rotation d’axe Oy et d’angle a=(Oz,Ou) qui transforme Ox en Ov et Oz en Ou,
- Rb la rotation d’axe Ou et d’angle b=(Ov,OX) qui transforme Ov en OX et Oy en Ow,
- Rc la rotation d’axe OX et d’angle c=(Ou,OZ) qui transforme Ow en OY et Ou en OZ.

On définit complètement la mise en place de (OXYZ) par rapport à (Oxyz) en donnant les angles a,b,c de (OXYZ) par rapport à (Oxyz) et en effectuant la composition de ces trois rotations : Rc@Rb@Ra.
Les angles d’Euler sont :
a=(Oz,Ou),
b=(Ov,OX),
c=(Ou,OZ).

Les dessins de la géométrie 3-d se font en choissisant comme repère Oxyz, Ox horizontal dirigé vers la droite, Oy vertical dirigé vers le haut et l’axe des z qui pointe vers vous.
Les mesures en degré de a,b,c sont mises dans ry,rz,rx.
Selon l’orientation de Ou, les valeurs de a,b,c ne sont pas uniques :
a,b,c et a+180,180−b,c+180 mettent en place le même repère OXYZ,
Lorsque b est un angle droit, c’est à dire que l’axe OX et l’axe Oy ont le même support on n’a pas non plus unicité:
a,90,c et a+c,90,0 mettent en place le même repère OXYZ et
a,−90,c et a−c,−90,0 mettent en place le même repère OXYZ.
On peut donc choisir, l’angle b dans ]−90,90[ et les angles a et c dans ]−180,180] ou bien b dans −90,90 c=0 et a dans ]−180,180].

## 11.3 Les axes

- Tracer les vecteurs unitaires : `vecteur_unitaire_Ox_3d Ox_3d_unit_vector`, `vecteur_unitaire_Oy_3d Oy_3d_unit_vector`, `vecteur_unitaire_Oz_3d Oz_3d_unit_vector`
- Tracer un repère : `repere_3d frame_3d`

## 11.4 Les points

- Définir un point 3-d : `point`
- Définir un point 3-d au hasard : `point3d`
- Un des points d’intersection de deux objets géométriques : `single_inter line_inter inter_unique inter_droite`
- Les points d’intersection de deux objets géométriques : `inter`
- Le milieu d’un segment : `midpoint milieu`
- L’isobarycentre de n points : `isobarycenter isobarycentre`
- Point défini comme barycentre de n points : `barycenter barycentre`

## 11.5 Les lignes

- Définir une droite 3-d : `line droite`
- Définir une droite orientée en 3-d : `line droite`
- La demi-droite en 3-d: `half_line demi_droite`
- Le segment en 3-d : `segment`
- Le vecteur en 3-d : `vecteur`
- Plan et droites parallèles : `parallel parallele`
- Plans (ou droites) perpendiculaires : `perpendicular perpendiculaire`
- Droite orthogonale à un plan et plan orthogonal à une droite : `orthogonal`
- La perpendiculaire commune à deux droites 3-d : `common_perpendicular perpendicu- laire_commune`

## 11.6 Les plans

- Le plan : `plane plan`
- Le plan médiateur : `perpen_bisector mediatrice`
- Le plan tangent : `tangent`
- Plan orthogonal à une droite : `orthogonal`
- Plan perpendiculaire à un plan : `perpendicular perpendiculaire`

## 11.7 Les triangles dans l’espace

Le principe est de rajouter, si necessaire, un paramètre pour définir le plan du triangle et définir aussi l’orientation de ce plan. Pour la géométrie plane voir 10.10.

- Le triangle quelconque dans l’espace: `triangle`
- Le triangle isocèle dans l’espace : `isosceles_triangle triangle_isocele`
- Le triangle rectangle dans l’espace : `triangle_rectangle`
- Le triangle équilatèral dans l’espace : `equilateral_triangle triangle_equilateral`

## 11.8 Les quadrilatères dans l’espace

Voir aussi : 10.11 pour la géométrie plane.
Le principe est de rajouter si necessaire un paramètre pour définir le plan du quadrilatère et définir aussi l’orientation de ce plan.

- Le carré dans l’espace : `square carre`
- Le losange dans l’espace : `rhombus losange`
- Le rectangle dans l’espace : `rectangle`
- Le parallélogramme dans l’espace : `parallelogram parallelogramme`
- Les quadrilatères quelconques dans l’espace : `quadrilateral quadrilatere`

## 11.9 Les polygones dans l’espace

Voir aussi : 10.12 pour la géométrie plane.
Le principe est de rajouter si necessaire un paramètre pour définir le plan du polygone et définir aussi l’orientation de ce plan.

- L’hexagone : `hexagon hexagone`
- Les polygones réguliers dans l’espace : `isopolygon isopolygone`
- Les polygones quelconques dans l’espace : `polygon polygone`
- Ligne polygonale dans l’espace : `open_polygon polygone_ouvert`

## 11.10 Les cercles dans l’espace : `circle cercle`

Voir aussi : 10.13.1 pour la géométrie plane.
`cercle`, en géométrie 3-d, a comme argument :

- soit 3 points `A,B,C` non alignés : les deux premiers points définissent un diamètre du cercle et les trois points définissent le plan du cercle.
- soit un point `A`, un vecteur `v` et un point `C` non situé sur la droite définie par `A` et `v` : le point `A` est le centre du cercle, le point `B:=A+v` est un point du cercle et le plan `ABC` est le plan du cercle.

À noter que dans les 2 cas, le premier et le troisième argument peuvent être les coordonnées du point.
On tape :

`cercle(point(0,0,1),point(0,1,0),point(0,2,2))`

Ou on tape :

`cercle([0,0,1],point(0,1,0),point(0,2,2))`

Ou on tape :

`cercle([0,0,1],point(0,1,0),[0,2,2])`

On obtient :

`Un cercle de diamètre les points [0,0,1] et [0,1,0] situés dans le plan x=0`

On tape :

`cercle(point(0,0,1),[0,1,0],point(0,2,2))`

Ou on tape :

`cercle([0,0,1],[0,1,0],point(0,2,2))`

Ou on tape :

`cercle([0,0,1],[0,1,0],[0,2,2])`

On obtient :

`Un cercle de centre [0,0,1] et passant par le point [0,1,1] (donc de rayon 1) situés dans le plan x=0`

## 11.11 Les coniques dans l’espace

- L’ellipse dans l’espace : `ellipse`
- L’hyperbole dans l’espace : `hyperbola hyperbole`
- La parabole dans l’espace : `parabola parabole`

## 11.12 Les mesures

- L’abscisse d’un point 3-d : `abscissa abscisse`
- L’ordonnée d’un point 3-d : `ordinate ordonnee`
- La cote d’un point 3-d : `cote`
- Les coordonnées d’un point, d’un vecteur ou d’une droite 3-d : `coordinates coordonnees`
- L’équation cartésienne d’un objet géométrique : `equation`
- L’équation paramétrique d’un objet géométrique : `parameq`
- La longueur d’un segment: `distance longueur`
- Le carré de la longueur d’un segment : `distance2 longueur2`
- La mesure d’un angle : `angle`

## 11.13 Les propriétés

- Savoir si 1 objet géométrique est sur un objet graphique : `is_element est_element`
- Savoir si des points ou /et des droites sont coplanaires : `is_coplanar est_coplanaire`
- Savoir si droites ou /et plans sont parallèles `is_parallel est_parallele`
- Savoir si des droites ou/et plans sont perpendiculaires `is_perpendicular` `est_perpendiculaire`
- Orthogonalité de 2 droites ou 2 sphères : `is_orthogonal est_orthogonal`
- Savoir si 3 points sont alignés : `is_collinear est_aligne`
- Savoir si 4 points sont cocycliques : `is_concyclic est_cocyclique`
- Savoir si 5 points sont cospheriques : `is_cospheric est_cospherique`
- Savoir si on a un triangle équilatéral : `is_equilateral est_equilateral`
- Savoir si on a un triangle isocéle : `is_isosceles est_isocele`
- Savoir si on a un triangle rectangle ou si on a un rectangle : `est_rectangle`
- Savoir si on a un carré : `is_square est_carre`
- Savoir si on a un losange : `is_rhombus est_losange`
- Savoir si on a un parallélogramme : `is_parallelogram est_parallelogramme`

## 11.14 Les transformations

- Généralités
- La translation : `translation`
- La symétrie par rapport à un plan, une droite ou un point : `reflection symetrie`
- La rotation : `rotation`
- L’homothétie : `homothety homothetie`
- La similitude : `similarity similitude`
- L’inversion : `inversion`
- La projection orthogonale : `projection`

## 11.15 Les surfaces

- Le cône : `cone`
- Le demi-cône : `half_cone demi_cone`
- Le cylindre : `cylinder cylindre`
- La sphère : `sphere`
- Surface définie par une fonction : `funcplot`
- Surface définie par une équation paramétrique : `paramplot`

## 11.16 Les solides

- Le cube : `cube`
- Le tétraèdre : `tetrahedron pyramid tetraedre pyramide`
- Le parallélépipède : `parallelepiped parallelepipede`
- Le prisme : `prism prisme`
- Les polyèdres : `polyhedron polyedre`
- Les sommets : `sommets`
- Les faces : `faces`
- Les arêtes : `line_segments aretes`

## 11.17 Les solides de Platon

Pour les construire, on donne le centre, un sommet et un 3ème point définissant un plan de symétrie.
Pour accélérer les calculs, il peut être utile faire seulement des calculs approchés en utilisant `evalf` dans l’argument : on tapera, par exemple :
`cube_centre(evalf([0,0,0],[3,2,1],[1,1,0]))`

- : `centered_tetrahedron tetraedre_centre`
- : `centered_cube cube_centre`
- L’octaèdre : `octahedron octaedre`
- Le dodecaèdre : `dodecahedron dodecaedre`
- L’icosaèdre : `icosahedron icosaedre`

## 11.18 Figures et preuves d”exercices avec `Xcas`

- Exercice 1
- Exercice 2
- Exercice 3 prolongement de l’exercice 2

# Chapitre 12 Commandes multimédia

## 12.1 Son

- Lecture d’un fichier wav : `readwav`
- Écriture d’un fichier wav : `writewav`
- Écouter un son numérisé `playsnd`
- Préparer une donnée de son numérisée `soundsec`

## 12.2 Comment lire et créer une image

- Qu’est-ce qu’une image ?
- Pour lire une image : `readrgb`
- Pour visualiser une image
- Pour recréer ou créer une image : `writergb`

# Chapitre 13 Utilisation de `giac` à l’intérieur d’un programme

## 13.1 Utilisation dans un programme `C++`

On peut utiliser `giac` à l’intérieur d’un programme `C++` en mettant au début du programme par exemple `essai.cc` :
`#include<giac/giac.h>`
puis en compilant le compilant avec :
`c++ -g essai.cc -lgiac -lgmp`
et en l’exécutant en mettant :
`./a.out`
Exemple

    // -*- compile-command: "g++ -g pgcd.cc -lgiac -lgmp" -*-
    #include <giac/giac.h>

    using namespace std;
    using namespace giac;

    gen pgcd(gen a,gen b){
      gen q,r;
      for (;b!=0;){
        r=irem(a,b,q);
        a=b;
        b=r;
      }
      return a;
    }

    int main(){
      cout << "Entrer 2 entiers";
      gen a,b;
      cin >> a >> b;
      cout << pgcd(a,b) << endl;
      return 0;
    }

## 13.2 Pour définir de nouvelles fonctions de `giac`

On peut définir de nouvelles fonctions qui deviendront des fonctions de `giac`. Pour définir par exemple la fonction de nom `pgcd` ( et c’est l’instruction : `const string _pgcd_s("pgcd")`; qui définit le nom de la fonction), on tape :

    // -*- mode:C++ ; compile-command: "g++ -I.. -fPIC -DPIC
    -g -c pgcd.cpp  -o pgcd.lo && ln -sf pgcd.lo pgcd.o && gcc
    -shared pgcd.lo -lc  -Wl,-soname -Wl,libpgcd.so.0 -o
    libpgcd.so.0.0.0 &&  ln -sf libpgcd.so.0.0.0 libpgcd.so.0 &&
     ln -sf libpgcd.so.0.0.0 libpgcd.so" -*-
    using namespace std;
    #include <stdexcept>
    #include <cmath>
    #include <cstdlib>
    #include <giac/giac.h>
    #include "pgcd.h"

    #ifndef NO_NAMESPACE_GIAC
    namespace giac {
    #endif // ndef NO_NAMESPACE_GIAC

      gen pgcd(gen a,gen b){
        gen q,r;
        for (;b!=0;){
          r=irem(a,b,q);
          a=b;
          b=r;
        }
        return a;
      }
      gen _pgcd(const gen & args){
        if ((args.type!=_VECT)||(args._VECTptr->size()!=2))
          setsizeerr();
        vecteur &v=*args._VECTptr;
        return pgcd(v[0],v[1]);
      }
      const string _pgcd_s("pgcd");
      unary_function_unary __pgcd(&_pgcd,_pgcd_s);
      unary_function_ptr at_pgcd (&__pgcd,0,true);

    #ifndef NO_NAMESPACE_GIAC
    } // namespace giac
    #endif // ndef NO_NAMESPACE_GIAC

On compile avec la commande située après `compile-command` de l’en-tête du programme. Puis, pour l’insérer dans une session `Xcas`, il faut taper la commande `insmod` suivi du chemin absolu complet de la librairie, par exemple :
`insmod("/home/user/giac-0.4.0/doc/en/libpgcd.so")`.
Cela suppose que le source de giac a été désarchivé dans le répertoire /home/user).

- - Le type `gen`

> Ce document a été traduit de LATEX par H E V E A