Cascmd FR
Cascmd FR
Cascmd FR
et
Mathmatiques
avec
Xcas
Rene De Graeve
Matre de Confrence Grenoble I
2
Remerciements
Je remercie :
Bernard Parisse pour ses prcieux conseils et ses remarques sur ce texte,
3
Prface
Bernard Parisse
Matre de Confrences lUniversit de Grenoble I
Dveloppeur du logiciel de calcul formel giac et de son interface Xcas. La version jour se rcupre sur ;
http://www-fourier.ujf-grenoble.fr/parisse/giac.html
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
giac
55
55
55
55
56
56
56
57
57
57
Linterface Xcas
1.1 Mise en route de linterface Xcas . . . . . . . . . . . . . . . . .
1.1.1 Sous Unix . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.2 Sous Windows . . . . . . . . . . . . . . . . . . . . . . .
1.1.3 Sous MacOS . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Les diffrents niveaux dentre . . . . . . . . . . . . . . . . . . .
1.3 Que voit-on au dmarrage ? . . . . . . . . . . . . . . . . . . . . .
1.4 Les menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.1 Le menu Fich . . . . . . . . . . . . . . . . . . . . . . .
1.4.2 Le menu Edit . . . . . . . . . . . . . . . . . . . . . . .
1.4.3 Le menu Cfg . . . . . . . . . . . . . . . . . . . . . . . .
1.4.4 Le menu Aide . . . . . . . . . . . . . . . . . . . . . . .
1.4.5 Les menus des commandes de calcul . . . . . . . . . . . .
1.5 Comment bien grer son espace de travail . . . . . . . . . . . . .
1.5.1 Pour slectionner ou dslectionner un niveau . . . . . . .
1.5.2 Pour remplir les niveaux . . . . . . . . . . . . . . . . . .
1.6 Les diffrentes configurations . . . . . . . . . . . . . . . . . . . .
1.6.1 Configuration du Cas . . . . . . . . . . . . . . . . . . . .
1.6.2 Configuration du graphique avec le menu :
CfgIConfiguration graphique . . . . . . . . .
1.6.3 Configuration gnrale . . . . . . . . . . . . . . . . . . .
1.7 Les diffrentes configurations avec les commandes . . . . . . . .
1.7.1 Le fichier .xcasrc . . . . . . . . . . . . . . . . . . . .
1.7.2 La configuration gnrale et la fonction : widget_size
1.7.3 La configuration du cas avec la fonction : cas_setup . .
1.7.4 Nombres de chiffres significatifs : Digits DIGITS . .
59
59
59
59
59
59
61
62
62
64
65
67
69
71
71
71
72
72
0.2
73
74
74
74
75
75
76
1.8
1.9
1.10
1.11
1.12
1.13
Saisie
2.1 Pour crire un commentaire : Alt+c . . . . . . . . . . .
2.2 Lditeur dexpressions . . . . . . . . . . . . . . . . . .
2.2.1 Comment diter une quation . . . . . . . . . .
2.2.2 Comment slectionner . . . . . . . . . . . . . .
2.2.3 Comment diter une chane de caractres . . . .
2.2.4 Utilit de lditeur dexpressions . . . . . . . . .
2.3 Les diteurs de matrices et les tableurs . . . . . . . . . .
2.3.1 Les sauvegardes dun tableur . . . . . . . . . . .
2.3.2 Les menus dun tableur . . . . . . . . . . . . . .
2.3.3 La configuration dun tableur . . . . . . . . . . .
2.3.4 Les boutons dun tableur . . . . . . . . . . . . .
2.4 Les commandes deffacement . . . . . . . . . . . . . .
2.4.1 Effacer dans le tableur . . . . . . . . . . . . . .
2.4.2 Effacer lcran DispG de gomtrie : ClrGraph
2.4.3 Effacer les crans de gomtrie : erase . . . .
2.4.4 Effacer une ligne de commande : touche esc . .
78
79
79
79
79
80
81
81
81
82
82
82
82
83
83
83
83
84
84
85
85
85
85
85
86
86
86
86
87
. . . . . 87
. . . . . 88
. . . . . 88
. . . . . 89
. . . . . 89
. . . . . 90
. . . . . 90
. . . . . 90
. . . . . 90
. . . . . 91
. . . . . 92
. . . . . 92
. . . . . 92
ClrDraw 92
. . . . . 92
. . . . . 93
2.4.5
2.5
2.6
Effacer les noms des variables dune seule lettre minuscule : rm_a_z . . . . . . . . . . . . . . . . . . . . . . . 93
2.4.6 Effacer toutes les variables : rm_all_vars . . . . . . . 93
Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
2.5.1 Le nom des variables et la variable CST . . . . . . . . . . 94
2.5.2 Laffectation : := => sto Store . . . . . . . . . . . 94
2.5.3 Laffectation par rfrence dans une variable dsignant un
lment dune liste ou dune matrice : =< . . . . . . . . 97
2.5.4 Lincrmentation dune variable : += -= *= /= . . . . 98
2.5.5 Archiver et dsarchiver des variables et leur contenu : archive
unarchive . . . . . . . . . . . . . . . . . . . . . . . . 99
2.5.6 Copier sans lvaluer le contenu dune variable : CopyVar 99
2.5.7 Faire une hypothse sur une variable : assume supposons100
2.5.8 Faire une hypothse supplementaire sur une variable : additionally104
2.5.9 Connaitre les hypothses faites sur une variable : about . 104
2.5.10 Effacer le contenu dune variable : purge DelVar . . . 105
2.5.11 Effacer le contenu de toutes les variables : restart . . . 106
2.5.12 Accs aux rponses : ans(n) . . . . . . . . . . . . . . . 106
2.5.13 Pour ne pas afficher la rponse : nodisp :; . . . . . . . 106
2.5.14 Accs aux questions : quest(n) . . . . . . . . . . . . . 107
Les rpertoires . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
2.6.1 Comment crer un rprtoire sur vtre disque dur . . . . . 107
2.6.2 Comment sauver un fichier dans un rprtoire de vtre
disque dur . . . . . . . . . . . . . . . . . . . . . . . . . . 107
2.6.3 Comment crer un rprtoire de travail : NewFold . . . . 108
2.6.4 Comment aller dans un rprtoire de travail : SetFold . 108
2.6.5 Nom du rprtoire en cours : GetFold . . . . . . . . . . 109
2.6.6 Effacer un rprtoire vide : DelFold . . . . . . . . . . . 109
2.6.7 Comment connaitre les variables et les rprtoires crs :
VARS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
2.6.8 Lire un fichier depuis Xcas : read . . . . . . . . . . . . 109
Le graphique
3.1 Gnralits . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Lcran graphique et ses boutons . . . . . . . . . . . . . . . .
3.3 La configuration de lcran graphique . . . . . . . . . . . . .
3.4 Configuration graphique avec cfg . . . . . . . . . . . . . . .
3.5 Pour transformer un graphique en un fichier Latex . . . . . . .
3.6 Graphe dune matrice de transition probabiliste :
graphe_probabiliste . . . . . . . . . . . . . . . . . .
3.7 Graphe dune fonction : plotfunc funcplot DrawFunc
3.7.1 Graphe en 2-d . . . . . . . . . . . . . . . . . . . . . .
3.7.2 Graphe en 3-d . . . . . . . . . . . . . . . . . . . . . .
3.7.3 Graphe "3-d" avec les couleurs de larc en ciel . . . .
3.7.4 Graphe en "4D" . . . . . . . . . . . . . . . . . . . . .
3.8 Graphe 2-d pour compatibilit Maple : plot graphe . . . .
3.9 Surface 3-d pour compatibilit Maple plot3d graphe3d .
3.10 Graphe dune droite et les tangentes un graphe . . . . . . . .
.
.
.
.
.
.
.
.
.
.
111
111
112
113
113
114
. . 114
Graph117
. . 117
. . 118
. . 119
. . 119
. . 120
. . 121
. . 122
3.11
3.12
3.13
3.14
3.15
3.16
3.17
3.18
3.19
3.20
3.21
3.22
3.23
3.24
Calcul numrique
4.1 Codage des rels et des dcimaux . . . . . . . . . . . . . . . . .
4.1.1 Un exemple : codage de 3.1 et de 3 . . . . . . . . . . . .
4.1.2 Diffrence de codage entre (3.1-3) et 0.1 . . . . . . . . . .
4.2 valuation des rels : evalf approx et Digits . . . . . . . .
4.3 Quelques fonctions . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.1 Solution approche dune quation : newton . . . . . . .
4.3.2 Calcul approch du nombre driv : nDeriv . . . . . . .
4.3.3 Calcul approch dintgrales avec la mthode de Romberg :
romberg nInt . . . . . . . . . . . . . . . . . . . . . .
145
145
145
146
146
150
150
151
151
4.3.4
4.4
4.5
4.6
4.7
4.8
4.9
152
152
154
155
155
156
157
157
157
158
158
159
159
159
159
160
160
160
160
161
162
171
euler_gamma171
. . . . . 171
. . . . . 171
. . . . . 171
. . . . . 172
. . . . . 173
. . . . . 173
. . . . . 174
10
6.5
6.6
6.7
11
12
6.14
6.15
6.16
6.17
6.18
13
14
6.19
6.20
6.21
6.22
6.23
15
16
6.28
6.29
6.30
6.31
6.32
6.33
17
18
6.34
6.35
6.36
6.37
19
20
6.41
6.42
6.43
6.44
21
22
6.46
6.47
6.48
6.49
6.50
6.51
6.52
6.53
23
24
6.54
6.55
6.56
6.57
6.58
7.2
7.3
25
26
7.4
7.5
27
28
8
8.7
29
683
683
683
684
684
685
685
685
685
686
686
686
687
687
687
687
688
688
689
689
690
30
9.11
9.12
9.13
9.14
9.15
9.16
9.17
31
32
33
34
35
36
Index
=<, 97, 263, 474, 662, 664, 665
Note_index 1 , 55
==, 171
@, 263, 273
=>, 94, 164, 263, 312, 662, 664
@@, 263, 274
=>+, 379
k, 172
>, 171
, 243, 278
>=, 171
*, 269
?, 81, 95
*, 312
[[]], 175, 415, 424
+, 263, 268
[], 175, 409, 413, 415, 416, 419, 423,
+, 312
424, 430
-, 268
#, 680
/, 269
$, 263, 280, 416
(), 415
%, 193, 263, 387
*, 269, 389, 459, 469
% , 398
*=, 98
+, 180, 181, 263, 268, 388, 419, 456, % 0, 194
% {% }, 420
468
%%%{%%%}, 326
+,-,*,/,, 215, 234
%e, 171
+infinity, 171
%i, 171
415
%pi, 171
-, 263, 268, 389, 457, 468
&*, 469
-=, 98
&&, 172
->, 263, 265
&, 470
-inf, 171
, 263, 392, 470
-infinity, 171
_, 163, 168
.*, 458, 471
|, 253
.+, 456, 468
!, 172, 204
.-, 457, 468
!=, 171
.., 408, 416
", 175
./, 458, 471
"\n", 176
., 471
:=, 474
/, 263, 269, 391, 393, 495
{}, 654
//, 654
/=, 98
invztrans, 572
:+=, 98
: ;, 106
a2q, 535
:=, 94, 263, 265, 662, 664
abcuv, 361
<, 171
about, 104, 317
<=, 171
abs, 235, 269, 763
1. Dans lindex, selon le style on a une abscissa, 743, 814
abscisse, 743, 814
commande ou une option ou une valeur
37
38
INDEX
accumulate_head_tail, 584
arcsin, 270, 303
acos, 270, 303
arcsinh, 270
acos2asin, 306
arctan, 270, 303
acos2atan, 306
arctanh, 270
acosh, 270
area, 126, 755
acot, 303
areaat, 755
acsc, 303
areaatraw, 755
add, 443
areaplot, 127, 754
additionally, 104
aretes, 838
additionally, 100, 104
arg, 235, 763
adjoint_matrix, 521
args, 683
affichage, 696, 702, 748
as_function_of, 274
affichage, 697, 703, 705
asc, 178
afficher, 660
asec, 303
affix, 742
asin, 270, 303
affixe, 742
asin2acos, 307
aire, 126, 755
asin2atan, 307
aire_graphe, 127, 754
asinh, 270
aireen, 748, 755
assign, 669
aireenbrut, 748, 755
assume, 100, 316, 710
Airy_Ai, 227
at, 424, 472
Airy_Bi, 227
atan, 270, 303
alea, 206, 605, 606, 608, 609
atan2acos, 307
algsubs, 256
atan2asin, 307
algvar, 575
atanh, 270
alog10, 270
atrig2ln, 311
alors, 670
augment, 431, 487
altitude, 726
autosimplify, 252
and, 172
axe_radical, 740
angle, 752, 818
axes, 697
angle_radian, 79
bareiss, 495
angleat, 753
barycenter, 237, 717, 793
angleatraw, 753
barycentre, 237, 717, 793
angleen, 753
base, 183, 313
angleenbrut, 753
basis, 498
animate, 140
begin, 651, 654
animate3d, 140
bernoulli, 212
animation, 141
Beta, 225
ans, 106
betad, 627
append, 431
betad_cdf, 628
apply, 447
betad_icdf, 628
approx, 146
bezier, 133
approx_mode, 79
bezout_entier, 199
arc, 737
Binary, 264
arccos, 270, 303
binomial, 205, 613
arccosh, 270
binomial,
452, 464
archive, 99
binomial_cdf, 614
arcLen, 295
INDEX
binomial_icdf, 614
birapport, 781
bisection_solver, 156
bisector, 726
bissectrice, 726
bitand, 174
bitor, 174
bitxor, 174
black, 702
blanc, 702
bleu, 702
BlockDiagonal, 467
blockmatrix, 485
blue, 702
border, 489
bounded_function, 298
boxwhisker, 460, 492, 584
break, 683
breakpoint, 686
brent_solver, 157
c1oc2, 232
c1op2, 232
camembert, 589
canonical_form, 244
cap_flat_line, 705
cap_round_line, 705
cap_square_line, 705
Capture ecran, 64
carre, 730, 805
cas_setup, 72, 75
case, 672
cat, 180, 181
catch, 689
cauchy, 630
cauchy_cdf, 631
cauchy_icdf, 632
cauchyd, 630
cauchyd_icdf, 632
cdf, 638
ceil, 269
ceiling, 269
Celsius2Fahrenheit, 166
center, 718
center2interval, 410
centered_cube, 839
centered_tetrahedron, 839
centre, 718
39
cercle, 736, 812
cFactor, 248
cfactor, 248
cfsolve, 160
changebase, 497
char, 179
charpoly, 519
chinrem, 362
chisquare, 623
chisquare_cdf, 623
chisquare_icdf, 624
chisquared, 623
chisquaret, 642
cholesky, 528
chrem, 201
Ci, 218
Circle, 738
circle, 736, 812
circonscrit, 739
circumcircle, 739
classes, 583
ClrDraw, 92
ClrGraph, 84, 92, 653, 685
ClrIO, 660
coeff, 332
coeffs, 332
col, 480
col, 439, 441-443, 489-491
colDim, 494
coldim, 494
collect, 337
colNorm, 507
colnorm, 507
color, 696, 702
color, 157, 697, 703, 705
colspace, 499
colSwap, 485
colswap, 485
comb, 205
combine, 303
comDenom, 379
comment, 87, 654
common_perpendicular, 799
companion, 522
compare, 659
complex_mode, 79
complex_variables, 79
complexroot, 380
40
INDEX
INDEX
41
42
INDEX
exp2list, 173
equation, 747, 816
equation, 597, 599, 601, 603, exp2pow, 325
605
exp2trig, 308
equilateral_triangle, 729, 804
expand, 243
erase, 83, 84, 92, 691
expexpand, 324
erf, 221
expln, 312
erfc, 222
exponential, 633
ERROR, 690
exponential, 452, 464
error, 690
exponential_cdf, 634
est_aligne, 771, 822
exponential_icdf, 634
est_carre, 774, 825
exponential_regression, 598
est_cocyclique, 771, 823
exponential_regression_plot,
est_conjugue, 778
599
est_coplanaire, 819
exponentiald, 633
est_cospherique, 823
exponentiald_cdf, 634
est_dans, 771
exponentiald_icdf, 634
est_element, 770, 819
EXPR, 658
est_equilateral, 772, 824
expr, 182, 681
est_faisceau_cercle, 780
extract_measure, 762
est_faisceau_droite, 780
extraire_mesure, 762
est_harmonique, 779
ezgcd, 358
est_impair, 195
f2nd, 208, 378
est_inclus, 420
faces, 838
est_isocele, 773, 824
facteurs_premiers, 190
est_losange, 775, 826
Factor, 400
est_orthogonal, 777, 822
factor, 246, 338, 394, 398
est_pair, 194
factor_xn, 335
est_parallele, 777, 820
factorial, 185, 204
est_parallelogramme, 776, 827
factoriser, 246, 338, 394
est_perpendiculaire, 777, 821
factoriser_entier, 189
est_rectangle, 773, 825
factoriser_sur_C, 248
euler, 202
factors, 339
euler_gamma, 171
fadeev, 519
eval, 238, 707
Fahrenheit2Celsius, 166
eval_level, 241
faire, 676
evala, 243
FALSE, 171
evalb, 173
false, 171
evalc, 235
falsepos_solver, 157
evalf, 146, 206, 213, 576
fclose, 679
evalm, 468
fcoeff, 387
even, 194
fdistrib, 243
exact, 206, 576
feuille, 267, 409, 413
exbisector, 727
fft, 321
exbissectrice, 727
fieldplot, 135, 139
excircle, 739
filled, 697, 704
exinscrit, 739
findhelp, 81
exp, 269
fisher, 624
exp, 303, 312
INDEX
fisher, 452, 464
fisher_cdf, 625
fisher_icdf, 625
fisherd, 624
flatten, 423
float2rational, 206, 576
floor, 269
fMax, 296
fMin, 296
fonction_derivee, 277
fopen, 679
for, 673
format, 182
fourier_an, 313
fourier_bn, 314
fourier_cn, 315
fPart, 269
fpour, 673
fprint, 679
frac, 269
fracmod, 393
frame_2d, 693
frame_3d, 789
frames, 140, 697
frequences, 585
frequences_cumulees, 586
frequencies, 585
frobenius_norm, 507
froot, 386
fsi, 670
fsolve, 155, 159
ftantque, 676
fullparfrac, 312
FUNC, 658
funcplot, 117, 836
function_diff, 277
fxnd, 208, 378
43
44
hadamard, 470
half_cone, 835
half_line, 722, 795
halftan, 310
halftan_hyp2exp, 310
halt, 687
hamdist, 175
harmonic_conjugate, 782
harmonic_division, 781
has, 575
hasard, 206, 605, 606, 608,
609
hauteur, 726
head, 177, 426
Heaviside, 220
hermite, 371
hessenberg, 523
hessenberg, 519
hessian, 542
heugcd, 358
hexagon, 733, 810
hexagone, 733, 810
hidden_name, 702
hilbert, 467
histogram, 584
histogramme, 584
hold, 243
homothetie, 766, 831
homothety, 766, 831
horner, 340
hybrid_solver, 159
hybridj_solver, 160
hybrids_solver, 159
hybridsj_solver, 160
hyp2exp, 323
hyperbola, 741, 813
hyperbole, 741, 813
i, 171
i[], 411
iabcuv, 199
ibasis, 498
ibpdv, 292
ibpu, 293
icdf, 638
ichinrem, 199, 200
ichrem, 199, 200
icosaedre, 841
INDEX
icosahedron, 841
id, 269
identity, 463
idivis, 191
idn, 463
iegcd, 199
if, 670, 671
ifactor, 189
ifactors, 190
ifft, 322
IFTE, 95
ifte, 95
igamma, 224
igcd, 185, 355
igcdex, 199
ihermite, 525
ilaplace, 568
im, 235
imag, 235
image, 498
implicitplot, 130
impression, 64
in, 673
in_ideal, 375
incircle, 739
indets, 574
inequationplot, 125
inf, 171
infinity, 171
Input, 655
input, 655
InputStr, 655
inscrit, 739
insmod, 848
inString, 179
Int, 282
int, 282
int, 312
intDiv, 192
integer, 100, 313
integrate, 282
integration, 282
integrer, 282
inter, 715, 792
inter_droite, 713, 790
inter_unique, 713, 790
interactive_odeplot, 138
interactive_plotode, 138
INDEX
45
interp, 346
jacobi_symbol, 204
jaune, 702
intersect, 263, 414, 422
jordan, 517
interval2center, 410
JordanBlock, 467
inv, 393, 395, 495
jusqua, 675
Inverse, 401
jusque, 673
inverse, 395, 495
inversion, 768, 833
keep_pivot, 550
invisible_point, 704
ker, 498
invlaplace, 568
kernel, 498
iPart, 269
kill, 687
iquo, 192
kolmogorovd, 637
iquorem, 194
kolmogorovt, 637, 646
iratrecon, 393
irem, 193
l1norm, 456, 508
is_collinear, 771, 822
l2norm, 456, 508
is_concyclic, 771, 823
label, 677
is_conjugate, 778
labels, 697
is_coplanar, 819
lagrange, 346
is_cospheric, 823
lagrange, 495, 519
is_cycle, 231
laguerre, 371
is_element, 770, 819
laplace, 568
is_equilateral, 772, 824
laplacian, 541
is_harmonic, 779
latex, 83
is_harmonic_circle_bundle, 780
lcm, 189, 359
is_harmonic_line_bundle, 780 lcoeff, 334
is_included, 420
ldegree, 333
is_inside, 771
lef, 177
is_isosceles, 773, 824
left, 409, 413, 426, 545
is_orthogonal, 777, 822
left_rectangle, 126, 127
is_parallel, 777, 820
legend, 696
is_parallelogram, 776, 827 legend, 697, 700
is_permu, 231
legende, 696, 699, 707, 748
is_perpendicular, 777, 821 legende, 697, 700
is_prime, 196
legendre, 370
is_pseudoprime, 195
legendre_symbol, 203
is_rectangle, 773
length, 176, 430
is_rhombus, 775, 826
lgcd, 188
is_square, 774, 825
lhs, 545
ismith, 525
lieu, 783
isobarycenter, 716, 793
ligne_chapeau_carre, 705
isobarycentre, 716, 793
ligne_chapeau_plat, 705
isom, 526
ligne_chapeau_rond, 705
isopolygon, 734, 810
ligne_polygonale, 594
isopolygone, 734, 810
ligne_polygonale_pointee, 595
isosceles_triangle, 728, 801 ligne_tiret, 705
isPrime, 196
ligne_tiret_point, 705
isprime, 196
ligne_tiret_pointpoint, 705
ligne_trait_plein, 705
ithprime, 198
46
INDEX
LU, 531
limit, 298, 300
limite, 298, 300
lu, 530
lin, 324
lvar, 574
Line, 723
M, 64
line, 122, 721, 794, 795
magenta, 702
line_inter, 713, 790
makelist, 451
line_paper, 694
makemat, 488
line_segments, 838
makesuite, 429
line_width_1, 706
makevector, 430
line_width_2, 706
map, 447, 449
line_width_8, 706
maple2mupad, 86
linear_interpolate, 596
maple2xcas, 85
linear_regression, 597
linear_regression_plot, 597 maple_ifactors, 191
maple_mode, 78
lineariser, 324
markov, 639
lineariser_trigo, 304
mat2list, 455
LineHorz, 123
mathml, 85
LineTan, 123
matpow, 518
LineVert, 123
matrix, 464, 488
linfnorm, 508
matrix, 312, 447
linsolve, 554
matrix_norm, 508
LIST, 658
max, 269
list, 332, 344
maxnorm, 455
list2mat, 455
mean, 460, 492, 577
listplot, 595
median, 460, 492, 580
lll, 534
median_line, 725
ln, 269
mediane, 725
ln, 303, 312
mediatrice, 726, 800
lname, 574
member, 438
lncollect, 325
mgf, 637
lnexpand, 324
mid, 177, 425
local, 651
middle_point, 126, 127
locus, 783
midpoint, 413, 716, 793
log, 269
milieu, 413, 716, 793
log, 303
min, 269
log10, 270
logarithmic_regression, 599 minor_det, 495
logarithmic_regression_plot, minus, 263, 422
mkisom, 527
601
mksa, 166
logb, 270
mod, 193, 263, 398
logistic_regression, 603
modgcd, 358
logistic_regression_plot, 605
mods, 193
loi_normale, 619
moustache, 460, 492, 584
longueur, 749, 817
moyenne, 460, 492, 577
longueur2, 752, 818
mRow, 484
losange, 730, 806
mRowAdd, 484
LQ, 529
mul, 445
LSQ, 555
INDEX
47
nullspace, 498
mult_c_conjugate, 236
NUM, 658
mult_conjugate, 244
numer, 207, 377
multinomial, 617
multinomial, 452, 464
octaedre, 840
multiplier_conjugue, 244
octahedron, 840
multiplier_conjugue_complexe,
odd, 195
236
odeplot, 136, 139
mupad2maple, 86
odesolve, 152, 154
mupad2xcas, 86
of, 447
op, 267, 409, 413, 429
ncols, 494
open_polygon, 735, 812
nCr, 205
or, 172
nDeriv, 151
ord, 178
negbinomial, 615
order_size, 403, 404
negbinomial_cdf, 615
ordinate, 744, 814
negbinomial_icdf, 616
ordonnee, 744, 814
NewFold, 108
orthocenter, 716
newList, 451
orthocentre, 716
newMat, 464
orthogonal, 798, 801
newton, 150
Output, 661
newton_solver, 157
output, 661
newtonj_solver, 160
Ox_2d_unit_vector, 692
nextperm, 229
Ox_3d_unit_vector, 788
nextprime, 198
Oy_2d_unit_vector, 692
nInt, 151
Oy_3d_unit_vector, 788
nodisp, 106, 706, 707
Oz_3d_unit_vector, 788
noir, 702
nop, 419
p1oc2, 232
nops, 430
p1op2, 231
norm, 455, 508
pa2b2, 202
normal, 250, 388, 389, 392 pade, 407
normal_cdf, 619
papier_ligne, 694
normal_icdf, 620
papier_pointe, 693
normald, 619
papier_quadrille, 694
normald, 452, 464
papier_triangule, 695
normald_cdf, 619
parabola, 741, 813
normald_icdf, 620
parabole, 741, 813
normalize, 236, 456, 763
parallel, 724, 797
normalize, 135, 138
parallele, 724, 797
normalt, 640
parallelepiped, 837
not, 172
parallelepipede, 837
nPr, 205
parallelogram, 732, 809
nprimes, 197
parallelogramme, 732, 809
nrows, 494
parameq, 748, 817
nSolve, 155
paramplot, 132, 133, 836
nstep, 117, 697
parfrac, 312, 379
nuage_points, 594
pari, 188, 196, 213
part, 258
Nullspace, 499
48
INDEX
partfrac, 379
plotpolar, 134
partfrac, 312, 379
plotseq, 135, 262
pas, 673
plus_point, 704
Pause, 688
pmin, 520
pcar, 519
pmin, 519
pcar_hessenberg, 520
point, 711, 790
pcoef, 342
point, 697
pcoeff, 342
point2d, 713
pente, 759
point3d, 790
pente, 721, 759
point_carre, 704
penteen, 760
point_croix, 704
penteenbrut, 760
point_div, 780
perimeter, 757
point_etoile, 704
perimeterat, 758
point_invisible, 704
perimeteratraw, 758
point_losange, 704
perimetre, 757
point_milieu, 126, 127
perimetreen, 748, 758
point_plus, 704
perimetreenbrut, 748, 758
point_point, 704
perm, 205
point_polaire, 713
perminv, 233
point_triangle, 704
permu2cycles, 229
point_width_1, 704
permu2mat, 230, 530
point_width_2, 704
permuorder, 233
point_width_8, 704
perpen_bisector, 726, 800
poisson, 618
perpendiculaire, 724, 798, 801
poisson, 452, 464
perpendiculaire_commune, 799 poisson_cdf, 618
perpendicular, 724, 798, 801 poisson_icdf, 618
peval, 335
polaire, 782
phi, 202
polaire_reciproque, 783
pi, 171
polar, 782
piecewise, 96
polar_coordinates, 747
pivot, 554
polar_point, 713
plan, 799
polarplot, 134
plan, 136
pole, 782
plane, 799
poly1, 326
plane, 136
poly2symb, 327, 328
plot, 120
polyedre, 838
plot3d, 121
polyEval, 335
plotarea, 127, 754
polygon, 735, 811
plotcontour, 128
polygone, 735, 811
plotdensity, 129
polygone_ouvert, 735, 812
plotfield, 135, 139
polygonplot, 594
plotfunc, 117, 297
polygonscatterplot, 595
plotimplicit, 130
polyhedron, 838
plotinequation, 125
polynom, 312, 332, 343, 344
plotlist, 595
polynomial_regression, 601
plotode, 136, 139
polynomial_regression_plot,
602
plotparam, 132, 133
INDEX
poslbdLMQ, 385
posubLMQ, 384
potential, 543
pour, 673
pow2exp, 325
power_regression, 602
power_regression_plot, 603
powermod, 392
powerpc, 739
powexpand, 325
powmod, 392
prepend, 432
preval, 258
prevperm, 228
prevprime, 198
primpart, 336
print, 660
printpow, 661
prism, 838
prisme, 838
product, 445, 469, 470
produit_scalaire, 459
projection, 769, 834
proot, 161
propFrac, 207
propfrac, 207, 379
Psi, 226
psrgcd, 358
ptayl, 340
puissance, 739
purge, 105, 317
pyramid, 837
pyramide, 837
q2a, 535
QR, 529
qr, 529
quadrant1, 699
quadrant2, 699
quadrant3, 699
quadrant4, 699
quadrilateral, 733, 809
quadrilatere, 733, 809
quadrique, 539
quadrique_reduite, 539
quand, 95
quantile, 460, 492, 582
quartile1, 460, 581
49
quartile3, 460, 582
quartiles, 460, 492, 581
quest, 107
Quo, 351, 398
quo, 350, 390
quorem, 354, 390
quote, 175, 243
r2e, 327, 328
radical_axis, 740
radius, 762
rand, 206, 605, 606, 608, 609
randbinomial, 610
randexp, 612
randmarkov, 639
randMat, 464, 612
randmatrix, 464, 612
randmultinomial, 610
randNorm, 611
randnorm, 611
randperm, 228
randpoisson, 611
randPoly, 344
randpoly, 344
RandSeed, 605
randseed, 605
randvector, 452
rank, 497
ranm, 345, 464, 612
rassembler_trigo, 305
rat_jordan, 515
rational_det, 495
rationalroot, 385
ratnormal, 253
rayon, 762
rdiv, 216
re, 234
read, 109, 678
readrgb, 709
real, 234
realroot, 381
reciprocation, 783
rectangle, 731, 807
rectangle_droit, 126, 127
rectangle_gauche, 126, 127
rectangular_coordinates, 747
red, 702
REDIM, 478
50
INDEX
roots, 342
redim, 482
reduced_conic, 537
rotate, 427
reduced_quadric, 539
rotation, 766, 830
ref, 549
rouge, 702
reflection, 765, 829
round, 269
regroup, 250
row, 480
regrouper, 250
row, 439, 441-443, 489-491
Rem, 353, 399
rowAdd, 484
rem, 352, 390
rowDim, 494
remain, 193
rowdim, 494
remove, 438
rowNorm, 507
rempli, 697, 704
rownorm, 507
reorder, 345
rowspace, 500
repeat, 675
rowSwap, 485
repere_2d, 693
rowswap, 485
repere_3d, 789
Rref, 402
repeter, 675
rref, 395, 550
REPLACE, 479
rsolve, 261
replace, 483
saisir, 655
residue, 406
saisir_chaine, 655
resoudre, 125, 247, 541, 546,
sans_factoriser, 130
669
scalar_product,
459
resoudre_dans_C, 548
scalarProduct, 459
resoudre_systeme_lineaire, 554
SCALE, 484
restart, 106
scale, 484
resultant, 367
SCALEADD, 484
retourne, 651
scaleadd, 484
return, 651
scatterplot, 594
reverse_rsolve, 556
SCHUR, 524
revert, 406
sec, 303
revlist, 427
secant_solver, 158
rhombus, 730, 806
segment, 722, 795
rhombus_point, 704
select, 437
rhs, 545
semi_augment, 486
right, 177, 409, 413, 426, 545
seq, 416, 675
right_rectangle, 126, 127
seq[], 415, 429
right_triangle, 728
seqplot, 135
risch, 284
seqsolve, 259
rm_a_z, 93
series, 404
rm_all_vars, 93
set[], 420
rmbreakpoint, 687
SetFold, 108
rmwatch, 686
shift, 428
romberg, 151
shift_phase, 304
gauss15, 126
Si, 219
rombergm, 126
si, 670
rombergt, 126
sign, 269
root, 216
signature, 233
rootof, 341
INDEX
similarity, 767, 832
sst, 685
similitude, 767, 832
sst_in, 685
simp2, 209, 378
star_point, 704
simplex_reduce, 500
stdDev, 460, 579
simplifier, 251, 306
stddev, 460, 492, 578
simplify, 251, 306
stddevp, 460, 579
simpson, 126
steffenson_solver, 158
simult, 553
sto, 94, 668
sin, 303
Store, 94, 668
sin, 303, 312
STR, 658
sin2costan, 309
string, 181, 682
sincos, 308
string, 312
sincos, 312
student, 621
single_inter, 713, 790
student_cdf, 622
sinh, 270
student_icdf, 622
sinon, 670
studentd, 621
size, 176, 430
studentt, 641
sizes, 430
sturm, 364
slope, 759
sturmab, 364
slope, 721, 759
sturmseq, 365
slopeat, 760
style, 697
slopeatraw, 760
subMat, 481
smod, 193
subs, 254
snedecor, 624
subsop, 428, 476
snedecor_cdf, 625
subst, 253
snedecor_icdf, 625
substituer, 253
snedecord, 624
subtype, 658
solid_line, 705
sum, 285, 443, 469
solve, 125, 247, 541, 546, 669
sum_riemann, 289
sommet, 267, 409, 413
supposons, 100
sommets, 718
suppress, 426
sommets_abc, 718
surd, 269
sommets_abca, 719
SVD, 533
sort, 432
svd, 532
SortA, 435
SVL, 532
sorta, 435
svl, 532
SortD, 436
swapcol, 485
sortd, 436
swaprow, 485
specnorm, 508
switch, 672
sphere, 835
switch_axes, 692
spline, 347
sylvester, 366
split, 245
symb2poly, 329, 331
sq, 269
symetrie, 765, 829
sqrfree, 339
syst2mat, 549
sqrt, 269
table, 462
square, 730, 805
table_fonction, 258, 297
square_point, 704
table_suite, 262
srand, 605
51
52
INDEX
INDEX
vecteur_unitaire_Oy_3d, 788
vecteur_unitaire_Oz_3d, 788
vector, 723
version, 55, 57
vert, 702
vertices, 718
vertices_abc, 718
vertices_abca, 719
vpotential, 543
vstep, 697
WAIT, 689
watch, 686
weibull, 635
weibull_cdf, 635
weibull_icdf, 636
weibulld, 635
weibulld_cdf, 635
weibulld_icdf, 636
when, 95
while, 676
white, 702
widget_size, 74, 75
write, 679
writergb, 709
xor, 172
xstep, 117, 697
xyztrange, 74, 113, 695
yellow, 702
ystep, 117, 697
zeros, 249
Zeta, 227
zip, 450
zstep, 117, 697
ztrans, 571
53
54
INDEX
Pour commencer
0.1
0.1.1
Dans lindex de ce document, les commandes de Xcas seront crites avec des
caractres normaux, les options de ces commandes seront crites en italique et les
valeurs de commandes ou doptions seront crites en mode typewriter.
Par exemple :
affichage est une commande,
affichage est une option de commande gomtrique,
bleu est une valeur.
0.1.2
Au cours du document ce quil faut taper dans Xcas sera crit en mode typewriter. On tape par exemple :
affichage(droite(0,1+i),bleu)
droite(0,1+i, affichage=bleu)
alors que dans lindex, les commandes, les options des commandes et les valeurs
de ces options seront crites diffremment.
Lorsque lon doit appuyer sur 2 touches en mme temps on reliera ces deux
touches avec +. Par exemple, si on doit appuyer en mme temps sur Alt et sur t
on crira Alt+t.
Lorsque lon veut indiquer le choix faire dans un menu on reliera les diffrents sous-menus avec I. Par exemple, pour indiquer comment ouvrir lcran des
sorties graphiques intermdiaires dun programme on crira soit :
menu Cfg puis Montrer puis DispG ou encore,
CfgIMontrerIDispG
0.2
56
INDEX
Sous Unix, on peut utiliser cette bibliothque de calcul formel avec plusieurs interfaces :
Xcas interface qui est une feuille de calcul permettant davoir des niveaux
de diffrentes natures (calcul formel, gomtrie 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 crer de nouvelles fonctions.
0.2.1
Interface Xcas
On tape xcas & on a alors une feuille de calcul avec diffrents menus Fich
Edit Cfg Aide... et diffrents boutons.
Cette interface est dtaille dans :
Linterface Xcas de giac
que lon ouvre en cliquant sur le menu Aide -> Interface.
On va aussi dtailler lutilisation de cette interface ci-aprs (cf 1)
0.2.2
0.2.3
Interface texmacs
57
0.2.4
Interface emacs
0.2.5
0.2.6
58
INDEX
Chapitre 1
Linterface Xcas
1.1
1.1.1
On tape simplement :
xcas &
Remarque utile !
Si sous Linux, Xcas ne rpond plus, tapez dans la fentre xterm :
killall xcas et relancez en tapant xcas & enter. Dans ce cas, il y a eu un
fichier de sauvegarde automatique et lors de la reprise de Xcas on vous demande
si vous voulez lexcuter.
1.1.2
Sous Windows
1.1.3
Sous MacOS
1.2
60
Au sein dune mme session, les diffrents niveaux dentre ne sont pas indpendants, par exemple, une variable dfinie dans une ligne de commandes pourra tre
utilise en gomtrie ou dans le tableur.
Lensemble 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
61
quand on clique sur son numro, numro qui scrit alors sur fond noir.
On peut dplacer un niveau ou un groupe de niveau dans une session, ou le recopier
dans une autre session.
Vous pouvez , tout moment insrer un nouveau niveau ou encore changer lentre dun niveau : Enter valide le changement de ce niveau et slectionne lentre
suivante, mais attention les niveaux suivants ne seront pas recalculs. Il est toutefois possible aprs une modification de rexcuter, soit tous les niveaux, soit les
niveaux situs aprs la modification (menu Edit puis Executer session ou
Executer en-dessous).
Il faut savoir quil suffit de faire :
Alt+c pour ouvrir un niveau de type ligne de commentaires,
Alt+e pour ouvrir un niveau de type diteur dxpressions,
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 gomtrie plane,
Alt+h pour ouvrir un niveau de type cran de gomtrie 3,
Alt+d pour ouvrir un niveau de type cran de dessin tortue,
1.3
62
1.4
1.4.1
Les menus
Le menu Fich
63
.cxx et les fichiers contenant des scripts (cest dire une suite dinstructions) avec
des noms se terminant par .cas.
Fich a diffrents sous-menus :
Nouvelle session pour ouvrir et crer une nouvelle session. Unnamed
se mettra en surbrillance aprs les noms des sessions dj ouvertes (la surbrillance indique le nom de la session ouverte) et il ne vous reste plus qu
lui donner un nom se terminant par .xws (avec Sauver du menu Fich)
pour pouvoir vous reprer,
Ouvrir ou Alt+o pour ouvrir une nouvelle session et charger une session
sauve prcdemment,
Importer pour ouvrir une session que lon a ralise et sauve soit avec le
logiciel Maple dans un fichier en .mws (veillez utiliser l"ancien" format
de sauvegarde avec Maple 9, 10,...), soit avec lune des calculatrices ti89
ou Voyage200. Xcas rcupre les commentaires et les entres.
On peut alors faire excuter ces entres avec Executer session du
menu Edit de la session, mais il est prfrable de faire une excution pas
pas en validant chaque niveau, afin de voir o il y a des modifications faire,
Inserer pour insrer une session sauve auparavant dans votre session,
Sauver ou Alt+s ou le bouton Save pour sauver cette session (cest
dire tous ses niveaux dentre et de sortie) dans le fichier de nom indiqu
cot du bouton Save. La premire fois on vous demandera le nom du fichier
de sauvegarde qui doit se terminer par .xws. Ce nom remplacera Unnamed
dans la ligne des noms des sessions et sera en surbrillance. Il sinscrira aussi
sur le bouton de configuration cot de Save.
Sauver comme pour sauver en donnant un autre nom au fichier de sauvegarde de la session, ce fichier doit tre un .xws,
Sauver tout pour sauver tout votre espace de travail cest dire toutes
les sessions, ce fichier doit tre un .xws,
Exporter comme pour sauver la session au format texte choisi (soit xcas,
soit maple...)
Fermer sans sauver pour fermer la session en cours sans la sauver,
A propos ouvre la fentre des messages avec ladresse http o vous pouvez vous procurer la dernire version de Xcas ainsi que ladresse mail du
dveloppeur ! (voir aussi le menu AideIInternet)
Imprimer pour imprimer la session en cours, il faut tout dabord choisir
son format dimpression et cocher ou ne pa cocher Paysage en utilisant le
menu CfgI Configuration generale, puis, choisir :
Pre-visualisation pour voir votre session en postscript (on vous
demandera un nom de fichier .ps) ou,
vers imprimante pour imprimer votre session en postscript (on vous
demandera le nom de limprimante) ou,
Previsualiser les niveaux selectionnes pour prvisualiser les niveaux selectionns (on vous demandera un nom de fichier .eps
pour chaque niveau, par exemple niveau3.eps). On pourra ensuite inclure ce fichier dans un texte LATEX en mettant :
dans len-tte :
\usepackage{graphicx}
et dans le texte lendroit dsir :
64
1.4.2
Le menu Edit
1.4.3
65
contreuse car comme les rponses non graphiques sont affiches dans un
diteur dexpressions, elles peuvent donc tre modifies..., Lorsquon utilise
Edit->selection->LaTeX ou Ctrl+t, la traduction en LaTeX apparait alors dans lcran des messages (que lon peut voir en cliquant sur le
bouton msg de Kbd).
On peut la recopier dans un diteur (emacs, nedit, vi, ...) par un
clic avec le bouton du milieu.
Par exemple :
on saisit dans un niveau de calcul formel concat([1,2],3) on met en
surbrillance la rponse, puis on fait Ctrl+t, ce qui provoque linscription dans la partie reserve aux messages de :
\mbox{concat}([1,2],3)
on saisit sqrt(1+3), on met en surbrillance la rponse, puis on fait
Ctrl+t, ce qui provoque linscription dans la partie reserve aux messages de :
\sqrt{1+3}
on saisit f(x):=sin(x)/x, on met en surbrillance la rponse, puis on
fait Ctrl+t, ce qui provoque linscription dans la partie reserve aux
messages de :
\parbox{12cm}{\tt (x)-{\tt\symbol{62}}(sin(2*x))/x }
Il ne vous reste plus qu recopier le texte ainsi traduit, dun coup de souris,
dans une portion en mode mathmatique de votre document LATEX.
Fusionner niveaux permet de mettre dans un mme niveau, les niveaux slectionns,
Nouveau groupe permet de crer un groupe,
Grouper niveaux permet de crer un regroupement des niveaux slectionns, que lon peut plier ou dplier en cliquant sur - ou + du menu
propre ce regroupement. On peut aussi donner un nom au regroupement
ainsi cr.
Degrouper niveaux effectue lopration inverse de la prcdente (on
aplatit le groupe dont le numro a t slectionn (noirci) pour revenir
ltat prcdent le regroupement).
Le menu Cfg
66
67
1.4.4
Le menu Aide
68
Remarque Quand on choisit les commandes partir des menus, une aide
succincte sur cette commande saffiche dans la ligne des messages (cliquez
sur msg du bandeau) et le manuel de Calcul formel souvre la bonne page !
Quand on choisit les commandes partir du bandeau, seule une aide succincte sur cette commande saffiche dans la ligne des messages (cliquez sur
msg du bandeau).
Trouve recherche le mot demand dans toutes les pages du manuel Calcul
formel.
Interface contient de laide concernant linterface de Xcas.
Manuels
1. Calcul formel contient laide gnrale qui concerne toutes les
fonctions de calcul formel, de gomtrie, de statistiques mais qui ne
concerne pas les instructions de programmation, ni les instructions dplaant la tortue.
2. Geometrie contient une aide plus dtaille pour certaines commandes
car cette aide est illustre par des exercices (mais on na pas toutes les
fonctions de gomtrie !).
3. Programmation contient une aide dtaille des instructions de programmation. Dans cette partie vous trouverez lcriture de plusieurs
algorithmes avec la traduction de ces algorithmes en langage xcas
MapleV MuPAD TI89/92.
4. Tableur,statistiques contient une aide dtaille concernant le
tableur et les fonctions de statistiques ainsi que leurs utilisations dans
le tableur.
5. Tortue contient laide concernant les instructions qui sont utilises
dans lcran de dessin Tortue. Dans cette partie vous trouverez
plusieurs activits que lon peut faire avec des enfants (du CP au CM2)
dans le but de leur faire faire des mathmatiques.
Internet
1. Forum permet daccder un forum de discussion.
2. Ressources pedagogiques contient des exercices sur diffrents
sujets et de diffrents niveaux.
3. Mettre a jour laide permet de mettre laide jour.
Dbuter en calcul formel
1. Tutoriel est un tutoriel. Il permet de faciliter la prise en main de
Xcas pour faire du calcul formel.
2. solutions contient les solutions des exercices du tutoriel.
Recreer les fichiers index de laide
Le bouton Details de la fentre dindex de laide ouvre le navigateur sur
la page principale daide de la commande en cours si elle existe. Pour cela il
utilise un fichier cache contenant les correspondances, mais il arrive que ce
fichier cache ne soit pas jour, ce menu permet de mettre jour ce fichier
cache (il faut bien sur avoir les droits dcriture sur le fichier cache).
69
1.4.5
70
Rajouter un menu
On peut redfinir les menus que lon voit au-del du menu Aide. Par exemple,
rajoutons un menu Exo1 qui contiendra les commandes equal2diff factor
subst qui seraient utiles pour faire un exercice numrot 1.
Pour cela il faut ouvrir dans lditeur texte de votre choix (par exemple emacs,
vi, nedit, notepad, bloc.notes... mais PAS word, abiword,
kword, openoffice...) le fichier xcasmenu (sous Linux ou Mac, il faut
modifier ce fichier dans le rpertoire /usr/share/giac/doc/fr ou
/usr/local/share/giac/doc/fr).
Vous devez voir :
Math/Constants/pi
Math/Constants/i
Math/Constants/e...
Vous tapez alors les trois lignes suivantes (une ligne par commande) :
Exo1/equal2diff
Exo1/factor
71
Exo1/subst
en laissant le reste
Math/Constants/pi
Math/Constants/i
Math/Constants/e...
inchang.
Lorsque vous relancez Xcas vous avez maintenant aprs le menu Aide un
menu Exo1 qui contient les commandes equal2diff factor subst.
Remarque : le menu Exemples suit le mme principe avec un fichier xcasex,
mais il faut aussi avoir cr les fichiers de session exemple dans le rpertoire de
xcasex.
Supprimer un menu
Pour cela il faut ouvrir dans lditeur de votre choix le fichier xcasmenu. Il
suffit alors deffacer les lignes que vous ne voulez pas voir apparaitre en ayant soin
de les sauver pour pouvoir vous en reservir ultrieurement !
1.5
1.5.1
Pour slectionner un niveau, il faut cliquer sur le numro du niveau que lon
veut slectionner : ce numro apparait alors sur fond noir.
Pour slectionner plusieurs niveaux qui se suivent et se trouvent sur lcran, il
faut cliquer sans relacher sur le premier numro du groupe et se deplacer jusquau
dernier numro du groupe puis relacher le bouton de la souris : ces numros apparaissent alors sur fond noir. Pour slectionner plusieurs niveaux qui se suivent on
peut aussi cliquer sur le premier numro du groupe et Shift+cliquer sur le
dernier numro du groupe : cela slectionne les niveaux intermdiaires.
Pour dslectionner, on clique ailleurs dans la session (on peut aussi cliquer sur
un seul des niveaux parmi les niveaux slectionns ce qui slectionnera uniquement
ce niveau).
1.5.2
72
1.6
1.6.1
Configuration du Cas
73
radian est lunit dangle si cette case est coche, sinon lunit dangle est
le degr,
puissance croissante pour que laffichage des polynmes se fasse
selon les puissances croissantes aprs lutilisation de commandes comme
normal ou simplify,
Complex on coche cette case pour travailler en mode complexe : si cette
case nest pas coche on travaille en mode rel. Certaines commandes cependant sont indpendante du mode choisi comme cpartfrac, csolve
ou cFactor,
Variables_complexes on coche cette case pour travailler avec des variables formelles complexes : si cette case nest pas coche les variables formelles sont relles (si la variable a nest pas affecte re(a)=conj(a)=a
et im(a)=0). Mais attention dans csolve linconnue est toujours considre comme une variable formelle complexe et dans solve linconnue est
considre comme une variable formelle complexe seulement si lequation
rsoudre contient i ou bien si on est en mode complexe,
puissance croissante : affiche les dveloppements de polynmes
selon les puissances croissantes ou dcroissantes
All_trig_sol : renvoie toutes les solutions dune quation trigonomtrique (par exemple solve(cos(x)=0)) laide de variables entires ou
seulement les solutions principales.
Sqrt : si Sqrt est coch, factor factorise les polynmes du second degr, mme si les facteurs ne sont pas dans le corps de base des coefficients.
Appliquer pour avoir cette configuration,
Sauver pour avoir cette configuration par dfaut,
Annuler pour revenir lancienne configuration.
1.6.2
74
+ ou -,
x_scale pour faire changer lchelle de laxe des x,
z_scale pour faire changer lchelle de laxe des z,
class_min pour dfinir en statistiques le minimum des classes,
class_size pour dfinir en statistiques la taille des classes,
autoscale on coche cette case pour avoir un rglage automatique de lchelle
en mode 2-d ou 3-d, ce qui provoque un changement du rglage des x, des y et
des z,
ortho pour avoir un repre orthonorm contenant la partie visible demande,
-> W et W->XY si on veut recopier les plages XY dans W et vice-versa,
TX et TY permet de marquer, lorsquon a les axes, les points de coordonnes les
multiples de TX et TY, on met TX et TY zro lorsque lon ne veut pas ces points,
OK pour confirmer, et on obtient par exemple :
xyztrange(-6.0,6,-7,4,-10,10,-1,6.0,-6,6,-2,4,1) dans lhistorique, commande qui dfinit les nouveaux paramtres de la fentre graphique,
Annuler pour revenir lancienne configuration.
1.6.3
Configuration gnrale
1.7
1.7.1
Le fichier .xcasrc du rpertoire home (xcas.rc sous Windows) est un fichier qui est excut au lancement de Xcas et qui contient vos "prfrences" (menu
1.7.2
1.7.3
cas_setup a 9 arguments.
Les arguments dans lordre sont :
approx, var_complexe ,complexe, radian, format_affichage,
epsilon, chiffres, taches, increasing power
et valent 1 ou 0 (sauf taches) pour dire si on veut ou on ne veut pas travailler
avec cette option.
On tape :
cas_setup(1,0,0,1,0,1e-10,12,2,0)
76
1.7.4
Digits ou DIGITS est le nom dune variable qui contient le nombre de chiffres
de laffichage. On tape :
Digits
Ou on tape :
DIGITS
On obtient :
12
si dans la configuration du CAS il y a 12 dans la case Chiffres.
On peut changer la valeur de la case Chiffres de la configuration du CAS en
affectant une valeur Digits ou DIGITS. Digits ou DIGITS permet donc de
spcifier le nombre de chiffres significatifs de laffichage, pour cela on doit taper
Digits puis := et un nombre entier entre 1 et 1000.
On tape :
Digits:=3
Ou on tape :
DIGITS:=3
pour avoir 3 chiffres laffichage : Puis, on tape :
1.0/3
On obtient :
0.333
On tape :
4.0/3
78
Remarque
Si pour un calcul on veut par exemple avoir un affichage avec seulement n chiffres
significatifs il faut utiliser evalf avec 2 arguments : cela ne change pas la valeur
de Digits.
On tape :
a:=862/7
evalf(a,5)
On obtient :
123.14
evalf(a)
On obtient si dans la configuration utilise Digits vaut 12 :
123.142857143
1.7.5
1.7.6
1.7.7
approx_mode permet de spcifier si on veut travailler avec des valeurs approches ou avec des valeurs exactes.
Si on veut travailler en approximatif, on tape :
approx_mode:=1
Si on veut travailler en exact, on tape :
approx_mode:=0
On peut aussi cocher ou dcocher approx dans lcran de la Configuration
du CAS du menu Cfg.
1.7.8
complex_mode permet de spcifier si on veut travailler avec des nombres complexes ou avec des nombres rels.
Si on veut travailler en complexe, on tape :
complex_mode:=1
Si on veut travailler en rel, on tape :
complex_mode:=0
On peut aussi cocher ou dcocher Complex dans lcran de la Configuration
du CAS du menu Cfg.
1.7.9
80
1.8
Laide
On peut avoir de laide sur les diffrentes fonctions de calcul formel de plusieurs faons. On peut cocher la case Aide HTML automatique de la configuration gnrale pour avoir louverture de laide detaille chaque appel dune
fonction se trouvant dans les menus ou ne pas cocher cette case pour avoir de laide
seulement lorquon le dsire, toutefois une aide succincte apparait dans la ligne des
messages chaque appel dune fonction se trouvant dans les menus. On peut avoir
accs laide gnrale ou laide par fonction tout le temps (voir ci-dessous).
1.8.1
81
Aide gnrale
1.8.2
Chaque fois que lon appelle une fonction partir dun menu une aide succincte sur cette fonction saffiche dans lcran des messages (cliquez sur msg du
bandeau).
Pour avoir de laide dans lhistorique dans la langue de son choix, on utilise findhelp
ou ? avec deux paramtres : le premier paramtre est le nom de la fonction et le
deuxime est 1 pour avoir laide en franais (ou 2 pour avoir laide en anglais ou
3 pour avoir laide en espagnol) sur cette fonction.
On tape par exemple :
findhelp(factor)
ou
?factor
On obtient alors laide sur la fonction factor en rponse. On peut aussi choisir
la langue On tape par exemple :
findhelp(factor,2)
ou
?factor,2
On obtient alors laide sur la fonction factor en anglais en rponse.
1.9
Sauver et imprimer
82
1.9.1
1.9.2
louverture dun tableur (avec Alt+t), on vous demande un nom de variable : si vous donnez comme nom mat, il sinscrit mat.tab cot du bouton
Save du tableur. Lorsque vous sauvez votre tableur avec ce bouton Save du tableur, vous sauvez la fois les formules et les valeurs du tableur : votre tableur est
transform en un fichier qui pourra tre charg grce Insrer du menu Fich
du tableur.
1.9.3
Vous sauvez les programme ou les scripts (suite dinstructions spares par des
points virgules) crit dans un diteur de programmes, avec le bouton save de cet
diteur de programmes, ou avec le sous-menu sauver du menu Fich de cet diteur de programmes.
Le fichier contenant cette sauvegarde pourra tre remis dans un diteur de programmes grce au menu Fich sous-menu :
Charger pour charger un fichier contenant des scripts ou des programmes dans
lditeur de programmes.
ou
Inserer pour inserer un fichier contenant des scripts ou des programmes dans
lditeur de programmes.
Appuyer sur Save a pour effet, la premire fois, de vous demander le nom du fichier de sauvegarde. Ce nom sera le mme, pour toutes les sauvegardes ultrieures.
Si vous voulez, au cours de votre travail, sauver sous un autre nom, il faut utiliser
le menu Fich de lditeur de programme sous-menu Sauver comme.
1.9.4
Pour imprimer
83
qui sera prt tre imprimer (sous Unix ou Linux vous pourrez le voir avec la commande gv) ou bien,
Pr-visualisation avec Latex pour voir votre fichier avant impression,
votre session est sauve en un fichier Latex (.tex) qui sera traduit aprs compilation en un fichier (.dvi) (si vous navez pas sauv auparavant ces fichiers auront
pour nom session.tex et session.dvi) ou bien directement,
Imprimer avec Latex vous aurez les fichiers .tex) et .dvi.
1.10
Traduction Latex
1.10.1
1.10.2
Pour sauver toute la session il faut cliquer sur Save de la barre des boutons
de la session (on vous demande le nom par exemple session.xws et toute la
session est sauve dans le fichier session.xws). Si vous voulez limprimer en
un fichier postscript, il faut choisir dans le menu Fich de la session, le sous-menu
Imprimer puis Pre-visualisation et ensuite Vers Imprimante : cela
cre un fichier postscript session.ps. Si vous voulez convertir votre session en
un fichier Latex, il faut choisir dans le menu Fich, le sous-menu Imprimer puis,
Pre-visualisation (Latex), et ensuite Vers Imprimante (Latex)
cela cre les fichiers session.tex, session.dvi, session.ps et session.png.
1.10.3
Voir aussi : 3.5 et 1.10.5 On veut traduire en Latex toutes les sorties graphiques
ralises depuis le dernier erase() cest dire toutes celles faites partir des
lignes de commandes et celles faites dans les crans de gomtrie.
On utilise pour cela la fonction graph2tex.
On tape par exemple dans une ligne de commandes :
graph2tex("truc.tex")
84
On obtient alors les graphiques sauvs en un fichier Latex truc.tex qui pourra
tre compil et visualis seul, ou encore tre insr dans un fichier Latex.
Ou encore, si on veut la traduction Latex dun seul cran de gomtrie, on appuie
sur le bouton Save de cet cran de gomtrie, on donne un nom de fichier par
exemple truc.cas. Puis, on choisit dans le menu Fich de cet cran de gomtrie, le sous-menu Imprimer puis, Pre-visualisation (Latex), cela
cre les fichiers truc.tex, truc.dvi, truc.ps et truc.png ou ventuellement si on veut imprimer, on choisit Vers Imprimante (Latex).
On obtient alors lcran de gomtrie sauv en un fichier Latex truc.tex qui
pourra tre compil et visualis seul, ou encore tre insr dans un fichier Latex,
condition denlever len-tte \documentclass{article}...\begin{document},
denlever la fin \end{document} et de rajouter \usepackage{pstricks}
dans len-tte du fichier dans lequel on linsre.
Ou encore, on veut traduire en Latex une seule sortie graphique ou un seul dessin
ou un seul graphique fait dans un des crans de gomtrie et on voudrait lintgrer
dans un texte Latex ou limprimer seul. Mais, on a dj fait dautres graphiques,
soit laide de commandes qui renvoient des sorties graphiques, soit dans diffrents crans de gomtrie, alors, pour avoir la traduction Latex du dessin que vous
voulez, il faut utiliser la commande erase() cela neffacera pas vos graphiques,
mais cela aura pour effet de ne traduire en Latex que les tracs futurs. Donc on
tape erase(), puis on revalide ce que lon veut traduire en Latex, puis on tape
par exemple :
graph2tex("truc1.tex")
Pour traduire en Latex et imprimer un seul graphique on peut aussi se servir du
menu Exporter/Imprimer du bouton M de cet cran graphique :
MI Exporter/ImprimerIImprimer(en Latex),
Ou encore, on peut slectionner le niveau de lcran graphique que lon veut imprimer et utiliser le menu de la session :
FichIImprimerIImprime selection (latex).
Dans ces deux cas lcran est sauv selon 4 formats, sous les noms session0.tex,
session0.dvi, session0.ps et session0.png (ou encore sous les noms
session<numero>.tex/dvi/ps/png) (sauf si vous avez donn un autre
nom ce qui est conseill !).
1.10.4
1.10.5
Voir aussi : 3.5 et 1.10.3 On fait un graphique en 3-d dans lcran et on voudrait limprimer. On se sert de MI Exporter/ImprimerIImprimer(en
Latex) ou de la fonction graph3d2tex.
On tape par exemple :
graph3d2tex("truc.tex")
85
On obtient alors lcran 3-d sauv en un fichier Latex truc.tex qui pourra tre
insr dans un fichier Latex.
On peut aussi slectionner le niveau (en cliquant sur son numro puis, utiliser le
menu Fich sous menu ImprimerIImprime slection (latex)).
Dans ce cas lcran 3-d est sauv selon 4 formats, sous les noms session0.tex,
session0.dvi, session0.ps et session0.png (ou encore sous les noms
session<numero>.tex/dvi/ps/png) (sauf si vous avez donn un autre
nom ce qui est conseill !).
1.11
Traduction Mathml
1.11.1
1.11.2
1.12
1.12.1
86
1.12.2
1.13
1.13.1
1.13.2
mupad2maple a comme argument un un nom de fichier qui contient un programme Mupad en mode texte.
On tape :
mupad2maple("fichier1","fichier2")
On obtient :
la traduction de ce fichier en Maple
Chapitre 2
Saisie
2.1
On peut tout moment faire apparaitre une ligne pour crire un commentaire
avec Alt+c. Le commentaire scrit sans utiliser de guillemets et apparait en vert.
Le commentaire ne gnre pas de rponse.
Le commentaire sert commenter votre session.
Depuis un commentaire on peut ouvrir le navigateur une adresse donne On tape
dans une ligne de commentaire :
Exercice 1
On obtient :
aucune rponse
Dans une ligne de commentaire, on peut ouvrir le navigateur une adresse donne :
On tape dans une ligne de commentaire :
Pour plus dinfo cf :
@www-fourier.ujf-grenoble.fr/ parisse/giac/doc/fr/casrouge/index.html
On obtient :
louverture dans le navigateur de lindex du document
sur lalgorithmique
Attention
Pour faire un commentaire dans un programme il faut utiliser la commande comment
qui a comme argument une chane de caractres ou bien utiliser // qui doit etre
suivi du commentaire et dun retour la ligne. Quand il y a un commentaire dans
un programme, tout se qui se trouve entre // et le retour la ligne nest pas pris
en compte par le programme.
On tape :
bs():={comment("bonjour"); return "Salut";}
On tape :
bs():={//"bonjour"
87
88
CHAPITRE 2. SAISIE
return "Salut";}
On obtient :
un programme ayant comme commentaire "bonjour"
2.2
Lditeur dexpressions
2.2.1
x+2
, on peut le faire de plux2 4
sieurs faons :
dans une ligne de commande condition de mettre des parenthses et on
tape : (x+2)/(x^2-4)
on se sert dun diteur dexpressions, diteur obtenu avec Alt+e.
On clique dans lcran de lditeur dexpressions et on tape x+2, puis on
slectionne x+2 (avec la souris ou avec la flche vers le haut du bloc des
flches de direction) puis on tape sur / et x, on slectionne x (avec la souris
ou avec la flche vers le haut) puis on tape ^2 puis on slectionne x2 et on
x+2
tape -4 et on valide avec enter et on obtient 2
comme rponse.
x 4
x+2
Supposons que lon veuille simplifier lexpression 2
on peut le faire de plux 4
sieurs faons :
dans une ligne de commande condition de mettre des parenthses et on
tape : normal((x+2)/(x^2-4+1)),
on se sert dun diteur dexpressions, diteur obtenu avec Alt+e.
On tape la fraction xx+2
2 4 (voir ci-dessus) puis, on slectionne toute la fraction (avec la flche vers le haut) et on slectionne la fonction normal du
menu MathIRecriture ce qui a pour effet davoir :
x+2
normal( 2
) dans lditeur dexpressions, puis soit on valide avec
x 4
1
enter et on obtient
comme rponse, soit on appuie sur le bouton
x2
eval du clavier (si le clavier est prsent), soit on slectionne Evaluer
selection dans le petit M ( lintersection des deux barres de scroll), pour
avoir la rponse dans lditeur dexpressions.
2.2.2
89
Comment slectionner
On peut slectionner directement avec la souris ou avec les flches du bloc des
flches de direction.
On peut aussi considrer une expression comme un arbre et parcourir cet arbre
laide des flches de direction.
Quand une expression est slectionne on peut :
monter dans larbre en selectionnant le pre avec la flche vers le haut,
descendre dans larbre en selectionnant le fils gauche avec la flche vers le
bas,
selectionner le frre droit ou gauche avec la flche vers la droite ou vers la
gauche,
changer lexpression avec son frre avec Ctrl et la flche vers la droite ou
vers la gauche,
supprimer un oprateur ou le nom dune commande en slectionnant lexpression et en tapant : backspace. Il faut noter quun deuxime backspace
effacera les arguments
Exemple On clique dans lcran de lditeur dexpressions et on tape x+1 puis
flche vers le haut pour slectionner x+1, puis * et on tape x+2 puis flche vers
le haut pour slectionner x+2 puis * et on tape x-1 puis flche vers le haut pour
slectionner x-1.
On a alors dans lcran de lditeur dexpressions lexpression (x+1)*((x+2)*(x-1)).
Puis on slectionne le tout et on appuie sur eval (menu ExpressionIAutres
ou bouton eval du clavier si on a choisi Montrer-> Clavier dans le menu
Cfg) pour avoir les 3 facteurs sur le mme plan (larbre nest plus binaire).
Donc maintenant on obtient :
(x+1)*(x+2)*(x-1).
On peut ensuite soit
slectionner (x+1)*(x+2) avec la souris puis on slectionne la commande
normal du menu Calc sous-menu Recriture.
On obtient alors (x^2+3 x+2) (x+2).
slectionner x+1, puis Ctrl et la flche vers la droite, pour changer x+1
et x+2.
Donc maintenant on obtient :
(x+2)*(x+1)*(x-1).
On peut ensuite slectionner (x+1)*(x-1) avec la souris puis on slectionne la commande normal du menu Calc sous-menu Recriture.
On obtient alors (x+2)*(x^2-1).
2.2.3
90
CHAPITRE 2. SAISIE
2.2.4
2.3
2.3.1
Lorsque vous ouvrez un tableur, on vous demande son nom, par exemple sim,
ainsi toutes les sauvegardes ultrieures du tableur se feront dans le fichier sim.tab
et la matrice du tableur sera stocke dans la variable sim.
Vous avez la possibilt de changer ce nom au cours de votre travail et ce nom
peut alors ne pas tre le mme pour le fichier et la variable : vous pouvez avoir
toto.tab comme nom de fichier (nom qui est rappel cot du bouton Save)
et A comme nom de variable (nom qui est rappel dans la ligne dtat du tableur).
Les diffrentes sauvegardes se font avec le bouton Save ou laide du menu
Fich.
2.3.2
91
dajouter ou deffacer des lignes ou des colonnes, de trier les lignes ou les
colonnes et de changer la taille des lignes et des colonnes.
Statistiques Ce menu contient les fonctions de statistiques 1-d et
2-d.
2.3.3
92
CHAPITRE 2. SAISIE
Cacher graph pour ne pas avoir dcran de reprsentation graphique associ au tableur.
2.3.4
On a trois boutons :
reeval permet dvaluer le tableur ce bouton est utile quand on nest pas
en mode automatique mais en mode manuel,
val permet davoir la valeur et non la formule dans la ligne dentre lorsquon clique sur une cellule,
Save pour sauver le tableur sous le nom donn au dbut (identique au sousmenu sauver du menu Fich).
2.4
2.4.1
2.4.2
Dans un programme, toutes les sorties graphiques dun programme seront effectues dans lcran DispG visible avec la commande DispG;. Pour effacer cet
cran DispG, on utilise la commande ClrGraph ou ClrDraw.
On tape :
ClrGraph()
On obtient :
Leffacement de lcran DispG de gomtrie
2.4.3
2.4.4
93
Leffacement de la ligne de commande o se trouve le curseur se fait en appuyant sur la touche esc de Xcas ou sur la touche Echap de votre ordinateur.
On tape :
sur la touche esc
On obtient :
Leffacement de la ligne de commande o se trouve le
curseur
2.4.5
2.4.6
94
CHAPITRE 2. SAISIE
[A,B,a,b,eps]
On tape :
rm_all_vars()
On obtient :
[A,B,a,b,eps]
On tape :
VARS()
On obtient :
[]
2.5
2.5.1
Les variables
Le nom des variables et la variable CST
Un nom de variables est une suite de lettres ou chiffres commenant par une
lettre.
Attention ! ! ! il y a des noms qui sont dj employs pas le systme.
La variable CST permet de dfinir son propre menu, menu qui saffichera dans le
bandeau lorsquon appuie sur le bouton cust du bandeau.
On suppose que lon a crit deux fonctions tor et pgcd, et on tape par exemple :
CST:=[diff,["tor",tor],["pgcd",pgcd],["euro",6.55957]] qui
affichera diff tor pgcd euro dans le bandeau du bouton cust.
Pour rajouter une fonction CST on tape par exemple :
CST:=concat(CST,evalc).
Attention
Dans lexemple ci-dessus, euro nest pas une variable qui contient 6.55957,
mais le nom dun bouton du bandeau. Il y a donc une diffrence entre :
CST:=[evalc,["f",f],["a",6.55957]] et
CST:=[evalc,["f",f],["a",a]], dans la deuxime formulation le bouton a va renvoyer la valeur stocke dans la variable a et cette valeur changera si on
modifie a, condition que lorsque lon dfinit CST, la variable a ne soit pas encore
affecte (sinon a est evalue et a represente la valeur stocke du dbut), alors que
dans la premire formulation le bouton a va renvoyer 6.55957 quelque soit la
valeur stocke dans la variable a.
On peut aussi quoter a pour que a ne soit pas value et renvoie a lorsquon appuie
sur le bouton a du menu cust du bandeau, par exemple :
CST:=[evalc,["f",f],["a",a]].
Pour revenir au bandeau initial il faut utiliser le bouton home (voir aussi page 66).
2.5.2
95
96
CHAPITRE 2. SAISIE
En effet ifte (ou when ou quand ou IFTE) a trois arguments : une condition et deux expressions et ? est infix avec la condition gauche et droite
on met les deux expressions spares par :.
Si la condition est vraie, ifte (ou when ou quand ou IFTE ou ?) renvoie
la premire expression et sinon ifte (ou when ou quand ou IFTE ou ?)
renvoie la deuxime expression.
Remarque
La condition x! = a peut tre remplace par le rel r = x a :
si r == 0 la condition est fausse et sinon elle est vraie.
On tape pour dfinir la fonction qui vaut partout 0 sauf en 1 o elle vaut 1 :
h(x):=when(x-1,0,1)
est quivalent :
h(x):=when(x!=1,0,1)
Remarque : Diffrence entre ifte et les autres when....
On tape : f(x):=ifte(x>0,1,0);
g(x):=when(x>0,x,-x) ou g(x):=quand(x>0,1,0)
puis on tape f(x)
on obtient :
Ifte : Unable to check test Error : Bad Argument Value
ici x na pas de valeur : avec ifte ou if then else end_if il faut
que la variable x soit affecte pour pouvoir tester la condition (quand on
dfinit une fonction ce qui suit le := nest pas valu donc la dfinition de
f(x) ne pose pas de problme).
Pour la dfinition de g avec when...., la variable x na pas besoin dtre
affecte.
On tape g(x)
on obtient :
((x>0)? 1 : -1)
car ? est la version infixe de when.
une fonction dfinie par n valeurs,
par exemple, pour dfinir la fonction g qui vaut -1 si x < 1, 0 si 1 x
1 et 1 si x > 1, on tape :
g(x):=piecewise(x<-1,-1,x<=1,0,1)
piecewise utilise des paires condition/valeur ou valeur est renvoye si
sa condition est vraie ce qui implique que les conditions prcdentes sont
fausses. Si le nombre darguments est impair, la dernire valeur est la valeur
par dfaut (comme dans un switch).
piecewise est la gnralisation de when.
Pour dfinir la fonction f qui vaut -2 si x < 2, 3x + 4 si 2 x < 1, 1
si 1 x < 0 et x + 1 si x 0, on tape :
f(x):=piecewise(x<-2,-2,x<-1,3x+4,x<0,1,x+1)
On peut alors faire le graphe de f en tapant :
plotfunc(f(x))
2.5.3
97
Laffectation par rfrence dans une variable dsignant un lment dune liste ou dune matrice : =<
On peut utiliser loprateur infix =< pour stocker par rfrence le deuxime
argument dans une variable (dsignant un lment dune liste ou dune matrice)
donne comme premier argument.
Voir aussi 8.4.15 et 8.4.14. On tape :
a:=[1,2,3,4,5]
Pour changer la valeur de a[1] il est prfrable de le faire par rfrence cest
dire sans faire de recopie, on tape :
a[1]=<5
Dans un programme, il est prfrable dutiliser loprateur infix =< pour changer
un lment dune liste ou dune matrice contenue dans une variable . Exemple
On cherche pour tout n N, la liste des nombres entiers k vrifiant 0 < k < 2n et
dont la somme des chiffres, dans lcriture en base 2, est gale p ou qui scrivent
en base 2 avec des 0 et p 1.
On sait que convert(k,base,2) renvoie la liste de 0 et de 1 de lcriture en
base 2 de k en commenant par le chiffre des units. On a, par exemple :
convert(2,base,2)=[0,1].
On connait la longueur de la liste rsultat qui est comb(n,p) puisque il peut
y avoir n chiffres et que parmi ces n chiffres il doit y avoir p 1. On peut donc
initialiser la liste par :
L:=makelist(0,1,comb(n,p));.
On peut aussi vouloir initialiser la liste L par la liste vide et dans ce cas il faut
mettre L:=[0$0] et ne pas mettre L:=[]. La diffrence est subtile : [0$0] est
une liste qui est cre lors de chaque excution du programme alors que aprs la
compilation du programme, L:=[] fait pointer L sur la liste [] et cette liste sera
modifie par les diffrents L[k]=<j en LR et restera modifie en fin dexcution
ce qui fait que si on effectue une autre excution du programmeL est initialise par
LR car elle pointe sur la liste LR.
On tape :
truc(p,n):={
local j,k,L;
L:=makelist(0,1,comb(n,p));
k:=0;
for (j:=2^p-1;j<=2^n-2^(n-1-p);j++){
if (sum(convert(j,base,2))==p){
L[k]=<j;
k:=k+1;
};
}
return L;
}
:;
98
CHAPITRE 2. SAISIE
2.5.4
+= est un raccourci pour ajouter une expression la valeur contenue dans une
variable.
On tape :
a:=a+4
ou
a+=4
-= est un raccourci pour soustraire une expression la valeur contenue dans une
variable.
On tape :
a:=a-4
ou
a-=4
*= est un raccourci pour multipliser la valeur contenue dans une variable par une
expression.
On tape :
a:=a*4
ou
a*=4
/= est un raccourci pour diviser la valeur contenue dans une variable par une expression.
On tape :
a:=a/4
ou
a/=4
2.5.5
99
archive a comme argument une chaine de caractre (le nom du fichier darchive)
et une liste de variables.
archive sauve le contenu de ces variables dans le fichier ayant pour nom la
chaine donne en argument.
Le format de sauvegarde est un format interne Xcas, ce qui a comme intrt de
pouvoir relire ces valeurs plus rapidement. On tape :
archive("toto",[a,b,f])
On obtient :
cre le fichier "toto" contenant les valeurs des
variables a,b,f
unarchive a comme argument une chaine de caractre (le nom dun fichier darchive cr avec la commande archive).
unarchive lit les valeurs se trouvant dans le fichier ayant pour nom la chaine
donne en argument, si ce fichier a t cr avec la commande archive.
On tape :
unarchive("toto")
On obtient :
les contenus des variables sauves avec archive
2.5.6
100
CHAPITRE 2. SAISIE
On obtient :
10
Une modification du contenu de c va modifier le contenu de b car b contient c.
On tape :
a:=d
b
On obtient :
10
On tape :
purge(c)
b
On obtient :
c
puisque b contient c.
2.5.7
101
supposons(a=2)
Ou on tape
assume(a=2)
Ou on tape
supposons(a:=2)
Ou on tape directement :
supposons(a=[2,-5,5,0.1])
On obtient :
un curseur permettant de faire varier a
102
CHAPITRE 2. SAISIE
On obtient :
assume[DOM_FLOAT,[[2,4],[6,+(infinity)]],[4,6]]
cela signifie que a est une variable relle appartenant [2; 4] [6; [ et que 4 et 6
sont exclus (on a le domaine, lintervalle et les valeurs exclues).
On tape :
abs(1-a)
On obtient :
-1+a
On tape pour dire que b est un entier :
assume(b,integer)
On obtient :
DOM_INT
On tape :
assume(b)
On obtient :
[DOM_INT]
On tape pour dire que b est un entier suprieur strictement 5 :
assume(b,integer);
assume(b>5,additionally)
On obtient :
DOM_INT
puis
b
On tape :
assume(b)
On obtient :
[DOM_INT]
103
Remarque
Lorsque assume a comme argument une seule galit et que la commande est
tape dans une ligne dentre dun cran de gomtrie, cela met un petit curseur
en haut et droite de cet cran. Le nom du paramtre est not droite du curseur.
Ce curseur permet de changer la valeur du paramtre et cette valeur sera note
gauche du curseur. On tape par exemple :
assume(a=[2,-10,10,0.1])
Cela signifie que tous les calculs seront faits avec a quelconque, condition que
les points aient des coordonnes exactes, mais que la figure sera trace avec a=2
et que lon pourra faire varier cette figure avec le petit curseur en fonction de a de
-10 +10, avec un pas de 0.1. Si on met assume(a=[2,-5,5), a varie de
-5 +5 avec un pas de (5-(-5))/100), et si on met assume(a=2), a varie
de WX- WX+ et le pas est ((WX+)-(WX-))/100.
Attention En gomtrie il faut donc travailler avec des coordonnes exactes
par exemple :
A:=point(i);assume(b:=2); B:=point(b); puis on tape :
longueur(A,B);
On obtient :
sqrt((-b)^2+1)
Mais :
A:=point(0.0+i);assume(b:=2); B:=point(b); puis on tape :
longueur(A,B);
p
On obtient la valeur approche de (1 + 4) :
2.2360679775
Attention Un paramtre dfini par assume nest valu que pour les sorties graphiques, sinon il faut utiliser evalf.
Exemple : On tape :
dr(m):=ifte(m==2,droite(x=1),droite(x+(m-2)*y-1))
puis dans un niveau de gomtrie, on tape :
supposons(a=[2.0,-5,5,0.1])
dr(evalf(a))
qui renvoie droite(x=2) lorsque a:=2 et droite(y=(-5*x+5)) lorsque
a:=2.2 alors que
dr(a) renvoie droite(y=(-1/(a-2)*x+1/(a-2))) quelque soit a et il y
aura donc une erreur pour a=2....
Attention la diffrence entre assume et element
Si b:=element(0..3,1,0.1) est tap dans une ligne dentre dun cran de
gomtrie, cela met aussi un petit curseur en haut et droite de cet cran avec b=1
et on pourra faire varier b avec le petit curseur de 0 3 avec un pas de 0.1. Mais
la variable b nest pas formelle !
On tape
a;b
On obtient :
(a,1)
104
2.5.8
CHAPITRE 2. SAISIE
2.5.9
105
about(a)
On obtient :
assume[DOM_FLOAT,[0,+(infinity)],[0]]
assume[ ] signifie que lon a une liste dun type particulier.
Le dernier 0 veut dire que 0 est exclus de lintervalle [0,+(infinity)].
On tape :
assume(b,real);additionally(b>=0 and b<2)
ou
assume(b,real);assume(b>=0 and b<2,additionally)
puis,
about(b)
On obtient :
assume[DOM_FLOAT,[0,2],[2]]
Le dernier 2 veut dire que 2 est exclus de lintervalle [0,2].
On tape :
about(x)
On obtient :
x
ce qui veut dire que x est une variable formelle.
2.5.10
106
2.5.11
CHAPITRE 2. SAISIE
restart permet deffacer le contenu de toutes les variables et dannuler les hypothses faites sur ces variables.
On tape :
A:=point(1+i);assume(n>0);
puis
restart
On obtient :
[A,n]
si les variables [A,n] avaient t les seules variables affectes.
2.5.12
ans doit tre utilis si on travaille sans modifier les lignes dj valides. En effet, les questions et les rponses sont numerotes en partant de 0 et ce numro ne
correspond pas aux numros des lignes dentre, puisque lon peut, par exemple,
modifier la premire ligne aprs avoir rempli 4 lignes et cette modification aura
comme numro 4.
Si n 0, ans(n) permet de dsigner la rponse de numro n + 1 et,
Si n < 0, ans(n) permet de dsigner la (n)-ime rponse prcdente.
Ainsi :
ans() ou ans(-1) dsigne la rponse prcdente,
ans(0) dsigne la premire rponse (celle correspondant la premire commande demande). Attention Si vous avez effac des niveaux, les rponses de
ces niveaux ne sont pas effaces et sont comptes dans les ans(n).
2.5.13
107
On obtient :
Done
ce qui veut dire que laffectation a bien eu lieu et dans ce cas ans() dsigne
Done.
2.5.14
quest doit tre utilis si on travaille sans modifier les lignes dj valides. En
effet, les questions et les rponses sont numerotes en partant de 0 et ce numro ne
correspond pas aux numros des lignes dentre, puisque lon peut, par exemple,
modifier la premire ligne aprs avoir rempli 4 lignes et cette modification aura
comme numro 4.
Si n 0, quest(n) permet de dsigner la question de numro n et, si n < 0
quest(n) permet de dsigner la (n)-ime question prcdente.
Ainsi :
quest() ou quest(-1) dsigne la question prcdente,
quest(0) dsigne la premire question demande.
Remarque
Pour ne pas avoir retaper une commande, on peut se dplacer dans la liste des
commandes tapes prcdemment en mettant le curseur dans une ligne de commandes et en tapant une ou plusieurs fois Ctrl+ ou Ctrl+.
2.6
2.6.1
Les rpertoires
Comment crer un rprtoire sur vtre disque dur
Xcas peut se dplacer dans le rpertoire de vtre disque dur. On rappelle que
sous Unix la commande mkdir permet de crer de nouveaux rpertoires.
On tape par exemple (sous Unix) : mkdir toto
et cela cre le sous rpertoire toto partir du rpertoire courant.
2.6.2
Vous avez cre un rpertoire sur votre disque dur qui sappelle toto.
Travailler dans ce rpertoire depuis Xcas est facile : il suffit de taper dans la ligne
de commande :
cd puis entre guillemets, le chemin pour accder ce rprtoire.
On tape :
cd("toto")
ou en indiquant entre guillemets, un chemin depuis le rpertoire racine par exemple :
cd("/home/texte/toto")
108
CHAPITRE 2. SAISIE
Ainsi les fichiers que vous sauverez depuis Xcas, dans vtre disque dur seront
sauvs dans ce rpertoire.
Attention ! ! !
Quand on change de rprtoire les variables qui sont conserves dans des fichiers
dextention .cas sont celles du nouveau rprtoire. Donc les variables changent
quand on change de rprtoire.
2.6.3
On peut aussi crer des rpertoires de travail qui sont internes Xcas avec la
commande NewFold. Cela permet davoir des variables de mme nom mais dans
des rpertoires diffrents.
Depuis Xcas on tape par exemple :
NewFold(toto)
On obtient :
la cration du sous-rpertoire "toto"
2.6.4
On utilise la commande SetFold pour aller dans un rprtoire de travail interne Xcas.
On tape par exemple dans Xcas :
SetFold(toto)
On obtient :
on se trouve dans le sous-rpertoire "toto"
On tape par exemple dans Xcas :
SetFold(home)
Ou
SetFold(main)
On obtient :
on se trouve dans le rpertoire courant
Attention ! ! !
Quand on change de rprtoire de travail les variables sont celles du nouveau rprtoire : vous pouvez donc avoir des variables de mme nom contenant des valeurs diffrentes dans diffrents rpertoires. Donc les variables changent quand on
change de rprtoire de travail.
2.6.5
109
2.6.6
DelFold efface le rprtoire vide de nom donn dans largument. Xcas renvoie
une erreur si ce rpertoire nest pas vide. On tape par exemple dans Xcas :
DelFold(toto)
On obtient :
([])
2.6.7
2.6.8
Pour valider une ou des fonctions se trouvant dans un fichier ou pour excuter
une suite dinstructions se trouvant dans un fichier, on utilise read en mettant le
nom du fichier entre des guillemets ("...").
On tape :
read("pgcd.cxx")
ou encore si pgcd.cxx se trouve dans le rprtoire toto :
read("/home/texte/toto/pgcd.cxx") ou read("toto/pgcd.cxx")
On peut aussi faire :
Charger session du menu Fich puis mettre pgcd.cxx comme nom de fichier ou si pgcd.cxx se trouve dans le rprtoire toto mettre toto/pgcd.cxx
comme nom de fichier.
Remarque
110
CHAPITRE 2. SAISIE
On utilise plutt read pour des fichiers contenant des fonctions (fichiers .cxx)
et Charger session pour des fichiers contenant des scripts (fichiers .cas).
Par exemple un script contenant des instructions gomtriques sera excut mais
restera fig avec read (on ne peut pas faire bouger les points) par contre avec
Charger session un script contenant des instructions gomtriques sera excut et sera interactif (on peut faire bouger les points).
Chapitre 3
Le graphique
3.1
Gnralits
Si le graphe dpend dune fonction utilisateur, il faut que la fonction soit dfinie
lorsque le(s) paramtre(s) a (ont) une valeur formelle, ce qui peut se faire en testant
le type du paramtre, comme dans lexemple suivant : Je dfinis f avec le test du
type du paramtre 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)) jobtiens le mme graphe.
Le problme apparait lorsque x na pas de valeur et que lon rutilise G.
Mais si on fait :
G:=plotfunc(g(x)) puis symetrie(droite(y=x),G) ou mme simplement G on a lerreur :
"Unable to eval test in loop : x>0.0 Error: Bad Argument
Value"
parce que lvaluation 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 symtrique du graphe par rapport la premire bissectrice grce au
test de la ligne :
if (type(x)!=DOM_FLOAT) return f(x);. Dou lintrt de rajouter le test.
Par contre on peut taper directement sans provoquer derreurs :
symetrie(droite(y=x),plotfunc(g(x))).
Explications
Il faut savoir que dans les rponses de certaines commandes (par exemple G:=plotfunc(g(x)))
il va figurer lexpression formelle de g(x) (par exemple G contient expr("curve(group[pnt[x+(i)*g(x),
111
112
CHAPITRE 3. LE GRAPHIQUE
Lors de lvaluation de G il y aura une erreur car x+(i)*g(x) ne pourra pas tre
valu puisque lvaluation de g(x) provoque lvaluation du test x>0 qui ne peut
pas tre valu car x na pas de valeur ....do une erreur mais si dans la fonction
figure le test : if (type(x)!=DOM_FLOAT) return g(x); cela supprime lvaluation de g(x) et donc lerreur due au test x>0.
En effet, F:=plotfunc(f(x)) puis symetrie(droite(y=x),F) renvoie bien le symtrique du graphe par rapport la premire bissectrice grce au test
de la ligne :
if (type(x)!=DOM_FLOAT) return f(x);.
Par contre on peut taper directement sans provoquer derreurs :
symetrie(droite(y=x),plotfunc(g(x)))
3.2
3.3
113
Avant de faire un trac, il faut rgler les diffrents paramtres de la configuration de lcran graphique :
le menu CfgIConfiguration graphique (cf section 1.6.2) rgle les paramtres de tous les graphiques qui se feront lors de la session. On peut changer
ensuite ses paramtres au coup par coup avec le bouton cfg attach chaque cran
graphique (cf3.4).
Les commandes du cas qui ont comme rponses un graphique 2-d ou 3-d seront
tapes dans une ligne dentre. Toutefois les commandes du cas qui ont comme
rponses un graphique 2-d peuvent aussi tre tapes soit dans une ligne dentre
dun cran de gomtrie. Attention ! Un cran de gomtrie est un cran graphique
interactif.
Les commandes graphiques se trouvent dans le sous-menu Graphic du menu
Cmds.
Les commandes de gomtrie se trouvent dans le menu Geo.
3.4
114
CHAPITRE 3. LE GRAPHIQUE
Apply a le mme effet que la touche enter (pour valider une valeur sans
fermer la fentre cfg),
OK pour valider et fermer la fentre cfg,
Annuler pour annuler (annule cequi na pas t valid par enter ou
Apply) et fermer la fentre cfg.
3.5
3.6
graphe_probabiliste a comme argument une matrice de transition probabiliste A ayant au plus 7x7 entres. 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 :
116
CHAPITRE 3. LE GRAPHIQUE
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 dun nom, si ce nom est le nom dune variable qui
contient une valeur cest cette valeur que sera affiche sinon les noms safficheront
sans "".
On peut aussi dfinir les points pour dfinir le graphe, par exemple, on tape dans
un nieau de gomtrie 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 aprs avoir boug D :
3.7
3.7.1
118
3.7.2
CHAPITRE 3. LE GRAPHIQUE
Graphe en 3-d
plotfunc a deux arguments principaux et ventuellement le saut dchantillonnage des variables (xstep= et ystep=) cest dire le pas en x et en y que lon
choisi pour le graphe. On peut aussi spcifier le nombre de points dchantillonnage de la fonction reprsenter en utilisant nstep.
Les deux arguments principaux de plotfunc sont : une expression de deux variables ou une liste de plusieurs expressions de deux variables et la liste des deux
variables.
plotfunc trace la (ou les) surfaces dfinie par le premier argument.
On peut faire tourner ce graphique selon laxe des x, laxe des y ou laxe des z.
Pour cela, il faut cliquer avec la souris dans la fentre graphique en dehors du paralllpipde servant la reprsentation, puis faire bouger la souris (sans relacher
son bouton) ou utiliser les touches x, X, y, Y, z et Z.
On tape :
plotfunc( x^2+y^2,[x,y])
On obtient :
Un graphique en 3-d reprsentant z=x^2+y^2
On tape :
plotfunc(x*y,[x,y])
On obtient :
La surface z=x*y
On tape :
plotfunc([x*y-10,x*y,x*y+10],[x,y])
On obtient :
Les surfaces z=x*y-10, z=x*y et z=x*y+10
Pour navoir quune portion de surface on peut indiquer lintervalle de variation
dans le deuxime et le troisme argument.
On tape :
plotfunc(x*sin(y),[x=0..2,y=-pi..pi])
On obtient :
Une portion de surface z = x y
On peut rajouter un paramtre pour indiquer le saut dchantillonnage en x et
en y cest dire le pas en x et en y que lon veut utiliser pour faire le graphe, en
utilisantxstep et ystep.
On tape :
plotfunc(x*sin(y),[x=0..2,y=-pi..pi],xstep=1,ystep=0.5)
3.7.3
3.7.4
Graphe en "4D"
plotfunc permet aussi de reprsenter une expression Xpr valeur dans C mais
non imaginaire pur : on reprsente abs(Xpr) selon Oz et arg(Xpr) par une
couleur. Cela permet de visualiser les points ayant mme argument.
Si lexpression Xpr est imaginaire pur cest Xpr/i qui est represent en dgrad
(cf 3.7.3) Les deux arguments principaux de plotfunc sont alors une expression
de deux variables valeur dans C et la liste des noms des deux variables.
On peut aussi spcifier le nombre de points dchantillonnage de la fonction
reprsenter en utilisant nstep et demander un affichage en une forme pleine
(affichage=rempli).
plotfunc trace la surface aux couleurs de larc en ciel dfinie par le module du
premier argument soit z=abs(Xpr), chaque couleur est une valeur de arg(Xpr).
120
CHAPITRE 3. LE GRAPHIQUE
On peut faire tourner ce graphique selon laxe des x, laxe des y ou laxe des z.
Pour cela, il faut cliquer avec la souris dans la fentre graphique en dehors du paralllpipde servant la reprsentation, puis faire bouger la souris (sans relacher
son bouton) ou utiliser les touches x, X, y, Y, z et Z.
On tape :
plotfunc((x+i*y)^2,[x,y])
On obtient :
Un graphique en 3-d color reprsentant
z=abs((x+i*y)^2 et permettant de visualiser les points
ayant mme argument
On tape :
plotfunc((x+i*y)^2,[x,y],affichage=rempli)
On obtient :
La surface prcedente selon une forme pleine aux couleurs de larc en ciel
Pour navoir quune portion de surface on peut indiquer lintervalle de variation
dans le deuxime et le troisme argument.
On tape :
plotfunc((x+i*y)^2,[x=-1..1,y=-2..2], nstep=900,
affichage=rempli)
On obtient :
La portion de la surface prcedente selon une forme pleine aux couleurs de larc
en ciel avec x entre -1 et 1, y entre -2 et 2 et avec 900 points dchantillonnage
Remarque
Si vous voulez limpression ou la traduction en Latex, il faut utiliser :
MIExporter/ImprimerIPrint(with Latex).
3.8
3.9
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 dfinie 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 laxe des x, laxe des y ou laxe des
z. Pour cela, il faut cliquer avec la souris dans la fentre graphique en dehors du
paralllpipde servant la reprsentation, 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 cne x = v cos(u), y = v sin(u), z = v
Pour navoir quune portion de surface on peut indiquer lintervalle de variation
dans le deuxime et le troisme argument.
On tape :
plot3d([v*cos(u),v*sin(u),v],u=0..pi,v=0..3)
On obtient :
Une portion du cne x = v cos(u), y = v sin(u), z = v
122
CHAPITRE 3. LE GRAPHIQUE
3.10
3.10.1
Voir aussi : 9.10.1 et 10.5.1 pour la droite en gomtrie et 9.10.1 et 10.5.2 pour
la droite oriente.
droite a comme argument son quation cartsienne :
en 2-d
une quation de droite,
en 3-d
deux quations de plan.
droite dfinit et trace la droite dquation donne en argument.
On tape :
droite(2*y+x-1=0)
On obtient :
le trac de la droite 2*y+x-1=0
On tape :
droite(y=1)
On obtient :
le trac de la droite horizontale y=1
On tape :
droite(x=1)
On obtient :
le trac de la droite verticale x=1
On tape :
droite(x+2*y+z-1=0,z=2)
On obtient :
le trac de la droite x+2*y+1=0 dans le plan z=2
On tape :
droite(y=1,x=1)
On obtient :
le trac de la droite verticale passant par (1,1,0)
Remarque
droite dfinit une droite oriente :
123
Lorsque la droite 2-d est donne par son quation, on met cette quation
sous la forme "membre_gauche-membre_droite=ax+by+c=0", cela dtermine son vecteur normal [a,b] et lorientation est donne par le vecteur
[b,-a]) (ou encore son orientation est dfinie par le produit vectoriel 3-d
de son vecteur normal (de cote 0) et du vecteur de coordonnes [0,0,1]).
Par exemple droite(y=2*x) dfinit une droite oriente par le vecteur de
coordonnes [1,2].
Lorsque la droite 3-d est donne par deux quations de plans, son orientation
est dfinie par le produit vectoriel des normales aux plans (en mettant les
quations des plans sous la forme "membre_gauche-membre_droite=0" on
dtermine les normales orientes de ces plans).
Par exemple, droite(x=y,y=z) est oriente par :
cross([1,-1,0],[0,1,-1])=[1,1,1].
3.10.2
3.10.3
3.10.4
124
CHAPITRE 3. LE GRAPHIQUE
droite_tangente(ln(x),1)
On obtient :
le trac de la droite y=x-1
On tape :
equation(LineTan ln(x),1)
Ou on tape :
equation(droite_tangente(ln(x),1))
On obtient :
lquation y=(x-1)
)
3.10.5
Voir aussi : 9.10.8 pour la gomtrie plane et 10.6.3 pour la gomtrie 3-d.
tangent a deux arguments : un objet gomtrique et un point A.
Mais quand lobjet gomtrique est le graphe G dune fonction 2-d, le deuxime
argument doit tre soit, un nombre rel x0 , soit un point A situ sur G.
Par exemple on tape :
G:=plotfunc(g(x),x)
tangent(G, 1.2)
trace la tangente au graphe G de la fonction g au point dabscisse x=1.2,
ou on tape :
A:=point(1.2+i*g(1.2))
tangent(G, A)
trace la tangente au point A du graphe G de la fonction g.
Par exemple, pour avoir le trac de la tangente au graphe de g(x) = x2 au point
dabscisse x0 = 1, on tape :
g(x):=x^2; G:=plotfunc(g(x),x)
T:=tangent(G,1)
ou on tape :
T:=tangent(G,point(1+i))
On obtient
La tangente au graphe de g(x) = x2 au point 1+i
Lquation de la tangente est alors obtenue en tapant :
equation(T)
3.10.6
3.10.7
3.11
plotinequation([f1(x,y)<a1,..,fk(x,y)<ak],[x=x1..x2,y=y1..y2])
trace la surface du plan dfinie par les inquations 2 variables :
f 1(x, y) < a1
...
f k(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 lorigine et dlimite par
lhyperbole x^2-y^2=3 est remplie
126
CHAPITRE 3. LE GRAPHIQUE
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 dfinit 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 gnrale du graphique (CfgIConfiguration graphique)
qui seront prises en compte.
3.11.1
aire ou area calcule de faon approche laire sous la courbe y = f (x) comprise entre x = a et x = b.
aire ou area a quatre arguments : lexpression f (x), x = a..b, un entier n et le
nom de la mthode numrique choisie pour faire calcul.
La mthode numrique est choisie parmi :
trapezoid, left_rectangle, right_rectangle, middle_point
ou trapeze, rectangle_gauche, rectangle_droit, point_milieu
et aussi simpson (mthode de Simpson), rombergt (acclration de convergence de Romberg avec la mthode des trapzes), rombergm (acclration de
convergence de Romberg avec la mthode du point milieu) et gauss15 (avec une
quadrature de Gauss adaptative 15 points).
La valeur de lentier n est le nombre de subdivisions que lon a choisi pour les calculs faits avec les mthodes trapezoid, left_rectangle, right_rectangle,
middle_point ou trapeze, rectangle_gauche, rectangle_droit,
point_milieu, simpson alors que pour gauss15, rombergt et rombergm
le nombre de subdivisions est 2n .
Ainsi,area(f(x),x=a..b,n,trapeze) calcule laire de n trapzes :
le troisime argument est un entier n, et le quatrime argument est le nom de la
mthode numrique dintgration lorsquon partage [a, b] en n parties gales.
area(f(x),x=a..b,n,rombergt) revient calculer laire de 2n trapzes
qui sont acclrs.
On tape :
area(x^2,x=0..1,8,trapeze)
On obtient :
0.3359375
On tape :
area(x^2,x=0..1,8,point_milieu)
On obtient :
0.33203125
3.12
Avec deux arguments, aire_graphe ou plotarea permet de reprsenter et dafficher avec 3 digits laire sous une courbe.
Ainsi, plotarea(f(x),x=a..b) trace laire sous la courbe y = f (x)
pour a < x < b, cest dire la portion du plan dfinie par les inquations
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)
128
CHAPITRE 3. LE GRAPHIQUE
Avec quatre arguments, aire_graphe ou plotarea permet de reprsenter laire qui est cacule avec la mthode numrique 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 laire de n trapzes : le troisime argument est un entier n, et le quatrime argument est
le nom de la mthode numrique dintgration lorsquon 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 trapzes qui sont utiliss dans la mthode
dite des trapzes, pour approcher une intgrale
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 utiliss dans la mthode
dite du point milieu, pour approcher une intgrale
Remarque 1 On peut aussi taper, pour navoir que la valeur de laire :
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 souvre : vous entrez, lexpression de la fonction, le nom
de la variable, les bornes de lintervalle xmin,xmax, le pas xstep (on a alors
n=(xmax-xmin)/xstep), la mthode dintgration et aussi la couleur du dessin (on retrouve en effet le bouton Attribut en haut et gauche de la boite de
dialogue).
3.13
3.14
plotdensity(x^2-y^2,[x=-2..2,y=-2..2],xstep=0.1,ystep=0.1)
On obtient :
Un graphique en 2-d reprsentant pour chaque z,
lhyperbole dfinie par x^2-y^2=z par une couleur de
larc en ciel
On remarquera que lon a lechelle des couleurs en dessous du graphe.
130
CHAPITRE 3. LE GRAPHIQUE
3.15
plotimplicit ou implicitplot permet de tracer des courbes ou des surfaces dfinies de faon implicite par une expression. Pour que Xcas ne cherche
pas factoriser lexpression, la commande plotimplicit ou implicitplot
peut tre utilise avec loption unfactored ou sans_factoriser mise comme
dernier paramtre, :
avec unfactored lexpression ne sera pas modifie,
sans unfactored Xcas rduit lexpression au mme dnominateur puis
cherche factoriser le numrateur.
3.15.1
plotimplicit(f(x,y),x,y) ou plotimplicit(f(x,y),[x,y])
trace la reprsentation graphique de la courbe dfinie implicitement par f (x, y) =
0 lorsque x (resp y) varie selon WX-, WX+ (resp WY-, WY+) dfini dans
cfg,
plotimplicit(f(x,y),x=0..1,y=-1..1) ou
plotimplicit(f(x,y),[x=0..1,y=-1..1]) trace la reprsentation graphique de la courbe dfinie implicitement par f (x, y) = 0 lorsque
0 x 1 et 1 y 1 (mettre des bornes un peu plus grandes pour ne
pas avoir de manques !).
On peut ventuellement rajouter encore deux paramtres pour spcifier le saut
dchantillonnage des variables avec xstep= et ystep=, cest dire le pas en
x et en y que lon choisi pour le graphe.
On tape :
plotimplicit(x^2+y^2-1,[x,y])
Ou on tape :
plotimplicit(x^2+y^2-1,x,y,unfactored)
On obtient :
Le dessin du cercle unit
On tape :
plotimplicit(x^2+y^2-1,x,y,xstep=0.2,ystep=0.3)
Ou on tape :
plotimplicit(x^2+y^2-1,[x,y],xstep=0.2,ystep=0.3)
Ou on tape :
plotimplicit(x^2+y^2-1,[x,y],
xstep=0.2,ystep=0.3,unfactored)
On obtient :
131
3.15.2
132
CHAPITRE 3. LE GRAPHIQUE
3.16
3.16.1
3.16.2
133
plotparam a deux arguments principaux et ventuellement les sauts dchantillonnage des variables avec ustep= et vstep=, cest dire le pas en u et en v
que lon choisi pour le graphe.
Les deux arguments principaux de plotparam sont : une liste de trois expressions de deux variables et la liste des deux variables.
plotparam([f(u,v),g(u,v),h(u,v)],[u,v]) trace la surface dfinie
par le premier argument soit x = f (u, v), y = g(u, v), z = h(u, v)).
On peut faire tourner ce graphique selon laxe des x, laxe des y ou laxe des z.
Pour cela, il faut cliquer avec la souris dans la fentre graphique en dehors du paralllpipde servant la reprsentation, puis faire bouger la souris (sans relacher
son bouton) ou utiliser les touches x, X, y, Y, z et Z.
On tape :
plotparam([v*cos(u),v*sin(u),v],[u,v])
On obtient :
Le cne x = v cos(u), y = v sin(u), z = v
Pour navoir quune portion de surface on peut indiquer lintervalle de variation
dans le deuxime et le troisme argument.
On tape :
plotparam([v*cos(u),v*sin(u),v],[u=0..pi,v=0..3])
On obtient :
Une portion du cne x = v cos(u), y = v sin(u), z = v
On tape :
plotparam([v*cos(u),v*sin(u),v],[u=0..pi,v=0..3],
ustep=0.5,vstep=0.5)
On obtient :
Une portion du cne x = v cos(u), y = v sin(u), z = v
Remarque
Si vous voulez limpression ou la traduction en Latex, il faut utiliser :
MIExporter/ImprimerIPrint(with Latex).
3.17
134
CHAPITRE 3. LE GRAPHIQUE
t)nj L[j].
parameq(bezier(L)) renvoie lquation paramtrique de la courbe de Bzier
ayant comme points de contrle les points de la squence L.
On tape :
bezier(1,1+i,2+i,3-i,plot)
On obtient :
Le trac de la courbe de Bzier ayant comme points de
contrle les points daffixe 1,1+i,2+i,3-i
On tape :
parameq(bezier(1,1+i,2+i,3-i))
On obtient :
Lquation paramtrique de la courbe prcdente
On tape :
bezier(point([0,0,0]),point([1,1,0]),point([0,1,1]),plot)
On obtient :
Le trac de la courbe de Bzier ayant comme points de
contrle 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 :
Lquation paramtrique de la courbe prcdente
3.18
3.19
3.20
136
CHAPITRE 3. LE GRAPHIQUE
On obtient :
Des segments de pente 4*sin(t*y) sont tracs en
diffrents points. Ces segments reprsentent les
vecteurs tangents dirigs selon les t croissants et
dont lorigine 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
reprsentent les tangentes au point situ en leur
milieu. Ces points espacs de 0.7
On tape :
plotfield(5*[-y,x],[x=-1..1,y=-1..1])
On obtient :
Des vecteurs [y, x] sont tracs aux points (x, y). Ces
vecteurs reprsentent des vecteurs tangents en leur
origine aux courbes solutions du systme
x(t)0 = y, y(t)0 = x. Ils sont dirigs 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
reprsentent les tangentes au point situ en leur
milieu aux courbes solutions du systme
x(t)0 = y, y(t)0 = x.
3.21
On peut tracer les solutions de lquation diffrentielle y 0 = f (t, y) ou du systme dquations diffrentielles x0 = u(t, x, y), y 0 = v(t, x, y) et on peut spcifier
les plages de valeurs des paramtres.
plotode(f(t,y),[t,y],[t0,y0]) trace en fonction du temps la solution y(t) de lquation diffrentielle y 0 = f (t, y) passant par le point
(t0,y0), o f (t, y) dsigne une expression dpendant de la variable de
temps t et de la variable y.
Par dfaut, t varie dans les 2 directions. On peut spcifier la plage du temps
par le paramtre optionnel t=tmin..tmax.
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 systme dquations diffrentielles dpendant de
2 paramtre a et b :
x0 = y + b
y 0 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 :
138
CHAPITRE 3. LE GRAPHIQUE
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,
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
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
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
3.23
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 0 = sin(t y).
Ensuite, il suffit de cliquer en diffrents points de lcran de gomtrie pour avoir
les tracs des solutions passant par ces points et les commandes correspondantes
stockes 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 nest pas accessible directement : on doit
rouvrir la boite de dialogue avec le menu Graphe->Slopefield/Ode(2d).
Si on trouve que le champ des tangentes est gnant, on peut le supprimer facilement
en supprimant le niveau correspondant sa commande.
140
CHAPITRE 3. LE GRAPHIQUE
3.24
Xcas permet danimer des graphes en 2-d, 3-d ou "4D" en calculant une fois
pour toute une suite dobjets graphiques et en affichant chaque objet de la sequence
en boucle.
Le temps daffichage dun objet peut se rgler avec animate dans cfg
(plus le nombre est petit et plus le temps daffichage est petit i.e la vitesse
danimation est grande).
Si on met animate 0, chaque clic de la souris dans lcran graphique,
on a un affichage.
Le nombre dimages peut se rgler avec un argument de la forme frames=
ou trames= .
On peut interrompre ou relancer laffichage en boucle en cliquant sur le bouton I| ( droite de M).
3.24.1
animate(sin(a*x),x=-pi..pi,a=-2..2,trames=10,couleur=rouge)
On obtient :
une une la reprsentation graphique de y=sin(ax)
pour 11 valeurs de a entre -2 et 2
3.24.2
animate3d permet de crer une animation en boucle dun graphe 3-d de fonctions dpendant dun paramtre. Le paramtre doit tre indiqu en 3me argument
de animate3d, le nombre dimages en 4me argument sous la forme frames=
ou trames=, les autres arguments sont identiques ceux de la commande plotfunc,
voir section 3.7.2, p. 118.
On tape :
animate3d(x^2+a*y^2,[x=-2..2,y=-2..2],a=-2..2,
frames=10,affichage=rouge+rempli)
On obtient :
une une la reprsentation graphique de z=x^2+a*y^2
pour 11 valeurs de a entre -2 et 2
3.24.3
141
animation permet de dessiner chaque objet dune suite dobjets graphiques avec
un temps daffichage donn. En gnral les objets de la suite dpendent dun paramtre, il faut alors crer une suite en faisant varier ce paramtre.
animation a comme paramtre une squence dobjets graphiques.
Remarque
Si on veut que dans lanimation plusieurs objets graphiques soient affichs en
mme temps, il faut mettre ces objets dans une liste, par exemple :
On tape :
plotfunc(x^2);animation([point(1),segment(1,1+i),
point(1+i)],droite(y=2*x-1))
On obtient :
le graphe de y = x2 puis une animation de 2 objets (le
premier objet est 2 points et un segment et le
deuxime une droite)
Attention
Pour dfinir la squence dobjets graphiques avec seq on peut quoter ou ne pas
quoter la commande dessinant lobjet graphique.
On peut aussi spcifier le pas de la squence si on utilise 5 arguments pour seq :
lobjet graphique, le nom du paramtre, sa valeur minimum, sa valeur maximum et
le pas.
On tape :
animation(seq(plotfunc(cos(a*x),x),a,0,10))
On obtient :
La suite des diffrentes reprsentations de la courbe
dfinies par y = cos(ax), pour a = 0, 1, 2..10
On tape :
animation(seq(plotfunc(cos(a*x),x),a,0,10,0.5))
ou
animation(seq(plotfunc(cos(a*x),x),a=0..10,0.5))
On obtient :
La suite des diffrentes reprsentations de la courbe
dfinies par y = cos(ax), pour a = 0, 0.5, 1, 1.5..10
On tape :
animation(seq(plotfunc([cos(a*x),sin(a*x)],x=0..2*pi/a),
a,1,10))
On obtient :
142
CHAPITRE 3. LE GRAPHIQUE
animation(seq(affichage(carre(0,1+i*a),rempli),a,-5,5))
On obtient :
143
144
CHAPITRE 3. LE GRAPHIQUE
Puis on tape :
animation(essai(20))
On voit, en boucle, chaque point, lun aprs lautre, avec un temps daffichage plus
ou moins grand selon la valeur de animate de cfg.
Ou on tape :
L:=essai(20); s:=segment(0,L[k])$(k=0..20)
On voit les 21 segments.
Puis on tape :
animation(s)
On voit, en boucle, chaque segment, lun apres lautre avec un temps daffichage
plus ou moins grand selon la valeur de animate de cfg.
Chapitre 4
Calcul numrique
4.1
Voici comment sont codes les nombres rels lorsque le nombre de chiffres
significatifs demands est infrieur ou gal 16 (par exemple Digits:=15).
On crit d, un nombre rel ou dcimal, sous la forme :
d = 2 (1 + m) avec 0 < m < 1 et 210 < 210 .
On utilse 64 bits pour reprsenter ce nombre :
le premier bit pour le signe de d (0 pour + et 1 pour -),
les 11 bits suivant sont pour cods lexposant (on code + 210 1),
les 52 derniers sont pour cods 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
= 210 1 est cod 000 0000 0000.
Remarque
52
2
= 0.2220446049250313e 15
4.1.1
codage de 3.1 :
On a :
3.1
+ 1/2 + 1/25 + 1/26 + 1/29 + 1/210 + ....) = 2 (1 + 1/2 +
P= 2 (1
4k+1
+ 1/24k+2
)
k=1 1/2
P
4k+1 + 1/24k+2
donc = 1 et m = 1/2 +
k=1 1/2
On obtient le codage de 3.1 :
40 (01000000), 8 (00001000), cc (11001100), cc (11001100),
cc (11001100), cc (11001100), cc (11001100), cd (11001101),
le dernier octet est 1101 car il y a eu un arrondi du dernier bit a 1, car le
145
146
4.1.2
codage de 0.1 :
On a :
P
4k +
0.1 = 24 (1+1/2+1/24 +1/25 +1/28 +1/29 +...) = 24
k=0 1/2
4k+1
1/2
P
4k + 1/24k+1
donc = 1 et m = 1/2 +
k=1 1/2
On obtient le codage de 0.1 :
the code of3f (00111111), b9 (10111001), 99 (10011001), 99 (10011001),
99 (10011001), 99 (10011001), 99 (10011001), 9a (10011010),
le dernier octet est 1010 car il y a eu un arrondi les 2 derniers bits 01 sont
devenus 10 car le chiffre suivant etait 1.
codage de a :=3.1-3 :
Lexposant sera donc = 4 (qui correspond 2 25 ) et les bits qui
correspondent la mantisse vont dbuter 1/2 = 2 26 : ainsi les nombres
de la mantisse subissent un dcalage vers la gauche de 5 places et on obtient :
3f (00111111), b9 (10111001), 99 (10011001), 99 (10011001),
99 (10011001), 99 (10011001), 99 (10011001), 9a (10100000),
On voit alors que :
a > 0.1 et que a 0.1 = 1/250 + 1/251 (car 100000-11010=110)
Remarque
Ce qui prcde permet dexpliquer pourquoi lorsque Digits:=15 :
floor(1/(3.1-3)) renvoie 9 et non 10.
4.2
147
148
149
150
On tape :
evalf(sqrt(2),10)
On obtient :
1.414213562
Attention
Si vous dfinissez une fonction F (a) qui renvoie une squence forme par un
nombre fractionnaire p/q et un entier n alors evalf(F(a)) renvra une approximation de p/q avec n chiffres significatifs ! Il faut donc crire evalf([F(a)])
pour avoir une liste constitue dune approximation de p/q et de n.
4.3
4.3.1
Quelques fonctions
Solution approche dune quation : newton
4.3.2
151
4.3.3
romberg ou nInt a comme arguments : une expression Xpr, le nom de la variable de cette expression (par dfaut x), et deux valeurs a,b.
romberg(Xpr,x,a,b)
ou nInt(Xpr,x,a,b) calcule de faon approche
Rb
lintgrale a Xpr dx par la mthode de Romberg.
On tape :
romberg(exp(x^2),x,0,1)
On obtient :
1.46265174591
152
4.3.4
Calcul approch dintgrales par une quadrature de Gauss adaptative 15 points : gaussquad
4.3.5
153
On tape :
odesolve(sin(t*y),[t,y],[0,1],2)
ou :
odesolve(sin(t*y),t=0..2,y,1)
ou :
odesolve(0..2,(t,y)->sin(t*y),1)
ou encore on dfinit la fonction :
f(t,y):=sin(t*y)
et on tape :
odesolve(0..2,f,1)
On obtient :
[1.82241255675]
puis on tape :
odesolve(0..2,f,1,tstep=0.3)
On obtient :
[1.82241255675]
On tape :
odesolve(sin(t*y),t=0..2,y,1,tstep=0.5)
On obtient :
[1.82241255675]
On tape :
odesolve(sin(t*y),t=0..2,y,1,tstep=0.5,curve)
On obtient :
[[0.0,[1.0]],[0.3906,[1.07811817892]],[0.760963058921,[1.30972370161]],[1.070
On tape :
odesolve(sin(t*y),t=0..2,y,1,curve)
Ou on tape :
odesolve(sin(t*y),t=0..2,y,1,tstep=0.3,curve)
On obtient :
[[0.0,[1.0]],[0.3781,[1.07309655677]],[0.6781,[1.24392692452]],[0.9781,[1.512
154
4.3.6
155
[[0.1781,[-0.177159948386,0.984182072936]],
[0.3781,[-0.369155338156,0.929367707805]],
[0.5781,[-0.54643366953,0.837502384954]],
[0.7781,[-0.701927414872,0.712248484906]]]
4.4
4.5
156
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 lchantillonage en spcifiant la
valeur de xstep ou la valeur de nstep (nombre de dcoupages de lintervalle
]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 diffrents algorithmes pour rsoudre numriquement f (x) = 0
pour x ]a, b[.
Si on veut indiquer la mthode, les paramtres de fsolve sont f(x)=0, x, a..b
ou selon les mthodes un point x0 de ]a, b[ et le nom de la mthode utilise.
Les diffrentes mthodes sont dtailles ci dessous.
4.5.1
Cet algorithme de dichotomie est le plus simple mais aussi le plus lent. Il permet dencadrer le zro dune fonction sur un intervalle. chaque itration, on
coupe lintervalle en deux, on calcule la valeur au point milieu et, le signe de la
fonction en ce point nous dit sur quel morceau de lintervalle on doit recommencer
literation.
On tape :
fsolve((cos(x))=x,x,-1..1,bisection_solver)
Ou on tape :
fsolve((cos(x))=x,x=-1..1,bisection_solver)
On obtient :
[0.739085078239,0.739085137844]
On tape :
fsolve((cos(x))=x,x,0,bisection_solver)
On obtient :
Bad Argument Type
157
158
4.5.5
4.5.6
4.6
159
On propose six mthodes pour rsoudre numriquement des systmes dquations de la forme f (x) = 0.
Remarque
fsolve donnera aussi les racines numriques complexes si dans la configuration du CAS on a coch Complexe. Si Complexe est dcoch il faut utiliser
cfsolve pour avoir les racines numriques complexes.
Trois mthodes utilisent la matrice jacobienne f 0 (x) et leurs noms se terminent par
j_solver.
Les trois autres mthodes utilisent des mthodes dapproximation de f 0 (x) et utilisent uniquement f .
Les six mthodes utilisent une itration de type Newton :
xn+1 = xn f 0 (xn )1 f (xn ).
Les quatre mthodes hybrid*_solver utilisent aussi une mthode de descente
de gradient lorsque litration Newtonienne donne un pas trop grand.
La longueur du pas est calcul sans facteur dchelle pour hybrid_solver et
hybridj_solver ou avec facteur dechelle (calcul partir de f 0 (xn )) pour
hybrids_solver et hybridsj_solver
160
4.6.4
On tape :
fsolve([x^2+y-2,x+y^2-2],[x,y],[0,0],newtonj_solver)
On obtient :
[1.0,1.0]
4.6.5
On tape :
fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],hybridj_solver)
On obtient :
[1.0,1.0]
4.6.6
On tape :
fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],hybridsj_solver)
On obtient :
[1.0,1.0]
4.7
cfsolve effectue la rsolution numrique sur C dune quation ou dun systme, mme si Complexe est dcoch dans la configuration du CAS.
fsolve donne aussi les racines numriques complexes dune quation ou dun
systme 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])
161
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.32287565
4.8
proot a comme argument un polynme ou le vecteur de composantes les coefficients dun polynme (par ordre dcroissant).
proot renvoie un vecteur dont les composantes sont les racines numriques non
multiples du polynme.
On peut mettre en option un entier n pour prciser le nombre n de chiffres significatifs de la rponse. Pour chercher les racines numriques 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 numriques de x2 3 :
proot([1,0,-3])
ou :
proot(x^2-3)
On obtient :
[1.73205080757,-1.73205080757]
162
4.9
Chapitre 5
5.1
5.1.1
Les units
La notation des units
Les noms des units sont prcds du symbole _ ("underscore"). Par exemple
2_m for 2 meters.
Vous pouvez mettre un prfixe devant le nom dune unit qui indique une multiplication par une puissance de 10. Par exemple k ou K pour kilo (indique une
multiplication par 103 ), D pour dca (indique une multiplication par 10), d pour
dci (indique une multiplication par 101 ) etc...
Lorsquon combine un nombre rel avec des units on cre un objet-unit.
On tape :
10.5_m
On obtient :
un objet-unit valant 10.5 mtres
On tape :
10.5_km
On obtient :
un objet-unit valant 10.5 kilomtres
5.1.2
164
+ et -) et le rsultat sera exprim selon lunit correspondante. Pour la multiplication et la division de deux units diffrentes _u1 et _u2 lunit rsultat scrit
_(u1*u2) ou _(u1/u2) (ne pas oublier les parenthses ! ! !)
On peut aussi lever un objet-unit une puissance entire : on obtient lobjet-unit
correspondant.
Il faut noter que lors dune addition ou dune soustraction, le rsultat sera exprim
selon lunit du premier terme de lopration.
On tape :
1_m+100_cm
On obtient :
2_m
On tape :
100_cm+1_m
On obtient :
200_cm
On tape :
1_m*100_cm
On obtient :
100_(cm*m)
On tape :
3_h +10_mn-(1_h+45_mn)
On obtient :
1.41666666667_h
On tape :
10_mn+3_h-(1_h+45_mn)
On obtient :
85.0_mn
5.1.3
convert permet dobtenir la conversion dun objet-unit dans une autre unit qui
est le deuxime paramtre.
=> est la version infixe de convert ou convertir.
On tape :
convert(2_h+30_mn,_mn)
165
ou bien
2_h+30_mn=>_mn
On obtient :
150_mn
On tape :
convert(1_m*100_cm,_m^2)
ou bien
convert(100_(cm*m),_m^2)
ou bien
100_(cm*m)=>_m^2
On obtient :
1_m^2
On tape :
convert(1_h,_s)
Ou on tape :
1_h=>_s
On obtient :
3600_s
On tape :
convert(60_mn,_h)
Ou on tape :
60_mn=>_h
On obtient :
1.0_h
Remarque
Il faut mettre un espace avant lunit si le nombre dunit se trouve dans une variable ou si cest une constante :
On tape :
convert(pi _rad,_deg)
Ou on tape :
pi _rad=>_deg
166
On obtient :
180.0_deg
On tape :
a:=180
convert(a _deg,_rad)
Ou on tape :
a _deg=>_rad
On obtient :
3.14159265358_rad
5.1.4
5.1.5
167
32
5.1.6
ufactor permet de factoriser une unit dans un objet-unit : on obtient un objetunit multipli par les units MKSA restantes .
On tape :
ufactor(3_J,_W)
On obtient :
3_(W*s)
On tape :
ufactor(3_W,_J)
On obtient :
3_(J/s)
5.1.7
168
5.1.8
Vous pouvez mettre des prfixes devant les noms dunits : chaque prfixe correspond au nom de lunit mulipli par une puissance de 10.
Voici les diffrents prfixes disponibles :
Prfixe
Y
Z
E
P
T
G
M
k ou K
h ou H
D
Nom
yota
zta
exa
pta
tra
giga
mga
kilo
hecto
dca
(*10^) n
24
21
18
15
12
9
6
3
2
1
Prfixe
d
c
m
mu
n
p
f
a
z
y
Nom
dci
cent
mili
micro
nano
pico
femto
atto
zepto
yocto
(*10^) n
-1
-2
-3
-6
-9
-12
-15
-18
-21
-24
Remarque
Bien sr vous ne pouvez pas utiliser le prfixe avec une unit intgre si la combinaison donne une autre unit intgre.
Par exemple, 1_a est un are et 1_Pa est un pascal et non 10^15_a.
5.2
5.2.1
Les noms des constantes physiques commencent et se terminent par le caractre _ ("underscore"). Il ne faut pas confondre les constantes physiques avec les
constantes symboliques, par exemple, e, sont des constantes symboliques alors
que _c_, _N A_ sont des constantes physiques.
On tape :
_c_
On obtient la vitesse de la lumire dans le vide :
299792458_m*s^-1
On tape :
_NA_
On obtient le nombre dAvogadro :
6.0221367e23_gmol^-1
5.2.2
169
170
Chapitre 6
6.2
6.2.1
Les boolens
Les valeurs dun boolen : true false
6.2.2
==, !=, >, >=, <, <= sont des oprateurs infixs.
a==b teste lgalit entre a et b et renvoie 1 si a est gal b et 0 sinon.
a!=b renvoie 1 si a est diffrent de b et 0 sinon.
a>=b renvoie 1 si a est suprieur ou gal b et 0 sinon.
a>b renvoie 1 si a est strictement suprieur b et 0 sinon.
a<=b renvoie 1 si a est infrieur ou gal b et 0 sinon.
a<b renvoie 1 si a est strictement infrieur b et 0 sinon.
On tape pour dfinir la fonction boolenne qui vaut true sur ]0; +[ et qui vaut
false sur ] ; 0] :
f(x):=ifte(x>0,true,false)
171
172
On tape :
f(0)==0
On obtient :
1
Attention
a=b nest pas un boolen ! ! ! !
Pour tester lgalit entre a et b il faut mettre a==b.
6.2.3
or (ou ||), xor, and (ou &&) sont des oprateurs infixs.
not est un oprateur prfix.
Soient a et b deux boolens :
(a or b) ou (a || b) renvoie 0 (ou false) si a et b valent 0 et renvoie 1
(ou true) sinon.
(a xor b) renvoie 1 si a vaut 1 et b vaut 0 ou si a vaut 0 et b vaut 1 et renvoie
0 si a et b valent 0 ou si a et b valent 1 (cest le "ou exclusif").
(a and b) ou (a && b) renvoie 1 (ou true) si a et b valent 1 et 0 (ou
false) sinon.
sinon.
not(a) renvoie 1 (ou true) si a vaut 0 (ou false), et 0 (ou false) si a vaut
1 (ou true).
On tape :
1>=0 or 1<0
On obtient :
1
On tape :
1>=0 xor 1>0
On obtient :
0
On tape :
1>=0 and 1>0
On obtient :
1
On tape :
not(0==0)
On obtient :
0
6.2.4
173
6.3
On peut valuer une expression boolenne grce la commande evalb cette commande sert surtout pour la compatibilit Maple car en Xcas, les boolens sont toujours valus.
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
174
6.4
6.4.1
Les entiers peuvent etre entrs avec la notation 0x... en hexadcimal par exemple
0x1f reprsente 16+15=31 en dcimal. On peut faire afficher les entiers en hexadcimal (bouton de la ligne dtat du cas avec le bouton Base (Entiers)).
bitor est le ou logique inclusif bit bit.
On tape :
bitor(0x12,0x38)
ou on tape :
bitor(18,56)
On obtient :
58
en effet :
18 scrit 0x12 en base 16 et 0b010010 en base 2,
56 scrit 0x38 en base 16 et 0b111000 en base 2,
bitor(18,56) scrit 0b111010 en base 2 et donc vaut 58.
bitxor est le ou logique exclusif bit bit.
On tape :
bitxor(0x12,0x38)
ou on tape :
bitxor(18,56)
On obtient :
42
en effet :
18 scrit 0x12 en base 16 et 0b010010 en base 2,
56 scrit 0x38 en base 16 et 0b111000 en base 2,
bitxor(18,56) scrit 0b101010 en base 2 et donc vaut 42.
bitand est le et logique bit bit.
On tape :
bitand(0x12,0x38)
ou on tape :
bitand(18,56)
On obtient :
16
en effet :
18 scrit 0x12 en base 16 et 0b010010 en base 2,
56 scrit 0x38 en base 16 et 0b111000 en base 2,
bitand(18,56) scrit 0b010000 en base 2 et donc vaut 16.
6.4.2
175
La distance de Hamming bit bit est la somme des valeurs absolues des diffrences bit bit des 2 nombres cest--dire le nombre de bits diffrents.
On tape :
hamdist(0x12,0x38)
ou on tape
hamdist(18,56)
On obtient :
3
en effet :
18 scrit 0x12 en base 16 et 0b010010 en base 2,
56 scrit 0x38 en base 16 et 0b111000 en base 2,
hamdist(18,56) vaut 1+0+1+0+1+0 et donc vaut 3.
6.5
6.5.1
176
On obtient :
"o"
Remarque
Lorsque lon tape une chane de caractres dans la ligne de commande, cela gnre
un cho en rponse.
Exemple :
On tape :
"bonjour"
On a "bonjour" sinscrit comme question et on a bonjour comme rponse.
On tape :
"bonjour"+", ca va?"
On obtient :
"bonjour, ca va?"
6.5.2
6.5.3
6.5.4
177
6.5.5
6.5.6
178
On obtient :
"Madame ","Madame bon","Madame bonjour"
6.5.7
6.5.8
6.5.9
179
6.5.10
180
6.5.11
6.5.12
+ est un oprateur prfix ou infix qui a comme paramtre une squence dobjets
comprenant une chane de caractres.
+ concatne ces objets en une chane de caractres.
Attention
Quand l oprateur + est prfix il faut le quot cest dire lcrire +
On tape :
+("abcd",3,"d")
Ou on tape :
"abcd"+3+"d"
On obtient :
"abcd3d"
On tape :
c:=5
On tape ensuite :
"abcd"+c+"e"
Ou on tape ensuite :
+("abcd",c,"e")
On obtient :
"abcd5e"
6.5.13
181
+ ou cat value les arguments et les concatne en une chane. cela permet donc
de transformer un nombre rel en une chane de caractres.
On tape :
"="+123
Ou on tape :
cat("=",123)
On obtient :
"=123"
On tape :
a:=123
puis,
"0n a obtenu : "+a)
ou
cat("0n a obtenu : ",a)
On obtient :
"On a obtenu : 123"
6.5.14
182
6.5.15
format value son argument et le transforme en une chane de caractres du format indiqu.
Le format est indiqu par une lettre et un nombre :
f (pour format flottant) suivi du le nombre de chiffres aprs la virgule.
On tape :
format(sqrt(2)*10^10,f13)
On obtient :
"14142135623.7308959960938"
s (pour format scientifique) suivi du nombre de chiffres significatifs.
On tape :
format(sqrt(2)*10^10,s13)
On obtient :
"14142135623.73"
e (pour format ingnieur) suivi du nombre de chiffres significatifs augment
de 1.
On tape :
format(sqrt(2)*10^10,e13)
On obtient :
"1.4142135623731e+10"
6.5.16
183
6.6
6.6.1
convert ou convertir permet de faire diffrente conversions selon loption choisie par le deuxime argument. Pour convertir un entier n en son criture
en base b, cette option est base. Les arguments de convert ou convertir
sont alors un entier n, base et la valeur de la base b.
184
6.6.2
6.7
185
Dans tout ce paragraphe, on peut utiliser des entiers de Gauss (nombres complexes de la forme a + i b avec a et b dans Z), la place des entiers dans les
diffrentes fonctions.
6.7.1
La factorielle : factorial
6.7.2
186
On obtient :
2+i
en effet (1 + i) (2 + i) = 1 + 3 i et i (2 + i) (3 + 2i) = (7 4i)
On tape :
igcd(15/7,50/9)
ou
gcd(15/7,50/9)
On obtient :
5/63
5
en effet 15
7 = 27 63 et
On tape :
50
9
5
= 70 63
.
gcd(18,15,21,36)
ou
igcd(18,15,21,36)
On obtient :
3
On tape :
gcd([18,15,21,36])
On obtient :
3
On peut aussi mettre comme paramtres deux listes de mme longueur (ou une
matrice ayant 2 lignes), dans ce cas gcd renvoie le PGCD des lments de mme
indice (ou dune mme colonne). On tape :
gcd([6,10,12],[21,5,8])
Ou on tape :
gcd([[6,10,12],[21,5,8]])
On obtient :
[3,5,4]
On peut aussi utiliser la librairie Pari qui a une fonction gcd plus gnrale car
pari("gcd",x,y) fonctionne aussi lorsque x et y sont rationnels et aussi lorsque
x et y sont des listes ou des matrices qui nont pas forcment la mme dimension
(cest alors le type de y qui donne le type du rsultat.
On tape :
187
pari("gcd",5/7,50/9)
On obtient :
5/63
car
5
7
=9
5
63
et
50
9
= 70
5
63
On tape :
pari("gcd", [4,3],[20,30,50,75]))
On obtient une matrice A de dimension 4 2, cest aussi une liste de mme longueur que y i.e. de longueur 4 :
[[4,1],[2,3],[2,1],[1,3]]
car gcd(4, 20) = 4, gcd(3, 20) = 1, gcd(4, 30) = 2, gcd(3, 30) = 3...
Pour obtenir ce rsultat avec Xcas, on doit taper 2 instructions :
gcd( [4,4,4,4],[20,30,50,75])
On obtient la premire colonne de A :
[4,2,2,1]
et on tape
gcd( [3,3,3,3],[20,30,50,75])
On obtient la deuxime colonne de A :
[1,3,1,3]
: On tape :
diag(pari("gcd", [5,4,3,2],[20,30,50,75])))
ou on tape :
gcd([5,4,3,2],[20,30,50,75])
On obtient :
[5,2,1,1]
Un exemple
Dterminer le pgcd de 4n + 1 et de 5n + 3 quand n N.
On dfinit :
f(n):=gcd(4*n+1,5*n+3)
Puis on tape le programme essai(n) qui renvoie pour j = n n la liste des
valeurs de j, a lorsque le pgcd de 4j + 1 et 5j + 3 est gal a 6= 1 :
188
essai(n):={
local j,a,L;
L:=NULL;
for (j:=-n;j<n;j++) {
a:=f(j);
if (a!=1) {
L:=L,[j,a];
}
}
return L;
}
Puis on tape :
essai(20)
On obtient :
[-16,7],[-9,7],[-2,7],[5,7],[12,7],[19,7]
On voit donc que 4n + 1 et 5n + 3 sont soit premiers entre eux soit leur pgcd vaut
7 lorsque n [16, 9, 2, 5, 12, 19] cest dire lorsque n = 5 + k 7.
On doit donc montrer que :
si n! = 5 + k 7 pour k Z, 4n + 1 et 5n + 3 sont premiers entre eux, et
si n = 5 + k 7 pour k Z, 4n + 1 et 5n + 3 ont 7 comme pgcd.
6.7.3
Le PGCD : Gcd
Gcd est la forme inerte de gcd. Voir la section 6.27.8 sur les polynmes coefficients dans Z/pZ pour utiliser cette instruction.
On tape :
Gcd(18,15)
On obtient :
gcd(18,15)
6.7.4
lgcd dsigne le PGCD des lments dune liste dentiers (ou dune liste de polynmes).
On tape :
lgcd([18,15,21,36])
On obtient :
3
On peut aussi utiliser la librairie Pari et taper :
pari("content",([18,15,21,36])
189
On obtient :
3
Attention
On ne peut pas mettre comme paramtres deux listes de mme longueur.
6.7.5
Le PPCM : lcm
lcm dsigne le PPCM de deux entiers ou de deux rationnels (ou deux polynmes
voir alors 6.27.10).
On tape :
lcm(18,15)
On obtient :
90
On tape :
lcm(5,2+i))
On obtient :
5
On tape :
lcm(1+3i,7-4i)
On obtient :
11+3*i
en effet (1+i)(12i)(3+2i) = 11+3i = (3i)(3+2i) = (1+i)(74i)
On tape :
lcm(15/7,50/9)
On obtient :
150
en effet gcd(15/7,50/9)=5/63 et
6.7.6
15
7
50
9
= 150
5
63
190
On tape :
ifactor(-90)
On obtient :
(-1)*2*3^2*5
On tape :
ifactor(90i)
On obtient :
(1+i)^2*3^2*(2+i)*(2-i)
On tape :
ifactor(90+5i)
On obtient :
(i)*(2+i)*(2-i)^3*(3-2*i)
6.7.7
191
ifactors(90+5i)
On obtient :
[i,1,2+i,1,2-i,3,3-2*i,1]
On tape :
ifactors([36,52])
On obtient :
[[2,2,3,2],[2,2,13,1]]
6.7.8
6.7.9
idivis ou divisors donne la liste des diviseurs dun entier (ou dune liste
dentiers).
On tape :
idivis(36)
On obtient :
[1,2,4,3,6,12,9,18,36]
On tape :
idivis([36,22])
On obtient :
[[1,2,4,3,6,12,9,18,36],[1,2,11,22]]
192
6.7.10
div est un oprateur infix qui dsigne le quotient entier q de la division euclidienne des deux entiers ou de deux entiers de Gauss a et b donns en argument
(a = b q + r avec 0 r < b).
On tape :
148 div 5
On obtient :
29
On tape :
factorial(148) div (factorial(145)+2)
On obtient :
3176375
factorial(148) div factorial(145)+2
On obtient :
3176378
On tape :
(25+12*i) div (5+7*i)
On obtient :
3-2*i
6.7.11
iquo (ou intDiv) dsigne le quotient entier q de la division euclidienne des deux
entiers a et b donns en argument (a = b q + r avec 0 r < b).
iquo travaille avec des entiers ou des entiers de Gauss.
Pour les entiers de Gauss, on choisit q pour que b q soit le plus proche possible
de a et on peut montrer que lon peut choisir r tel que |r|2 |b|2 /2.
On tape :
iquo(148,5)
On obtient :
29
On tape :
iquo(factorial(148),factorial(145)+2)
On obtient :
3176375
193
ou encore
iquo(25+12*i,5+7*i)
On obtient :
3-2*i
On a :
a b q = 4 + i et on a | 4 + i|2 = 17 < |5 + 7 i|2 /2 = 74/2 = 37
6.7.12
194
-2 % 5
ce qui veut dire que 148 mod 5 = 2 mod 5 et que 148 mod 5 et 2 % 5
sont des lments de Z/5Z (voir 6.33 pour avoir les oprations possibles
dans Z/5Z).
Remarque
Si on veut passer dun lment de Z/5Z un lment de Z, on tape % 0 : On
tape :
(148% 5)% 0
On obtient :
-2
6.7.13
6.7.14
6.7.15
195
6.7.16
196
On obtient :
0
On tape :
is_pseudoprime(9856989898997789789)
On obtient :
1
6.7.17
is_prime(n) renvoie 1 (vrai) ou 0 (faux) selon que son argument est premier
ou non. isprime ou isPrime renvoie true ou false.
Utiliser la commande is_prime(n,1) (ou pari("isprime",n,1)) pour
obtenir un certificat de primalit par le test "p-1" de Selfridge-Pocklington-Lehmer
(voir la documentation de PARI/GP, depuis le menu Aide->Manuels->PARI-GP))
et pari("isprime",n,2) ou is_prime(n,2) pour utiliser le test APRCL
ou is_prime(n) pour utiliser un test mixte.
En interne isprime appelle is_prime, et si la reponse est 0 il la transforme en
false, sinon il renvoie true. On ne peut donc pas obtenir de certificat de primalit avec isprime, par contre les arguments de isprime et is_prime sont
identiques.
On tape :
is_prime(100003)
On obtient :
1
On tape :
isprime(100003)
On obtient :
true
On tape :
is_prime(98569898989987)
On obtient :
1
On tape :
is_prime(14)
On obtient :
0
197
On tape :
isprime(14)
On obtient :
false
Pour obtenir un certificat de primalit pour n = 9856989898997789789, on tape :
is_prime(9856989898997789789,1)
ou :
pari("isprime",9856989898997789789,1)
On obtient les coefficients prouvant la primalit par le test "p-1" de SelfridgePocklington-Lehmer :
[[2,2,1],[19,2,1],[941,2,1],[1873,2,1],[94907,2,1]]
sinon, on tape :
pari("isprime",9856989898997789789,2)
Ou on tape :
is_prime(9856989898997789789,2)
On obtient :
1
6.7.18
198
6.7.19
6.7.20
6.7.21
6.7.22
ithprime(n) dsigne le n-ime nombre premier infrieur 10000 (pour linstant !).
On tape :
ithprime(75)
On obtient :
379
On tape :
ithprime(1229)
On obtient :
9973
On tape :
ithprime(1230)
On obtient :
ithprime(1230)
car cela dsigne un nombre premier > 10000.
6.7.23
199
6.7.24
6.7.25
d = c + k lcm(p, q)
vrifie
d=a
(mod p),
d = b (mod q)
Si p et q sont premiers entre eux, il existe toujours une solution d et toutes les
solutions sont alors congrues modulo p*q.
Exemples :
1. Trouver les solutions de :
x = 3 (mod 5)
x = 9 (mod 13)
On tape :
ichinrem([3,5],[9,13])
ou on tape :
ichrem([3,5],[9,13])
200
x = 3 (mod 5)
x = 4 (mod 7)
x = 1 (mod 9)
On tape tout dabord :
tmp:=ichinrem([3,5],[4,7])
ou on tape :
tmp:=ichrem([3,5],[4,7])
On obtient :
[-17,35]
puis on tape
ichinrem([1,9],tmp)
ou on tape :
ichrem([1,9],tmp)
On obtient :
[-17,315]
ce qui veut dire que x=-17 (mod 315)
On peut aussi taper directement :
ichinrem([3% 5,4% 7,1% 9])
On obtient :
-17% 315
6.7.26
Reste chinois pour des polynmes connus modulo plusieurs entiers : ichinrem, ichrem
ichrem (ou ichinrem) peut aussi tre utiliser pour trouver les coefficients
de polynmes qui sont connus modulo plusieurs entiers, par exemple trouver :
ax + b modulo 315 = 5 7 9 tel que :
a = 3 (mod 5)
b = 1 (mod 5)
a = 4 (mod 7) ,
b = 2 (mod 7)
a = 1 (mod 9)
b = 3 (mod 9)
On tape :
201
6.7.27
x = 3 (mod 5)
x = 4 (mod 6)
x = 1 (mod 9)
On tape :
chrem([3,4,1],[5,6,9])
On obtient :
[28,90]
ce qui veut dire que x=28 (mod 90)
Remarque
chrem peut aussi tre utiliser pour trouver les coefficients de polynmes qui sont
connus modulo plusieurs entiers, par exemple trouver ax + b modulo 315 = 5
7 9 tel que :
202
b = 1 (mod 5)
b = 2 (mod 7)
b = 3 (mod 9)
a = 3 (mod 5)
a = 4 (mod 7) ,
a = 1 (mod 9)
On tape :
chrem([3x+1,4x+2,x+3],[5,7,9])
On obtient :
[-17x+156),315]
ce qui veut dire que a=-17 (mod 315) et que b=156 (mod 315).
6.7.28
6.7.29
6.7.30
203
a
n
par :
0 si a = 0 mod n
1 si a 6= 0 mod n et si a = b2 mod n
1 si a =
6 0 mod n et si a 6= b2 mod n
Quelques proprits
Si n est premier :
a
n1
2
a
n
mod n
q1
p1
p
q
.
= (1) 2 .(1) 2 si p et q sont impairs et positifs
q
p
p2 1
2
= (1) 8
p
p1
1
= (1) 2
p
legendre_symbol
a deux paramtres a et n et renvoie le symbole de Le
a
gendre n .
On tape :
legendre_symbol(26,17)
On obtient :
1
On tape :
legendre_symbol(27,17)
On obtient :
-1
On tape :
legendre_symbol(34,17)
On obtient :
0
204
6.7.31
6.8
6.8.1
Analyse combinatoire
La factorielle : factorial !
6.8.2
205
6.8.3
206
6.8.4
6.9
6.9.1
Les rationnels
Transformer un nombre dcimal en rationnel : exact
float2rational
float2rational ou exact a comme paramtre un nombre dcimal d et renvoie un nombre rationnel q qui approche d moins de epsilon. On dfinit
epsilon dans la configuration du cas (menu Cfg) ou avec la commande cas_setup.
On tape :
float2rational(0.3670520231)
On obtient pour epsilon=1e-10 :
127/346
Essayez dentrer :
123/12+57/21
On obtient :
363/28
Puis :
evalf(363/28)
On obtient :
12.9642857143
On tape :
float2rational(12.9642857143)
On obtient :
207
363/28
6.9.2
A
aprs simplification
propfrac(A/B) ou propFrac(A/B) crit la fraction
B
a
en (avec gcd(a, b) = 1) sous la forme :
b
r
q + avec 0 r < b
b
Pour les fractions rationnelles on se reportera 6.30.8.
On tape :
propfrac(42/15)
On obtient :
2+4/5
On tape :
propfrac(43/12)
On obtient :
3+7/12
6.9.3
208
6.9.4
6.9.5
f2nd (ou fxnd) a comme argument une fraction et renvoie, la liste forme par
le numrateur et le dnominateur de cette fraction simplifie (pour les fractions
rationnelles on se reportera 6.30.5).
On tape :
f2nd(42/12)
On obtient :
[7,2]
6.9.6
209
simp2 a pour argument deux entiers ou une liste de deux entiers reprsentant une
fraction (pour deux polynmes voir alors 6.30.6).
simp2 renvoie une liste forme par le numrateur et le dnominateur de cette
fraction simplifie.
On tape :
simp2(18,15)
On obtient :
[6,5]
On tape :
simp2([42,12])
On obtient :
[7,2]
6.9.7
b1+
1
1
b0+...
dfc(sqrt(2),5)
On obtient :
[1,2,[2]]
210
On tape :
dfc(evalf(sqrt(2)),1e-9)
Ou :
dfc(sqrt(2),1e-9)
On obtient :
[1,2,2,2,2,2,2,2,2,2,2,2,2]
On tape :
convert(sqrt(2),confrac,dev)
On obtient si dans la configuration du cas epsilon=1e-9 :
[1,2,2,2,2,2,2,2,2,2,2,2,2]
et dev contient [1,2,2,2,2,2,2,2,2,2,2,2,2]
On tape :
dfc(9976/6961,5)
On obtient :
[1,2,3,4,5,43/7]
En effet on tape :
1+1/(2+1/(3+1/(4+1/(5+7/43))))
et on obtient :
9976/6961
On tape :
convert(9976/6961,confrac,l)
On obtient si dans la configuration du cas epsilon=1e-9 :
[1,2,3,4,5,6,7]
et l contient [1,2,3,4,5,6,7]
On tape :
dfc(pi,5)
On obtient :
[3,7,15,1,292,(-113*pi+355)/(33102*pi-103993)]
On tape :
dfc(evalf(pi),5)
On obtient (si on travaille avec 12 chiffres significatifs) :
[3,7,15,1,292,1.57581843574]
211
On tape :
dfc(evalf(pi),1e-9)
Ou :
dfc(pi,1e-9)
Ou (si epsilon=1e-9 dans la configuration du cas) :
convert(pi,confrac,ll)
On obtient :
[3,7,15,1,292]
6.9.8
212
On obtient :
9976/6961
En effet on tape :
1+1/(2+1/(3+1/(4+1/(5+1/(6+1/7)))))
et on obtient :
9976/6961
On tape :
dfc2f([1,2,3,4,5,43/7])
On obtient :
9976/6961
En effet on tape :
1+1/(2+1/(3+1/(4+1/(5+7/43))))
et on obtient :
9976/6961
6.9.9
Bk (x)dx = 0
0
On a alors :
B(n) = Bn (0)
On tape :
bernoulli(6)
On obtient :
1/42
6.9.10
213
La commande pari sans argument exporte les fonctions de pari qui nont pas
dhomonymes sous Xcas en leur nom habituel sous PARI/GP.
Toutes les commandes sont aussi exportes sous leur nom dorigine avec le prfixe
pari_.
La commande pari avec en premier argument un chaine de caractre - le nom
dune commande PARI - et dventuels autres arguments excute la commande
PARI avec les autres arguments.
Par exemple :
On tape :
pari() puis weber(1+i) ou directement
pari("weber",1+i), cela excute la commande weber de PARI avec
comme argument 1+i. La commande weber nexistant pas sous Xcas.
On tape :
pari("content",[25,15,50,75]) ou
pari_content([25,15,50,75]), cela excute la commande content
de PARI avec comme argument [25,15,50,75] et renvoie 5 qui est
le pgcdde la liste dentiers donne en argument alors que pari() puis
content([25,15,50,75]) excute la commande content de Xcas
et renvoie aussi 5 car content est une commande Xcas qui a comme argument un polynme donn sous sa forme symbolique ou par la liste de ses
coefficients et qui renvoie le mme rsultat que la commande content de
PARI car on a :
content([25,15,50,75])=content(25x^3+15x^2+50x+75)=5
On tape :
pari("gcd",[4,3,2,15],[20,30,50,75]) ou
pari_gcd([4,3,2,15],[20,30,50,75]), cela excute la commande
gcd de PARI darguments L1=[4,3,2,15] et L2=[20,30,50,75]
qui renvoie la matrice :
[[4,1,2,5],[2,3,2,15],[2,1,2,5],[1,3,1,15]] :cest la matrice M[j,k] gale au pgcd des entiers L1[j] et L2[k] alors que, :
pari() puis
gcd([4,3,2,15],[20,30,50,75]) renvoie [4,3,2,15] car gcd
est une commande Xcas qui avec comme argument 2 listes L1 et L2 renvoie la liste L3[j] des pgcd de L1[j] et L2[j] cest dire la diagonale
de la matrice prcdente car on a :
gcd([4,3,2,15],[20,30,50,75])=
diag(pari("gcd", [4,3,2,15],[20,30,50,75]))
La documentation de PARI/GP est disponible depuis le menu Aide->Manuels.
6.10
Les rels
6.10.1
Il faut distinguer le nombre rel de sa valeur numrique qui est un nombre flottant.
La prcision des nombres flottants, en nombre de chiffres est contrle par la va-
214
163
evalf(exp(pi*sqrt(163)))
On obtient :
0.262537412640768743999999999985e18
6.10.2
215
+,-,*,/, sont les oprateurs habituels pour faire des additions, des soustractions, des multiplications, des divisions et des lvations une puissance entire
ou fractionnaire.
On tape :
3+2
On obtient :
5
On tape :
3-2
On obtient :
1
On tape :
3*2
On obtient :
6
On tape :
3/2
On obtient :
3/2
On tape :
3.2/2.1
On obtient :
1.52380952381
On tape :
3^2
On obtient :
9
On tape :
3.2^2.1
On obtient :
216
Remarque
Si vous avez une touche carre ou une touche cube sur votre clavier vous pouvez
lutiliser, par exemple : 32 vaut 9.
Remarque sur les puissances fractionnaires
Par dfinition af racpq = exp(f racpq ln(a)) et donc af racpq nest dfini que
pour a > 0.
Il y a donc une diffrence entre :
n
a et af rac1n lorsque n est impair.
6.10.3
6.10.4
217
2.^(1/3)
On obtient :
1.259921049892
On tape :
root(3,sqrt(2))
ou on tape :
sqrt(2)^(1/3)
On obtient :
2^(1/6)
6.10.5
Ei() = 0
x2
x3
+
+ ...
2.2! 3.3!
x2
2.2!
x3
3.3!
+ ...
218
On tape :
Ei(1.)-Ei(-1.)
On obtient :
2.11450175075
On tape :
int((exp(x)-1)/x,x=-1..1.)
On obtient :
2.11450175075
On tape :
evalf(Ei(-1)-sum((-1)^n/n/n!,n=1..100))
On obtient la constante dEuler :
0.577215664901532860606507
6.10.6
Ci(x) =
t=+
cos(t)
dt = ln(x) + +
t
Z
0
cos(t) 1
dt
t
219
6.10.7
220
On obtient :
0.946083070367
On tape :
Si(-1.)
On obtient :
-0.946083070367
On tape :
Si(1.)+Si(-1.)
On obtient :
0
On tape :
Si(1.)-Si(-1.)
On obtient :
1.89216614073
On tape :
int(sin(x)/x,x=-1..1.)
On obtient :
1.89216614073
6.10.8
6.10.9
221
Dirac(x)dx = 1
b
Dirac(x)f (x)dx =
[Heaviside(x)f (x)]ab
On tape :
int(Dirac(x)*sin(x),x,-1,2)
On obtient :
sin(0)
On tape :
int(Dirac(x-1)*sin(x),x,-1,2)
On obtient :
sin(1)
6.10.10
e
0
On tape :
t2
dt =
222
On obtient :
0.84270079295
On tape :
erf(1/(sqrt(2)))*1/2+0.5
On obtient :
0.841344746069
Remarque
Il y a une relation entre les fonctions erf et normal_cdf :
normal_cdf(x) = 12 + 12 erf( x2 )
En effet :
Rx
2
normal_cdf(x) = 12 + 12 0 et /2 dt
6.10.11
et dt = 1 erf (x)
On a :
erf c(0) = 1
erf c() = 1
En effet on sait que :
Z
t2
dt =
On tape :
erfc(1)
On obtient :
0.15729920705
On tape :
1- erfc(1/(sqrt(2)))*1/2
223
On obtient :
0.841344746069
Remarque
Il y a une relation entre les fonctions erfc et normal_cdf :
normal_cdf(x) = 1 12 erfc( x2 )
En effet :
Rx
2
normal_cdf(x) = 21 + 12 0 et /2 dt
6.10.12
La fonction : Gamma
Z
(a) =
et on utilise la formule :
(a + 1) = a (a) si a nest pas un entier negatif
Donc :
(1) = 1
(a + 1) = a (a)
et ainsi :
(n + 1) = n!
On tape :
Gamma(5)
On obtient :
24
On tape :
Gamma(1/2)
On obtient :
sqrt(pi)
On tape :
Gamma(0.7)
224
On obtient :
1.29805533265
On tape :
Gamma(-0.3)
On obtient :
-4.32685110883
En effet : Gamma(0.7)=-0.3*Gamma(-0.3)
On tape :
Gamma(-1.3)
On obtient :
3.32834700679
En effet :
Gamma(0.7)=-0.3*Gamma(-0.3)=(-0.3)*(-1.3)*Gamma(-1.3)
6.10.13
225
igamma(4.0,20.0)
On obtient :
5.99998077768
On tape :
igamma(4.0,20.0,1)
On obtient :
0.99999679628
car Gamma(4)=6 et 5.99998077768/6=0.99999679628
6.10.14
La fonction : Beta
(x) (y)
(x + y)
On a :
(1, 1) = 1
(n, 1) =
et :
(n, 2) =
1
n
1
n(n + 1)
On a :
R1
Beta(a,b)= 0 t( a 1) (1 t)( b 1)dt
R1
Beta(a,b) est dfini pour a et b rels positifs (pour que lintgrale 0 t( a
1) (1 t)( b 1)dt soit convergente).
On tape :
Beta(5,2)
On obtient :
1/30
On tape :
simplify(Beta(5,-3/2))
On obtient :
256/15
On tape :
Beta(x,y)
On obtient :
Gamma(x)*Gamma(y)/Gamma(x+y)
226
6.10.15
6.10.16
227
La fonction : Zeta
6.10.17
X
(k + 31 )
x3k
k
f (x) =
3
(3k)!
( 31 )
k=0
!
X
(k + 23 )
x3k+1
k
g(x) =
3
(3k + 1)!
( 23 )
k=0
On tape :
Airy_Ai(1)
On obtient :
0.135292416313
On tape :
Airy_Bi(1)
228
On obtient :
1.20742359495
On tape :
Airy_Ai(0)
On obtient :
0.355028053888
On tape :
Airy_Bi(0)
On obtient :
0.614926627446
6.11
Les permutations
6.11.1
6.11.2
6.11.3
229
6.11.4
6.11.5
230
On tape :
cycles2permu([[2,4]])
On obtient :
[0,1,4,3,2]
On tape :
cycles2permu([[5],[2,4]])
On obtient :
[0,1,4,3,2,5]
6.11.6
6.11.7
6.11.8
231
6.11.9
is_cycle est une fonction boolenne qui renvoie 1 ou 0 selon que largument
est ou nest pas un cycle.
On tape :
is_cycle([2,1,3])
On obtient :
1
On tape :
is_cycle([2,1,3,2])
On obtient :
0
6.11.10
232
6.11.11
6.11.12
6.11.13
6.11.14
233
6.11.15
6.11.16
6.11.17
234
On tape :
permuorder([3,2,1,4,0])
On obtient
6
6.11.18
6.12
Les complexes
Vous trouverez dans le menu Math (Cmplx) les fonctions ayant comme paramtre une expression valeur complexe.
Remarque
Les nombres complexes sont utiliss pour reprsenter un point sur lcran graphique : par exemple, le graphe de y = f (x) est lensemble des points x + i
f (x) pour x variant entre WX- et WX+ (WX- et WX+ sont initialiss avec le menu
CfgIConfiguration graphique).
6.12.1
+,-,*,/, sont les oprateurs habituels pour faire des additions, des soustractions, des multiplications, des divisions et des lvations une puissance entire
ou fractionnaire.
On tape :
(1+2*i)^2
On obtient :
-3+4*i
6.12.2
6.12.3
235
6.12.4
6.12.5
6.12.6
236
6.12.7
6.12.8
6.12.9
6.12.10
237
6.13
6.13.1
238
Attention
Si C:=2*x-y alors
sommet(C) renvoie + et
feuille(C) renvoie 2*x,-y
car lexpression est C scrit 2*x+(-y)
De mme si D:=x/3 alors
sommet(D) renvoie * et
feuille(C) renvoie x,1/3
car lexpression est D scrit x*1/3
On a alors :
C[0],C[1],C[1,0],C[1,1],C[1,2],C[2],C[2,0],C[2,1]
renvoie : +,2*x,*,2,x,-y,-,y (- est le "moins" unaire).
Et :
D[0],D[1],D[2],D[2,0],D[2,1],B[1,1,2]
renvoie : *,x,1/3,inv,3
Remarque
Ce qui suit nest valable que pour des programmeurs confirms avec les manipulations qui suivent, les erreurs sont faciles !
On peut changer le sommet ou une feuille terminale en affectant lune des variables
A[0],A[1],A[2],A[2,0],A[2,1],A[2,2],A[2,3],A[2,3,0],A[2,3,1]
ou B[0],B[1,0],B[1,1],B[1,2],B[1,1,0],B[1,1,1],B[1,1,2]
MAIS il faut faire cela avec prudence car le systme ne fait pas de vrifications et
nenverra pas de message derreurs.
On tape :
A:=3+2*x/y
A[0]:=* Et A renvoie 6*x/y Maintenant :A[1] renvoie 6
On peut taper :
A[1]:=2+z Maintenant A renvoie (2+z)*x/y
On tape :
B:=sin(2*x+3)
B[0]:=cos Et B renvoie cos(2*x+3) Puis, on tape :
B[1,2]:=y et B renvoie cos(2*x+y)
6.13.2
239
La commande eval est surtout utile lorsquon veut valuer une sous-expression
dans lditeur dexpressions.
On tape :
a:=2
On obtient :
2
On tape :
eval(2+3*a)
ou
2+3*a
On obtient :
8
On tape :
purge(r);purge(p);a:=1+i*r
r:=p+1;p:=-4;
on peut alors avoir diffrentes valuation de a selon le niveau dvaluation demand :
on tape :
a
On obtient :
1-3*i
on tape :
eval(a,1)
On obtient :
1+(i)*r
on tape :
eval(a,2)
On obtient :
1+(i)*(p+1)
on tape :
eval(a,3)
On obtient :
1-3*i
Remarque
Pour les objets gomtriques, en plus de lvaluation exacte (au niveau 25 par dvaut), Xcas rajoute une valuation numrique (au niveau 1) au moment de laffichage pour pouvoir reprsenter les objets gomtriques dependant de paramtres
dfinis par assume ou par une affectation numrique.
Voici diffrents exemples :
On tape :
240
purge(r);
R:=point(1+i*r);
r:=-3;
Le niveau correspondant R:=point(1+i*r); affichera dans tous les
cas le point et sa lgende car lvaluation numrique pour laffichage de ce
niveau est faite au moment de laffichage donc aprs que r ait t dfini.
On tape :
purge(r);
purge(p);
R:=point(1+i*r);
r:=p+1;
p:=-4;
Le point R napparait pas car lvaluation numrique au moment de laffichage nest faite quau niveau 1. Ainsi r est remplac par p mais p nest pas
remplac donc la commande R:=point(1+i*r); naffiche rien.
On tape
purge(r);
R:=point(1+i*r):;
r:=-3;
eval(R,1);
La commande eval(R,1) renvoie point(1+(i)*r) et dessine le point
R et sa lgende. En effet la rponse est value formellement au niveau 1
ce qui donne la rponse point(1+i*r) puis pour la reprsentation graphique, point(1+i*r) est valu numriquement (sans toucher aux lgendes) ce qui permet dafficher le point. La lgende n apparait pas, lorsquon value un objet gomtrique, mais ici, lorsquon fait eval(R,1), R
est valu en un objet gomtrique, mais lobjet gomtrique lui-mme nest
pas valu. Donc eval(R,1) dessine le point R et sa lgende.
On tape
purge(r);
purge(p);
R:=point(1+i*r):;
r:=p+1;
p:=-4;
eval(R,1);
La commande eval(R,1) renvoie point(1+(i)*r), mais ne dessine
pas le point R. En effet la rponse est value formellement au niveau 1
ce qui donne la rponse point(1+i*r) puis pour la reprsentation graphique, point(1+i*r) est valu numriquement au niveau 1 ce qui ne
permet pas dafficher le point.
On tape :
purge(r);
R:=point(1+i*r):;
r:=-3;
eval(R,2);
La commande eval(R,2) renvoie point(1,-3) et le dessin du point R
sans sa lgende. En effet, quand on fait eval(R,2), alors R est valu en
un objet gomtrique, et cet lobjet gomtrique est lui-mme valu et donc
241
la lgende disparait.
On tape :
purge(r);
purge(p);
R:=point(1+i*r):;
r:=p+1;
p:=-4;
eval(R,2);
La commande eval(R,2) renvoie point(1,p+1) et le dessin du point
R sans sa lgende. En effet, quand on fait eval(R,2), alors R est valu
en un objet gomtrique, et cet lobjet gomtrique est lui-mme valu et
donc la lgende disparait.
6.13.3
On peut alors avoir diffrentes valuation dune variable selon le niveau n dvaluation demand : ce nombre n est le nombre de la case eval de la configuration
du CAS qui reprsente le nombre maximum dvaluations rcursives en mode interactif (cf 1.6.1). On peut changer ce nombre avec eval_level qui a comme
argument lentier n > 0.
eval_level() renvoie la valeur de eval de la configuration du CAS.
eval_level(0) met la valeur de eval de la configuration du CAS 0 et du
coup plus rien ne sera valu. On peut revenir en situation normale en changeant
la valeur de eval de la configuration du CAS.
On tape :
purge(a,b,c);a:=b+1; b:=c+1;c:=3;
On tape :
eval_level(1)
puis
a,b,c
On obtient :
b+1,c+1,3
et eval de la configuration du CAS vaut 1.
On tape :
purge(a,b,c);a:=b+1; b:=c+1;c:=3;
On tape :
eval_level(2)
puis
a,b,c
On obtient :
242
6.13.4
243
evala sert en mode Maple valuer une expression contenant des extentions algbriques, par contre Xcas value toujours les expressions, sans avoir besoin de
la commande evala.
6.13.5
Si on ne veut pas quune expression soit value dans un calcul, il faut la quoter, soit avec , soit laide de la fonction quote (ou hold).
Remarque Lorsquon tape par exemple a:=quote(a) (ou a:=hold(a)) cela
a pour effet de purger la variable a et cette instruction renvoie la valeur de cette
variable (ou les hypothses faites sur cette variable).
Donc a:=quote(a) est synonyme de purge(a) (cest pour avoir la compatibilit Maple).
On tape :
a:=2;quote(2+3*a)
ou
a:=2;2+3*a
On obtient :
(2,2+3.a)
6.13.6
Si on veut quune expression quote soit value dans un calcul, il faut utiliser
la fonction unquote.
Par exemple dans une affectation, la variable est quote cest dire non value.
On peut forcer son valuation pour cela on tape :
purge(b);a:=b;unquote(a):=3
On obtient :
a et b contiennent 3
6.13.7
244
On obtient :
x^2-x-2
Remarque On peut aussi utiliser convert avec loption + ou sa version infixe=> avec loption + : On tape :
(x+1)*(x-2)=>+
Ou on tape :
convert((x+1)*(x-2),+)
On obtient :
x^2-x-2
6.13.8
6.13.9
245
(2+sqrt(2))*(2-sqrt(3))/((2+sqrt(3))*(2-sqrt(3)))
On tape :
mult_conjugate((2+sqrt(2))/(sqrt(2)+sqrt(3)))
On obtient :
(2+sqrt(2))*(-sqrt(2)+sqrt(3))/
((sqrt(2)+sqrt(3))*(-sqrt(2)+sqrt(3)))
On tape :
mult_conjugate((2+sqrt(2))/2)
On obtient :
(2+sqrt(2))*(2-sqrt(2))/(2*(2-sqrt(2)))
6.13.10
246
6.13.11
x4 1
247
factor(x^4+1)
Ou on tape :
x^4+1=>*
On obtient :
x^4+1
car
x4
x4 + 1
Si lon veut une factorisation relle, afin de connaitre le rel qui sert dans la
factorisation, on coche Complex dans lcran de configuration du CAS et
on tape tout dabord :
solve(x^4+1,x)
On obtient :
[sqrt(2)/2+(i)*sqrt(2)/2,sqrt(2)/2+(i)*(-(sqrt(2)/2)),
-sqrt(2)/2+(i)*sqrt(2)/2,-sqrt(2)/2+(i)*(-(sqrt(2)/2))]
248
6.13.12
cFactor ou cfactor ou factoriser_sur_C a comme paramtre une expression que lon veut factoriser sur le corps des complexes sans avoir besoin dtre
en mode complexe. Lorsquil y a plus de 2 variables la factorisation se fait sur les
entiers de Gauss.
Exemples
1. Factoriser dans C :
x4 1
On tape :
cFactor(x^4-1)
On obtient :
-((x+-i)*((-i)*x+1)*((-i)*x+i)*(x+1))
2. Factoriser dans C :
x4 + 1
On tape :
cFactor(x^4+1)
On obtient :
(x^2+i)*(x^2+-i)
Puis, on tape :
cFactor(sqrt(2)*(x^2+i))*cFactor(sqrt(2)*(x^2+-i))
On obtient :
sqrt(2)*1/2*(sqrt(2)*x+1-i)*(sqrt(2)*x-1+i)*sqrt(2)*
1/2*(sqrt(2)*x+1+i)*(sqrt(2)*x-1-i)
Mais si on tape, :
cFactor(sqrt(2)*(x^4+1))
On obtient :
sqrt(2)*(x^2+sqrt(2)*x+1)*(x^2+(-(sqrt(2)))*x+1)
6.13.13
249
6.13.14
250
On obtient :
[-2*i,2*i]
On tape :
cZeros(ln(x)^2-2)
On obtient :
[exp(sqrt(2)),exp(-(sqrt(2)))]
On tape :
cZeros(ln(y)^2-2,y)
On obtient :
[exp(sqrt(2)),exp(-(sqrt(2)))]
On tape :
cZeros(x*(exp(x))^2-2*x-2*(exp(x))^2+4)
On obtient :
[[log(sqrt(2)),log(-sqrt(2)),2]]
6.13.15
6.13.16
251
normal((x-1)*(x+1))
On obtient :
x^2-1
Attention normal est moins efficace que simplify et on est quelquefois oblig
de faire plusieurs fois la commande normal.
On tape :
normal(3-54*sqrt(1/162))
On obtient :
(-9*sqrt(2)+9)/3
On tape :
normal((-9*sqrt(2)+9)/3)
On obtient :
-(3*sqrt(2))+3
6.13.17
252
6.13.18
6.13.19
253
6.13.20
| est une fonction infixe qui substitue des valeurs des variables : | a deux arguments : une expression dependant dun paramtre et une galit (paramtre=valeur
de substitution,paramtre=valeur de substitution,... ) . On tape :
a^2+1|a=2
On obtient mme si la variable a est affecte :
5
On tape :
a^2+b|a=2,b=3
On obtient mme si les variables a et b sont affectes :
7
6.13.21
254
6.13.22
255
256
6.13.23
6.13.24
eliminate permet dliminer une ou plusieurs variables dans une liste dquations algbriques, quations algbriques qui sont verifies par plusieurs variables.
eliminate a 2 arguments :
une liste dquations L1 et
la variable ou la liste des variables liminer.
eliminate renvoie la liste L2 des quations qui sont vrifies par les variables
non limines et pour lesquelles =0 est sous entendu.
On tape :
eliminate([x=v0*t,y=y0-g*t^2],t)
On obtient si la variable t nest pas affecte et si les autres variables ne sont pas affectes (si les autres variables sont affectes, elles sont remplaces par leur valeurs
ce qui modifie le rsultat) :
[x^2*g-v0^2*y0+v0^2*y]
On tape :
257
eliminate([x=2*t,y=1-10*t^2,z=x+y-t],t)
On obtient si la variable t nest pas affecte et si les variables x,y,z ne sont pas
affectes :
[x+2*y-2*z,-10*y^2+20*y*z-y-10*z^2+1]
On tape :
eliminate([x+y+z+t-2,x*y*t=1,x^2+t^2=z^2],[x,z])
On obtient si les variables x et z ne sont pas affectes et si les autres variables ne
sont pas affectes (si les autres variables sont affectes, elles sont remplaces par
leur valeurs ce qui modifie le rsultat) :
[y^3*t+2*y^2*t^2-4*y^2*t-4*y*t^2+4*y*t+2*y+2*t-4]
Attention
Si la rponse est [1] ou [-1], cela veut dire que la ou les variables ne peuvent
pas tre linmines.
Si la rponse est [], cela veut dire que certaines quations dterminent les valeurs
des variables liminer et que ces valeurs vrifient toutes les quations.
On tape :
x:=2;y:=-5
eliminate([x=2*t,y=1-10*t^2],t)
On obtient si la variable t nest pas affecte :
[1]
On ne peut donc pas liminer t des deux quations :
2 = 2t, 5 = 1 10t2 .
On tape :
x:=2;y:=-9
eliminate([x=2*t,y=1-10*t^2],t)
On obtient si la variable t nest pas affecte :
[]
En effet la premire quation :
2 = 2t donne t = 1 et t = 1 vrifie la deuxime quation 9 = 1 10t2 .
On tape :
x:=2;y:=-9
eliminate([x=2*t,y=1-10*t^2,z=x+y-t],t)
On obtient si la variable t nest pas affecte :
[z+8]
En effet la premire quation :
2 = 2t donne t = 1, t = 1 vrifie la deuxime quation 9 = 1 10t2 et il reste
la troisime quation z = 2 9 1 = 8 soit z + 8 = 0.
258
6.13.25
6.13.26
6.14
Valeurs de un
6.14.1
tablefunc ou table_fonction est une commande qui sutilise lintrieur dun tableur (que lon ouvre avec Alt+t) et qui .
remplit deux colonnes donnant la table des valeurs dune fonction.
tablefunc(ex,n,n0,1), o ex est une expression dpendant de n, remplira
le tableur avec les valeurs de la suite un = ex pour n = n0, n0 + 1, n0 + 2, .....
Exemple : Affichage des valeurs de un = sin(n) On ouvre un tableur avec
Alt+t.
Puis, on slectionne une case du tableur (par exemple C0) et on tape dans la ligne
de commande du tableur :
6.14. VALEURS DE UN
259
tablefunc(sin(n),n,0,1)
On obtient :
deux colonnes : n et sin(n)
dans la colonne n il y a la valeur du pas (qui doit tre gal 1) et la valeur
de n0 (ici 0), puis une formule C2+C$1 qui a t recopie vers le bas.
dans la colonne sin(n) il y a "Tablefunc", puis une formule qui a t
aussi recopie vers le bas.
Les valeurs de la suite un = sin(n) saffichent alors en face des n correspondants partir de n=n0 (ici 0).
6.14.2
260
(-4*n-3*(-(sqrt(2)-1))^n*sqrt(2)+2*(-(sqrt(2)-1))^n+3*(sqrt(2)+1)^
On vrifie pour n:=4 on obtient bien 24
Ou on tape car on a un+1 = 2un + vn + n et vn+1 = un (donc vn = un1 )
avec u0 = 0 et u1 = 2u0 + v0 + 0 = 1 donc v0 = 1 :
seqsolve([2x+y+n,x],[x,y,n],[0,1])
On obtient :
[(-1)/2-(-2-3*sqrt(2))/8*(sqrt(2)+1)^n(-2+3*sqrt(2))/8*(-sqrt(2)+1)^n-1/2*n,
-(-4+sqrt(2))/8*(sqrt(2)+1)^n(-4-sqrt(2))/8*(-sqrt(2)+1)^n-1/2*n]
On vrifie pour n:=4 on obtient bien 24
Valeurs de la suite u0 = 0, v0 = 1, un+1 = un + 2vn , vn+1 = un + n + 1
pour n > 0.
On tape :
seqsolve([x+2*y,n+1+x],[x,y,n],[0,1])
On obtient :
[(-2*n-(-1)^n+2^n*4-3)/2,((-1)^n+2*2^n-1)/2]
Valeurs de la suite u0 = 0, v0 = 1, un+1 = un + 2vn + n + 1, vn+1 = un
pour n > 0.
On tape :
seqsolve([x+2*y+n+1,x],[x,y,n],[0,1])
On obtient :
[(-2*n-(-1)^n*3+2^n*8-5)/4,(-2*n+(-1)^n*3+2^n*4-3)/4]
Valeurs de la suite u0 = 0, v0 = 1, un+1 = un + vn , vn+1 = un vn pour
n > 0.
On tape :
seqsolve([x+y,x-y],[x,y,n],[0,1])
On obtient :
[(-4*n-3*(-(sqrt(2)-1))^n*sqrt(2)+
2*(-(sqrt(2)-1))^n+ 3*(sqrt(2)+1)^n*sqrt(2)+
2*(sqrt(2)+1)^n-4)/8,
(-4*n+(-(sqrt(2)-1))^n*sqrt(2)+
4*(-(sqrt(2)-1))^n-(sqrt(2)+ 1)^n*sqrt(2)+
4*(sqrt(2)+1)^n)/8]
Valeurs de la suite u0 = 2, v0 = 0, un+1 = 4 vn + n + 1, vn+1 = un , pour
n > 0.
On tape :
seqsolve([4y+n+1,x],[x,y,n],[2,0])
On obtient :
[(-8)/9+2*2^n-(-8)/9*(-1)^n*2^n-1/3*n,
(-5)/9+2^n-4/9*(-1)^n*2^n-1/3*n]
6.14. VALEURS DE UN
6.14.3
261
262
6.14.4
263
6.15
6.15.1
6.15.2
264
6.15.3
6.16
6.16.1
6.16.2
266
6.16.3
Un oprateur est une fonction infixe : par exemple + est un oprateur et sin
est une fonction.
On peut reprsenter une expression par un arbre. Le sommet de larbre est soit un
oprateur, soit une fonction et les feuilles de larbre sont les arguments de loprateur ou de la fonction (voir aussi 6.40.13).
La fonction sommet (resp feuille (ou op)) renvoie le sommet (resp la liste des
feuilles) dune expression.
On tape :
sommet(sin(x+2))
On obtient :
sin
On tape :
sommet(x+2*y)
On obtient :
+
On tape :
feuille(sin(x+2))
Ou on tape :
op(sin(x+2))
On obtient :
x+2
On tape :
feuille(x+2*y)
Ou on tape :
op(x+2*y)
On obtient :
(x,2*y)
Remarque
Lorsque lutilisateur dfinit une fonction par un programme par exemple la fonction pgcd.
On tape :
pgcd(a,b):={local r; while (b!=0)
{r:=irem(a,b);a:=b;b:=r;} return a;}
268
Puis on tape :
sommet(pgcd)
On obtient :
program
Puis on tape :
feuille(pgcd)[0]
On obtient :
(a,b)
Puis on tape :
feuille(pgcd)[1]
On obtient :
(0,0) ou (15,25) si lon vient dexcuter pgcd(15,25)
Puis on tape :
feuille(pgcd)[2]
On obtient :
Le corps du programme : {local r;....return(a);}
6.17
Les fonctions
6.17.1
+ et + (resp -) est une fonction infixe et + (resp -) est une fonction prfixe.
Elle renvoie un rsultat qui dpend de la nature de ses arguments.
Voici des exemples avec + (seul le dernier exemple nest pas utilisable avec -) :
On tape (1,2)+(3,4) ou (1,2,3)+4=1+2+3+4 ou+(1,2,3,4), on obtient 10,
On tape 1+i+2+3*i ou +(1,i,2,3*i), on obtient 3+4*i,
On tape [1,2,3]+[4,1] ou [1,2,3]+[4,1,0] ou +([1,2,3],[4,1]), on obtient [5,3,3],
On tape [1,2]+[3,4] ou +([1,2],[3,4]), on obtient [4,6],
On tape [[1,2],[3,4]]+ [[1,2],[3,4]], on obtient [[2,4],[6,8]],
On tape [1,2,3]+4 ou +([1,2,3],4), on obtient poly1[1,2,7],
On tape [1,2,3]+(4,1) ou +([1,2,3],4,1), on obtient poly1[1,2,8],
On tape "bon"+"jour" ou +("bon","jour"), on obtient "bonjour".
269
*
* est une fonction infixe et * est une fonction prfixe. Elle renvoie un rsultat
qui dpend de la nature de ses arguments.
Voici des exemples avec * :
On tape (1,2)*(3,4) ou (1,2,3)*4 ou 1*2*3*4 ou *(1,2,3,4), on obtient 24,
On tape 1*i*2*3*i ou *(1,i,2,3*i), on obtient -6,
On tape [10,2,3]*[4,1] ou [10,2,3]*[4,1,0] ou +([10,2,3],[4,1]), on obtient
42 (produit scalaire),
On tape [1,2]*[3,4] ou *([1,2],[3,4]), on obtient 11 (produit scalaire),
On tape [[1,2],[3,4]]* [[1,2],[3,4]], on obtient [[7,10],[15,22]],
On tape [1,2,3]*4=*([1,2,3],4), on obtient [4,8,12],
On tape [1,2,3]*(4,2)ou *([1,2,3],4,2), on obtient [1,2,3]*8=[8,16,24],
On tape (1,2)+i*(2,3), on obtient 1+2+i*2*3=3+6*i.
/
/ est une fonction infixe et / est une fonction prfixe. Elle renvoie un rsultat
qui dpend de la nature de ses arguments.
Voici des exemples avec / :
On tape [10,2,3]/[4,1], on obtient invalid dim,
On tape [1,2]/[3,4] ou /([1,2],[3,4]), on obtient [1/3,1/2],
On tape 1/[[1,2],[3,4]], on obtient [[-2,1],[3/2,(-1)/2]],
On tape [[1,2],[3,4]]*1/ [[1,2],[3,4]], on obtient [[1,0],[0,1]],
On tape [[1,2],[3,4]]/ [[1,2],[3,4]], on obtient [[1,1],[1,1]] (division terme
terme),
On tape [1,2,3]*4 ou *([1,2,3],4), on obtient [4,8,12],
On tape [1,2,3]/(4,2) ou *([1,2,3],4,2)=[1,2,3]*8, on obtient [8,16,24].
6.17.2
270
6.17.3
271
272
273
k(2)(1)
On obtient :
(2*cos(1),2*sin(1))
Ou encore On dfinit la fonction h(x, y) = [x cos(y), x sin(y)], puis on veut
dfinir la famille de fonctions dpendant du paramtre t par k(t)(y) := h(t, y).
Comme ce qui se trouve aprs -> nest pas valu, on ne peut pas dfinir k(t) par
k(t) := y > h(x, y) et on est oblig dutiliser la commande unapply.
On tape pour dfinir la fonction h(x, y) :
h(x,y):={[x*cos(y),x*sin(y)]}
On tape pour dfinir la fonction k(t) :
k(t):=unapply(h(x,t),x)
On obtient :
(t)->unapply(h(x,t),x)
On tape
k(2)
On obtient :
(x)->{[x*cos(2),x*sin(2)];}
On tape
k(2)(1)
On obtient :
[2 cos(1),2 sin(1)]
6.17.4
Composition de fonctions : @
274
6.17.5
6.17.6
Si on a affect une valeur la variable a et si on dfinit ensuite, dans une autre ligne
dentre, la variable b, partir de a, on utilise c:=as_function_of(b,a)
pour dfinir une fonction c vrifiant : c(a)=b.
On tape :
a:=sin(x)
On obtient :
sin(x)
On tape :
b:=sqrt(1+a^2)
On obtient :
b:=sqrt(1+sin(x)^2)
On tape :
c:=as_function_of(b,a)
c(x)
On obtient :
sqrt(1+x^2)
On tape :
a:=2
b:=1+a^2
275
On obtient :
b:=5
On tape :
c:=as_function_of(b,a)
On obtient :
(a)->
{ local NULL;
return(sqrt(1+a^2));
}
On tape :
c(x)
On obtient :
1+x^2
Attention
Si la variable b a t affecte plusieurs fois cest la premire affectation de b aprs
la dernire affectation de a qui compte.
On tape par exemple :
a:=2 puis
b:=2*a+1 puis
b:=3*a+2 puis
c:=as_function_of(b,a)
On obtient :
(a)-> {local NULL; return(2*a+1);}
cest dire que c(x) vaut 2*x+1.
Mais si on tape par exemple :
a:=2 puis
b:=2*a+1 puis
a:=2 puis
b:=3*a+2 puis
c:=as_function_of(b,a)
On obtient :
(a)-> {local NULL; return(3*a+2);}
cest dire que c(x) vaut 3*x+2.
Il est donc prfrable de valider la ligne ou se trouve a avant de dfinir le b qui
convient.
276
6.18
Drivation
6.18.1
Gnralits
6.18.2
6.18. DRIVATION
277
taux_accroissement(y^2,y,1,1+h)
On obtient :
((1+h)^2-1)/(1+h-1)
Aprs simplification, on obtient :
h+2
On tape :
limit(taux_accroissement(x^2,1,1+h),h,0)
On obtient :
2
6.18.3
278
6.18.4
Gnralits
diff ou derive ou deriver sont des fonctions prfixes alors que est la
version postfixe de diff ou derive ou deriver.
Ces fonctions ont un, deux ou plus de 2 arguments :
avec un argument qui peut tre soit une fonction, soit une expression de la
variable x.
Si cet argument est une fonction, diff ou derive ou deriver ou
renvoie la fonction drive de cette fonction.
Ces fonctions sont alors equivalentes function_diff.
Si cet argument est une expression de la variable x, diff ou derive ou
deriver ou renvoie la drive de lexpression par rapport x
Remarque Dans ce cas on peut aussi utiliser convert (ou sa version
infixe =>) avec loption diff.
avec 2 arguments qui peuvent tre soit une expression et le nom dune variable, soit une expression et une liste de noms de variables.
Cela va permettre de calculer des drives et des derives partielles du premier ordre et plusieurs arguments pour calculer des derives partielles de
tous les ordres dune expression.
avec plus que 2 arguments qui peuvent tre :
une expression et le nom des variables par rapport auxquelles il faut driver
cette expression (le nom des variables est ventuellement suivi de $n pour
indiquer le nombre n de fois que lon veut driver) ,
Derive et fonction derive
diff ou derive ou deriver ou ont comme argument soit une fonction,
soit une expression de la variable x.
Si cet argument est une fonction, diff ou derive ou deriver ou renvoie une fonction qui est la fonction drive de la fonction argument.
diff (ou derive ou deriver ou ) est alors equivalente function_diff.
On tape :
f(x):=x^2+x*cos(x)+
Pour dfinir g comme f 0 , on tape :
g:=f
Ou :
g:=(f=>diff)
Ou :
g:=diff(f)
Ou :
g:=function_diff(f)
Ou :
g:=unapply(diff(f(x),x),x)
6.18. DRIVATION
279
Ou :
g(x):=f(x)
Ou :
g(x):=(f(x)=>diff)
Ou :
g(x):=diff(f)(x))
Puis, on tape :
g(x)
On obtient :
cos(x)+x*(-(sin(x)))+2*x
Pour dfinir h comme f 00 , on tape :
h:=f
Ou :
h:=diff(diff(f))
Ou :
h:=function_diff(function_diff(f))
Ou :
h:=diff(unapply(diff(f(x),x),x))
Ou :
h(x):=diff(diff(f))(x))
Ou :
h(x):=f(x)
Puis, on tape :
h(x)
On obtient :
-sin(x)+x*(-cos(x))-sin(x)+2
Si cet argument est une expression de la variable x, diff ou derive ou
deriver ou renvoie une expression qui est lexpression de la drive de
largument par rapport x. On tape :
f(x):=x^+x*cos(x)+
Pour calculer la drive de f (x), on tape :
A:=f(x)
Ou :
A:=diff(f(x))
On obtient :
cos(x)+x*(-(sin(x)))+2*x
Ou encore :
A:=diff(f(a),a)
On obtient :
cos(a)+a*(-(sin(a)))+2*a
MAIS ATTENTION
cela ne dfinit pas une fonction car le rsultat est une expression.
g(x):=diff(f(x)) ou g(x):=diff(f(x),x) nest pas correct, car
lors dune affectation ce qui est droite de := nest pas valu lors de la dfinition....il faut utiliser unapply (g(x):=unapply(diff(f(x),x),x))
280
6.18. DRIVATION
281
diff (ou derive) a n + 1 arguments : une expression et le nom de la variable qui sera rpt n fois. Pour avoir une criture plus facile on crira plutt
le nom de la variable suivi de $n pour indiquer que lon veut driver n fois (en
effet x$3=(x,x,x)). Par exemple pour driver exp(x*y) 1 fois par rapport
x et 2 fois par rapport y, on met comme arguments lexpression, puis, les
noms des variables ventuellement suivi de $ pour indiquer le nombre de fois
que lon veut driver et on tape diff(exp(x*y),x,y$2) qui est quivalent
diff(exp(x*y),x,y,y) (en effet y$2=(y,y)).
Exemples
Soit calculer :
2 (x.y 2 .z 3 + x.y.z)
xz
On tape :
(x*y ^2*z^3+x*y*z,x,z)
Ou on tape :
diff(x*y ^2*z^3+x*y*z,x,z)
On obtient :
y^2*3*z^2+y
Soit calculer :
3 (x.y 2 .z 3 + x.y.z)
x 2 z
On tape :
(x*y ^2*z^3+x*y*z,x,z,z)
Ou on tape :
(x*y ^2*z^3+x*y*z,x,z$2)
Ou on tape :
diff(x*y ^2*z^3+x*y*z,x,z,z)
Ou on tape :
diff(x*y ^2*z^3+x*y*z,x,z$2)
On obtient :
6*y^2*z
Soit calculer la drive troisime de :
x2
1
+2
On tape :
(1/(x^2+2),x,x,x)
Ou on tape :
(1/(x^2+2),x$3)
Ou on tape :
diff((1)/(x^2+2),x,x,x)
Ou on tape :
diff((1)/(x^2+2),x$3)
On obtient :
(-24*x^3+48*x)/(x^8+8*x^6+24*x^4+32*x^2+16)
Remarque
Bien voir la diffrence entre diff(Xpr,x,y) et diff(Xpr,[x,y]) o Xpr
est une expression :
282
2 (Xpr)
et
xy
(Xpr) (Xpr)
diff(Xpr, [x, y]) renvoie [
,
]
x
y
diff(Xpr, x, y) renvoie
6.19
Intgration
6.19.1
integrate (ou int) permettent de calculer une primitive ou une intgrale dfinie. La seule diffrence
entre ces deux commandes est que integrate crit
R
avec le symbole la rponse de la commande quest() qui suit lvaluation de
integrate.
Par contre Int renvoie integrate sans lvaluer : cest pour avoir la compatibilit avec Maple, lorsque lon fait un calcul numrique dintgrales :
On tape :
Int(exp(x),x,0,1))
On obtient :
integrate(exp(x),x,0,1)
On tape :
int(exp(x),x,0,1))
On obtient :
exp(1)-1)
On tape :
evalf(Int(exp(x^2),x,0,1))
Ou on tape :
evalf(int(exp(x^2),x,0,1))
On obtient :
1.46265174591
integrate (ou int ou Int) a un, deux ou quatre arguments.
avec un argument qui est une expression de la variable x, (resp une fonction).
integrate (ou int) renvoie alors une expression qui est une primitive de
lexpression par rapport la variable x (resp renvoie une fonction primitive
de la fonction donne en argument) On tape :
integrate(x^2)
On obtient :
x^3/3
On tape :
6.19. INTGRATION
283
f(t):=t^2
g:=integrate(f)
On obtient :
(t)->t^3/3
Remarque Dans ce cas on peut aussi utiliser convert (ou sa version infixe =>) avec loption int.
On tape :
f(x):=x^2
g(x):=(f(x)=>int)
ou
g:=(f=>int))
avec deux arguments qui sont :
une expression et une variable,
integrate (ou int) renvoie alors une primitive de lexpression par rapport la variable donne comme deuxime paramtre.
On tape :
integrate(x^2)
On obtient :
x^3/3
On tape :
integrate(t^2,t)
On obtient :
t^3/3
avec quatre arguments qui sont :
une expression, une variable et les bornes de lintgrale dfinie,
integrate (ou int) renvoie alors la valeur de lintgrale dfinie.
On tape :
integrate(x^2,x,1,2)
On obtient :
7/3
On tape :
integrate(1/(sin(x)+2),x,0,2*pi)
On obtient aprs simplification (appel simplify) :
2*pi*sqrt(3)/3
Exercice 1
Soit
x
x+1
f (x) = 2
+ ln(
)
x 1
x1
Calculer une primitive de f.
On tape :
int(x/(x^2-1)+ln((x+1)/(x-1)))
On trouve :
x*log((x+1)/(x-1))+log(x^2-1)+1/2*log(2*x^2/2-1)
Ou bien on dfinit la fonction f en tapant :
f(x):=x/(x^2-1)+ln((x+1)/(x-1))
284
puis on tape :
int(f(x))
On obtient bien sr le mme rsultat.
Attention
Pour Xcas, log est gal ln (logarithme nprien) et log10 est le logarithme
en base 10.
Exercice 2
Calculer :
Z
2
dx
6
x + 2 x4 + x2
On tape :
int(2/(x^6+2*x^4+x^2))
On trouve :
2*((3*x^2+2)/(-(2*(x^3+x)))+-3/2*atan(x))
Exercice 3
Calculer :
1
dx
sin(x) + sin(2 x)
On tape :
integrate(1/(sin(x)+sin(2*x )))
On trouve :
(1/-3*log((tan(x/2))^2-3)+1/12*log((tan(x/2))^2))*2
6.19.2
risch calcule une primitive ou une intgrale dfinie par lalgorithme de Risch.
On tape :
risch(x^2)
On obtient :
x^3/3
On tape :
risch(x^2,x,0,1)
On obtient :
1/3
On tape :
risch(exp(-x^2))
On obtient :
R
exp(x^2) dx
ce qui signifie que exp(x2 ) na pas de primitive exprimable avec des fonctions
connues.
6.19. INTGRATION
6.19.3
285
286
6.19. INTGRATION
287
Autes Exemples
On tape :
sum(k,k,2,6)
On obtient :
20
On tape :
sum(k,k,7,2)
On obtient :
-18
On tape :
sum(k,k,3,2)
On obtient :
0
On tape :
sum(1,k,-2,n)
On obtient :
n+1+2
On tape :
normal(sum(2*k-1,k,1,n))
On obtient :
n^2
On tape :
sum(1/(n^2),n,1,10)
On obtient :
1968329/1270080
On tape :
sum(1/(n^2),n,1,+(infinity))
On obtient :
pi^2/6
On tape :
288
On obtient :
sin(1))
On tape :
sum(1/(3*n)!,n,0,+(infinity))
On obtient :
(2*cos((sqrt(3))/2)*exp(1/-2)+exp(1))/3
On tape :
sum(1/(n*2^n),n,1,+(infinity))
On obtient :
-(ln(1/2))
On tape :
sum((-1)^n/(2*n+1),n,0,+(infinity))
On obtient :
pi/4
On tape :
assume(x>0 && x<1);
sum(x^(2*n)/(2*n+1),n,0,+(infinity))
On obtient :
x,(-ln(-x+1)+ln(x+1))/(2*x)
On tape :
sum(1/(n^3-n),n,2,10)
On obtient :
27/110
On tape :
sum(1/(n^3-n),n,1,+(infinity))
On obtient :
1/4
Pour justifier ce rsultat on dcompose 1/(n^3 n), on tape :
partfrac(1/(n^3-n))
6.19. INTGRATION
289
On obtient :
1/(2*(n+1))-1/n+1/(2*(n-1))
Donc quand on fait la somme de 2 N on a :
N
N
1
N 2
X
X
1
1
1 X 1
1
=
=
n
n+1
2
n+1 N
n=2
n=1
N
X
n=2
n=2
1
1
= (
n1
2
N
2
X
n=0
N 2
1
1
1 X 1
) = (1 + +
)
n+1
2
2
n+1
n=2
N
N
2
X
1
1
1
1
1 X 1
= (
+
+
)
2
n+1
2
n+1 N
N +1
n=2
n=2
P 2
se
dtruisent
et il reste :
les termes N
n=2
1 1
1
1
1
1
1
1
1
+ (1 + )
+ ( +
)=
2 2
2
N
2
N
N +1
4 2N (N + 1)
dou les rsultat prcdents :
- pour N = 10 la somme vaut : 1/4 1/220 = 27/110
1
- pour N = + la somme vaut : 1/4 car
tend vers zro quand N
2N (N + 1)
tend vers linfini.
6.19.4
sum_riemann a deux arguments : une expression Xpr dpendant de deux variables et la liste des noms de ces deux variables.
sum_riemann(Xpr(n,k),[n,k])
Pn1 au voisinage de n =
Pn1 renvoie un quivalent,
Pn
+, de k=1 Xpr(n, k) ou de k=0 Xpr(n, k) ou de k=1 Xpr(n, k), lorsque
la somme considre est une somme de Riemann associe une fonction continue
sur [0,1] ou rpond quand la recherche a t infructueuse "ce nest probablement
pas une somme de Riemann" .
Exercice 1
n
X
k2
Soit Sn =
.
n3
k=1
Calculer lim Sn .
n+
On tape :
sum_riemann(k^2/n^3,[n,k])
On obtient :
1/3
car :
n
n
X
k2
1 X k2
=
n3
n
n2
k=1
k=1
x2 dx =
1
3
290
Exercice 2
n
X
k3
.
Soit Sn =
n4
k=1
Calculer lim Sn .
n+
On tape :
sum_riemann(k^3/n^4,[n,k])
On obtient :
1/4
car :
n
n
X
1 X k3
k3
=
n4
n
n3
k=1
k=1
x3 dx =
Exercice 3
Calculer lim (
n+
On tape :
1
4
1
1
1
+
+ ... +
).
n+1 n+2
n+n
sum_riemann(1/(n+k),[n,k])
On obtient :
log(2)
car :
n
X
k=1
1X
1
1
=
n+k
n
1 + (k/n)
k=1
32n3
.
16n4 k 4
k=1
Calculer lim Sn .
n+
On tape :
sum_riemann(32*n^3/(16*n^4-k^4),[n,k])
On obtient :
2*atan(1/2)+log(3)
6.19. INTGRATION
291
car :
n
X
k=1
1X
32
32n3
=
4
4
16n k
n
16 (k/n)4
k=1
32
dx =
16 x4
Z
0
1
4
1
2
x+2 x2x +4
qui vaut donc ln(3) ln(2) + ln(2) ln(1) + 2 atan (1/2) = ln(3) + 2 atan (1/2)
Exercice 5
n
n
n
Calculer lim ( 2
+ 2
+ ... + 2
).
2
2
n+ n + 1
n +2
n + n2
On tape :
sum_riemann(n/(n^2+k^2),[n,k])
On obtient :
pi/4
car :
n
n
X
1X
1
n
=
n2 + k 2
n
1 + (k/n)2
k=1
k=1
dx = atan (1) =
2
1+x
4
Exercice 6
1
1
1
Calculer lim (
+
+ ... +
).
2
2
2
2
2
n+
n +1
n +2
n + n2
On tape :
sum_riemann(1/sqrt(n^2+k^2),[n,k])
On obtient :
-ln(sqrt(2)-1)
car :
n
X
k=1
1X
1
1
p
=
2
2
n
n +k
1 + (k/n)2
k=1
p
p
1
dx = ln(1 + 1 + 12 ln(0 + 1 + 02 = ln(1 + 2
1 + x2
292
6.19.5
ibpdv
ibpdv permet de chercher une primitive (ou de calculer une intgrale dfinie)
dune expression de la forme u(x).v 0 (x).
ibpdv a deux paramtres pour les primitives et cinq paramtres pour les intgrales
dfinies :
soit une expression de la forme u(x).v 0 (x) et v(x) (ou une liste de deux
expressions [F (x), u(x) v 0 (x)] et v(x)),
soit une expression de la forme g(x) et 0 (ou une liste de deux expressions
[F (x), g(x)] et 0).
pour les intgrales dfinies, il faut rajouter trois autres paramtres : le nom
de la variable et les bornes.
Lorsque ibpdv a 2 arguments ibpdv renvoie :
si v(x) 6= 0, une liste forme de u(x).v(x) et de v(x).u0 (x) (ou une liste
forme de F (x) + u(x).v(x) et de v(x).u0 (x)),
si le deuxime argument est nul, une primitive de g(x) (le premier argument)
(ou F (x)+une primitive de g(x)) :
donc, ibpdv(g(x),0) renvoie une primitive G(x) de g(x) ou
ibpdv([F(x),g(x)],0) renvoie F(x)+G(x) o diff(G(x))=g(x).
Cest dire ibpdv renvoie les termes que lon doit calculer quand on fait une
intgration par parties, en faisant ventuellement plusieurs ibpdv la suite.
Ainsi, lorsque lon vient dutiliser la commande ibpdv(u(x)*v(x),v(x)),
il reste alors calculer lintgrale du deuxime terme puis faire la somme avec le
premier terme pour obtenir une primitive de u(x).v 0 (x) : pour cela on peut utiliser
nouveau la commande ibpdv avec comme premier paramtre la liste obtenue et
comme deuxime paramtre un nouveau v(x) (ou 0 pour terminer lintgration).
On tape :
ibpdv(ln(x),x)
On obtient :
[x.ln(x),-1]
puis
ibpdv([x.ln(x),-1],0)
On obtient :
-x+x.ln(x)
Lorsque ibpdv a 5 arguments ibpdv(u(x)*v(x),v(x),x,a,b) ou
ibpdv([F(x),u(x)*v(x),v(x),x,a,b) renvoie :
si v(x) 6= 0, une liste forme de u(b).v(b)u(a).v(a) et de v(x).u0 (x) (ou
une liste forme de F (b)+u(b).v(b)F (a)u(a).v(a) et de v(x).u0 (x)),
si le deuxime argument est nul, ibpdv(g(x),0,x,a,b) renvoie G(b)
G(a) o G(x) est une primitive du premier argument g(x) et
ibpdv([F(x),g(x)],0,x,a,b) renvoie F (x)+G(b)G(a) o G(x)
est une primitive de g(x)) de faon pouvoir faire plusieurs ibpdv la
suite.
6.19. INTGRATION
293
On tape :
ibpdv(ln(x),x,x,2,3)
On obtient :
[3*ln(3)-2*ln(2),-1]
puis
ibpdv([3*ln(3)-2*ln(2),-1],0,x,2,3)
On obtient :
-1+3*ln(3)-2*ln(2)
Remarque
Lorsque le premier paramtre de ibpdv est une liste de deux lments, ibpdv
nagit que sur le dernier lment de cette liste et ajoute le terme intgr au premier
lment de la liste (de faon pouvoir faire plusieurs ibpdv la suite).
On a par exemple :
ibpdv((log(x))^2,x) = [x*(log(x))^2,-(2*log(x))]
il reste intgrer -(2*log(x)), on utilise ibpdv(ans(),x) ou on tape :
ibpdv([x*(log(x))^2,-(2*log(x))],x)
On obtient :
[x*(log(x))^2+x*(-(2*log(x))),2]
et il reste intgrer 2, on utilise ibpdv(ans(),0) :
ibpdv([x*(log(x))^2+x*(-(2*log(x))),2],0).
On obtient : x*(log(x))^2+x*(-(2*log(x)))+2*x
ibpu
ibpu permet de chercher une primitive (ou de calculer une intgrale dfinie) dune
expression de la forme u(x).v 0 (x).
ibpu a deux paramtres pour les primitives et cinq paramtres pour les intgrales
dfinies :
soit une expression de la forme u(x).v 0 (x) et u(x) (ou une liste de deux
expressions [F (x), u(x) v 0 (x)] et u(x)),
soit une expression de la forme g(x) et 0 (ou une liste de deux expressions
[F (x), g(x)] et 0).
pour les intgrales dfinies, il faut rajouter trois autres paramtres : le nom
de la variable et les bornes.
Lorsque ibpu a 2 arguments ibpu renvoie : ibpu renvoie :
si u(x) 6= 0, une liste forme de u(x).v(x) et de v(x).u0 (x) (ou une liste
forme de F (x) + u(x).v(x) et de v(x).u0 (x)),
si le deuxime argument est nul, une primitive de g(x) (le premier argument)
(ou F (x)+une primitive de g(x)) :
ibpu(g(x),0) renvoie G(x) o diff(G(x))=g(x) ou
ibpu([F(x),g(x)],0) renvoie F(x)+G(x) o diff(G(x))=g(x).
294
cest dire ibpu renvoie les termes que lon doit calculer quand on fait une intgration par parties, en faisant ventuellement plusieurs ibpu la suite.
Ainsi, lorsque lon vient dutiliser la commande ibpu(u(x)*v(x),u(x)), il
reste calculer lintgrale du deuxime terme puis faire la somme avec le premier terme pour obtenir une primitive de u(x).v 0 (x). Pour cela, on peut utiliser
nouveau la commande ibpu avec comme premier paramtre la liste obtenue et
comme deuxime paramtre un nouveau u(x) (ou 0 pour terminer lintgration).
On tape :
ibpu(ln(x),ln(x))
On obtient :
[x.ln(x),-1]
puis
ibpu([x.ln(x),-1],0)
On obtient :
-x+x.ln(x)
6.19. INTGRATION
295
6.19.6
6.19.7
296
6.20
6.20.1
fMax et fMin ont comme argument : une expression dune variable et le nom de
cette variable (par dfaut x).
fMax renvoie labscisse de la solution principale du maximum de lexpression.
fMin renvoie labscisse de la solution principale du minimum de lexpression.
On tape :
fMax(sin(x),x)
Ou on tape :
fMax(sin(x))
Ou on tape :
fMax(sin(y),y)
On obtient :
pi/2
On tape :
297
fMin(sin(x),x)
Ou on tape :
fMin(sin(x))
Ou on tape :
fMin(sin(y),y)
On obtient :
-pi/2
On tape :
fMin(sin(x)^2,x)
On obtient :
0
6.20.2
On peut avoir, dans le tableur, les diffrentes valeurs dune expression f (x)
pour x = x0 , x0 + h, ...., grce la commande :
tablefunc(f(x), x, x0 , h) ou tablefunc(f(x), x).
Dans ce cas les valeurs de dpart x0 et le pas h, valent par dfaut : x0 = 5.0 et
h = 1.0.
On ouvre un tableur avec Alt+t.
Puis, on slectionne une case du tableur (par exemple C0) et pour avoir une table
de "sinus", on tape, dans la ligne de commande du tableur :
tablefunc(sin(x),x)
On obtient deux colonnes x et sin(x) :
- dans la colonne x il y a la valeur du pas h (1.0) et le dpart de lvaluation
numrique (-5.0), puis une formule, par exemple =C2+C$1 qui a t recopie vers
le bas.
- dans la colonne sin(x) il y a "Tablefunc" puis une formule, par exemple
=evalf(subst(D$0,C$0,C2)), qui a t aussi recopie vers le bas.
Les valeurs de sin(x) saffichent alors en face des x correspondants.
On peut bien sr changer le pas ou la valeur de dpart ou encore remplacer sin(x)
par cos(x) en changeant la valeur de la cellule correspondante.
La reprsentation graphique se fait avec la commande :
plotfunc pour cela voir 3.7.1.
298
6.21
Limites
6.21.1
limit permet de calculer condition dtre en radians la limite dune expression en un point fini (ou infini). En utilisant un paramtre supplementaire, on
peut indiquer si on cherche une limite par valeurs suprieures ou par valeurs infrieures (1 pour dire "par valeurs suprieures" et -1 pour dire "par valeurs infrieures").
limit a trois ou quatre arguments :
une expression, le nom de la variable (par exemple x), le point limite (par exemple
a) et un argument optionnel qui indique si la limite est unidirectionnelle ou bidirectionnelle (par dfaut 0). Cet argument est gal -1 pour une limite gauche
(x<a) ou est gal 1 pour une limite droite (x>a) ou 0 pour une limite.
Largument optionnel est donc utilis lorsque lon veut calculer une limite droite
(+1) ou une limite gauche (-1).
limit renvoie la limite demande (si elle existe !).
Remarque
On peut aussi mettre comme argument x=a la place de x,a donc : limit a aussi
comme arguments une expression dpendant dune variable, une galit (variable
=la valeur o lon veut calculer la limite) et ventuellement 1 ou -1 pour indiquer
la direction.
Autre remarque
si on tape limit((-1)^n,n=inf), alors Xcas rpond bounded_function(5)
ce qui veut dire que la fonction est borne mais quelle na pas de limite linfini.
On tape :
limit(1/x,x,0,-1)
ou
limit(1/x,x=0,-1)
On obtient :
-(infinity)
On tape :
limit(1/x,x,0,1)
ou
limit(1/x,x=0,1)
On obtient :
+(infinity)
On tape :
limit(1/x,x,0,0)
ou
6.21. LIMITES
299
limit(1/x,x,0)
ou
limit(1/x,x=0)
On obtient :
infinity
cela veut dire que abs(1/x) tend vers + quand x tend vers 0.
Exercices :
Trouver pour n > 2, la limite quand x tend vers 0 de :
n tan(x) tan(nx)
sin(nx) n sin(x)
On tape :
limit((n*tan(x)-tan(n*x))/(sin(n*x)-n*sin(x)),x=0)
On obtient :
2
Trouver la limite quand x tend vers + de :
r
q
x+ x+ x x
On tape :
limit(sqrt(x+sqrt(x+sqrt(x)))-sqrt(x),x=+infinity)
On obtient :
1/2
Trouver la limite quand x tend vers 0 de :
p
1 + x + x2 /2 exp(x/2)
(1 cos(x)) sin(x)
On tape :
limit((sqrt(1+x+x^2/2)-exp(x/2))/((1-cos(x))*sin(x)),x,0)
On obtient :
-1/6
Pour calculer quelquefois des limites plus aisment, il peut tre judicieux de
quoter le premier argument.
On tape par exemple :
limit((2*x-1)*exp(1/(x-1)),x=+infinity)
On remarquera que lon a quot ici le premier argument pour quil ne soit pas
valu cest dire pour quil ne soit pas simplifi.
On obtient :
+(infinity)
300
6.21.2
Limite et intgrale
1
dx
x2
On tape :
limit(integrate(1/(x^2),x,2,a),a,+(infinity))
On obtient (vrifier que a est formelle sinon faire purge(a)) :
1/2
Ra 1
1
1
En effet
R a 2 x2 dx = 2 a
Donc 2 x12 dx tend vers 12 quand a tend vers linfini.
Dterminer la limite quand a tend vers linfini de :
Z
(
2
x+1
x
+ ln(
)) dx
1
x1
x2
On tape :
limit(integrate(x/(x^2-1)+log((x+1)/(x-1)),x,2,a),
a,+(infinity))
On obtient (vrifier que a est formelle sinon faire purge(a)) :
+(infinity)
En
effet
:
Ra x
dx = 12 (ln(a2 1) ln(3)) et
R2a x2 1
x+1
a+1
2 ln( x1 ) dx = ln(a + 1) + ln(a 1) + a ln( a1 ) 3 ln(3) Donc quand
a tend vers + lintgrale tend vers +.
Dterminer la limite quand a tend vers 0 de :
Z
3a
cos(x)/x dx
a
limit(int(cos(x)/x,x,a,3a),a,0)
On obtient (vrifier que a est formelle sinon faire purge(a)) :
ln(3)
Pour trouver cette limite on encadre cos(x)
car on ne connait pas la primitive
x
cos(x)
de x .
On sait que :
1 2 sin2 x2 = cos(x) 1 et
2
sin2 x2 x4 donc,
2
1 x2 = cos(x) 1 et
cos(x)
1
x
x1
x 2
x
Donc
R 3a 1: x
R 3a
R 3a
dx a x1 dx.
a ( x 2 ) dx a cos(x)/x
R 3a
ln(3) 9a2 /4 + a2 /4 a cos(x)/x dx ln(3).
R 3a
Donc a cos(x)/x dx tend vers ln(3) quand a tend vers 0.
6.22
6.22.1
302
6.22.2
303
6.23
6.23.1
304
6.23.2
6.23.3
6.23.4
305
x-+sin((pi+2*x)/2)
On tape :
shift_phase(x+tan(x))
On obtient :
x+1/(tan((pi+2*x)/2))
Si on ne veut pas que lexpression soit value (i.e. quil ny ait pas de simplification automatique), il faut quoter largument. On tape :
shift_phase(sin(x+pi/2))
On obtient :
-(cos(pi+x))
Mais si on tape sans quoter le sinus :
shift_phase(sin(x+pi/2))
On obtient :
sin((pi+2*x)/2)
car sin(x+pi/2) est value (i.e. simplifie) en cos(x) avant que la commande shift_phase ne soit appele et ensuite shift_phase(cos(x)) renvoie sin((pi+2
*x)/2). Exercice
P
sin(nx)
Calcul de +
n=1
n
On tape :
normal(sum((sin(n*x))/n,n=1..+infinity))
On obtient :
-atan((sin(x))/(cos(x)-1))
On tape :
normal(shift_phase(halftan(atan(sin(x)/(-cos(x)+1)))))
On obtient :
pi*floor(((pi+x)/2)/pi+1/2)+(-1)/2*pi+(-1)/2*x
si on tape :
tsimplify(atan((sin(x))/(-cos(x)+1)))
On obtient car tsimplify nest pas rigoureux vis a vis des 2k :
-1/2*pi-1/2*x
6.23.5
306
On obtient :
sqrt(2)*cos(x-pi/4)
On tape :
tcollect(2*sin(x)*cos(x)+cos(2*x))
On obtient :
sqrt(2)*cos(2*x-pi/4)
6.23.6
6.23.7
6.23.8
x
arccos(x) par arctan(
).
2
1 x2
On tape :
acos2atan(acos(x))
On obtient :
pi/2-atan(x/sqrt(1-x^2))
6.23.9
6.23.10
6.23.11
6.23.12
307
308
6.23.13
sincos ou exp2trig a comme argument une expression contenant des exponentielles complexes.
sincos ou exp2trig transforme cette expression en fonction de sin(x) et de
cos(x).
On tape :
sincos(exp(i*x))
On obtient si Variables_complex nest pas coch dans la configuration du
CAS :
cos(x)+i*sin(x)
On obtient si Variables_complex est coch dans la configuration du CAS :
exp(im(x))*(cos(re(x))+(i)*sin(re(x)))
On tape :
exp2trig(exp(-i*x))
On obtient si Variables_complex nest pas coch dans la configuration du
CAS :
cos(x)-i*sin(x)
On tape :
simplify(sincos(((i)*(exp((i)*x))^2-i)/(2*exp((i)*x))))
Ou on tape :
simplify(exp2trig(((i)*(exp((i)*x))^2-i)/(2*exp((i)*x))))
On obtient :
-sin(x)
6.23.14
6.23.15
309
6.23.16
6.23.17
6.23.18
310
6.23.19
6.23.20
6.23.21
311
6.23.22
6.23.23
312
6.23.24
6.23.25
6.23.26
313
6.24
Transforme de Fourier
6.24.1
+
X
an cos(
n=1
ou
f (x) =
2nx
2nx
) + bn sin(
)
T
T
+
X
cn e
2inx
T
n=
314
315
Si lon veut que les calculs soient simplifis il faut dire que n est un entier en tapant
assume(n,integer).
Exemples
Soit la fonction f , de priode T = 2, dfinie sur [; [ par f (x) = 1 +
cos(x) + sin(x).
On tape, pour avoir son coefficient b1 :
fourier_bn(1+cos(x)+sin(x),x,2*pi,1,-pi)
On obtient :
1
On tape, pour avoir son coefficient bn (n 6= 1) :
assume(n,integer)
fourier_bn(1+cos(x)+sin(x),x,2*pi,n,-pi)
On obtient :
0
Soit la fonction f , de priode T = 2, dfinie sur [1; 1[ par f (x) = x2 .
On tape, pour avoir son coefficient bn (n 6= 0) :
assume(n,integer)
fourier_bn(x^2,x,2,n,-1)
On obtient :
0
Soit la fonction f , de priode T = 2, dfinie sur [1; 1[ par f (x) = x3 .
On tape, pour avoir son coefficient b1 :
fourier_bn(x^3,x,2,1,-1)
On obtient :
(2*pi^2-12)/pi^3
On tape, pour avoir son coefficient bn :
assume(n,integer)
fourier_bn(x^3,x,2,n,-1)
On obtient :
(-2*n^2*pi^2*(-1)^n+12*(-1)^n)/(n^3*pi^3)
fourier_cn
fourier_cn a quatre ou cinq paramtres : une expression Xpr, le nom de la
variable (par exemple x), la priode T , un entier n et a (a vaut 0 par dfaut).
fourier_cn(Xpr,x,T,n,a) renvoie le coefficient de Fourier cn dune fonction de variable x dfinie sur [a, a+T [ par f (x) = Xpr et priodique de priode T .
Si f (x) = Xpr est continue par morceaux sur R, fourier_cn(Xpr,x,T,n,a)
Z
2inx
1 a+T
renvoie cn =
f (x)e T dx
T a
Exemples
Soit la fonction f , de priode T = 2, dfinie sur [; [ par f (x) = 1 +
cos(x) + sin(x).
On tape, pour avoir son coefficient c0 :
fourier_cn(1+cos(x)+sin(x),x,2*pi,0,-pi)
On obtient :
1
On tape, pour avoir son coefficient c1 :
316
317
On obtient :
((2*i)*pi^2*n^2+2*pi*n+-i+i)/pi/n^3
expression que lon peut simplifier avec normal et on trouve finalement :
((2*i)*pi*n+2)/n^2
Il est donc prfrable dcrire assume(n,integer).
Donc si n 6= 0 on a :
2in+2
cn =
n2
Puis on tape :
fourier_cn(x^2,x,2*pi,0)
On obtient :
4*pi^2/3
Donc si n = 0 on a :
4. 2
c0 =
3
Remarque :
Lorsque lon ne veut plus considrer n comme un entier on doit taper :
purge(n).
Pour connatre les hypothses faites sur une variable, par exemple n, on tape :
about(n)
6.24.2
Soit N un entier.
On considre une suite x priodique de priode N : elle est entirement dtermine
par la liste x = [x0 , x1 , ...xN 1 ].
La transforme de Fourier discrte est une transformation FN qui a une suite x
priodique de priode N fait correspondre une suite y, priodique de priode N ,
dfinie pour k = 0..N 1 par :
N
1
X
kj
(FN (x))k = yk =
xj N
avec N racine N -ime de lunit.
j=0
kj
x j N
j=0
avec N = exp( 2i
N )
La mthode de la transforme de Fourier rapide permet de calculer rapidement ces
sommes si N est une puissance de 2.
Les proprites
La transforme de Fourier discrte FN est une transformation bijective.
On a :
FN1 = N1 FN
cest dire :
N 1
1 X
kj
(FN1 (x))k =
x j N
N
j=0
318
Notation
Avec Xcas on a les fonctions fft et ifft qui sont :
fft(x)=FN (x) et
ifft(x)=FN1 (x)
Dfiniton
Soient deux suites x et y priodiques de priode N .
On dfinit :
- le produit de Hadamard, not , par :
(x y)k = xk yk
- le produit P
de convolution, not , par :
1
(x y)k = N
j=0 xj ykj
On a alors :
N FN (x y) = FN (x) FN (y)
FN (x y) = FN (x) FN (y)
O interviennent ces sommes ?
1. Valeur dun polynme
P 1
j
Soit un polynme P (x) = N
j=0 cj x donn par la liste de ces coefficients
[c0 , c1 , ..cN 1 ] complt par des zros pour que N soit une puissance de 2.
k
=
On veut calculer les valeurs prises par P (x) aux points ak = N
PN 1
k j
2ik
exp( N ) pour k = 0..N 1, cest dire les valeurs j=0 cj (N )
pour k = 0..N 1.
On a :
[P (a0 ), P (a1 ), ..P (aN 1 )] = FN ([c0 , c1 , ..cN 1 ])
Par exemple on tape :
P(x):=x+x^2 et w:=i
Les coefficients de P sont [0,1,1,0], = w = i, N = 4 et exp(2i/4) =
i.
On a :
fft([0,1,1,0])=[2,-1-i,0,-1+i] et donc
P(0)=2,
P(-i)=P(w^-1)=-1-i,
P(-1)=P(w^-2)=0,
P(i)=P(w^-3)=-1+i.
k =
On veut calculer les valeurs prises par P (x) aux points bk = N
P
N
1
k j
exp( 2ik
j=0 cj (N )
N ) pour k = 0..(N 1), cest dire les valeurs
pour k = 0..(N 1).
On a :
[P (a0 ), P (a1 ), ..P (a(N 1) )] = N FN1 ([c0 , c1 , ..c(N 1) ])
Par exemple on tape :
P(x):=x+x^2 et w:=i
Les coefficients de P sont [0,1,1,0], = w = i, N = 4 et exp(2i/4) =
i.
On a :
4*ifft([0,1,1,0])=[2,-1+i,0,-1-i] et donc
P(0)=2,
P(i)=P(w^1)=-1+i,
319
P(-1)=P(w^2)=0,
P(-i)=P(w^3)=-1-i.
2. Interpolation trigonomtrique
Soit f une fonction 2-priodique dont on connait les valeurs en xk =
2k/N , f (xk ) = f (2k/N ) = fk pour k = 0..(N 1) avec N = 2 m.
On veut dterminer le polynme p trigonomtrique interpolateur de f aux
points 2k/N pour k = 0..(N 1), sous la forme :
P N2 1
p(x) = a0 /2 + n=0
an cos(nx) + bn sin(nx) + 1/2a N cos( N2x )
2
on suppose donc b0 = b N = 0 et on choisit cette notation pour simplifier les
2
calculs ultrieurs.
On a aussi :
P N2 1
p(x) = 1/2p N exp(iN x/2)+ n=
p exp(inx)+1/2p N exp(iN x/2).
N
+1 n
2
On pose :
pour n = 0..( N2 1), qn = pn et
pour n = N2 ..(N 1), qn = pnN .
P 1
Donc pour k = 0..(N 1), p(xk ) = N
n=0 qn exp(inxk ) = fk .
Il suffit donc de rsoudre ce systme dinconnues qn .
On a :
fk = f (2k/N ) = p(xk ) = N FN1 (q) = N ifft(q)
soit :
q = [p0 , ..p N 1 , p N , .., p1 ] = N1 FN ([f0 , ..f(N 1) ]) =
2
1
N fft([f0 , ...f(N1) ])
Remarque
Si la fonction f est relle on a :
pk = pk pour k = 1..( N2 1) et p0 et p N sont rels.
2
Donc si la fonction f est relle on a :
P N2 1
p(x) = p0 + 2 re( k=0
pk exp(ikx) + 1/2p N exp(i N2x ))
2
320
En rsum :
pour 0 n < N2 , pn est le n-ime lment de N1 FN ([f0 , ..f(N 1) ]) et,
pour N2 n < 0, pn est le (n+N )-ime lment de N1 FN ([f0 , ..f(N 1) ]).
3. Srie de Fourier
Soit f une fonction 2-priodique dont on connait les valeurs en xk =
2k/N , f (xk ) = f (2k/N ) = yk pour k = 0..(N 1).
On suppose que sa srie de Fourier converge simplement vers f , et on veut
connatre les coefficients cn pour N2 n < N2 .
Il fait donc
R 2calculer de faon approche :
1
cn = 2
0 f (t) exp(int)dt
Remarque
Lorsque la fonction priodique f est gale sa srie de Fourier, on a :
P
ak ibk
.
f (x) = a0 /2 +
k=1 ak cos(kx) + bk sin(kx) avec ck =
2
On calcule lintgrale donnant cn de manire approche par la mthode des
trapzes. Ici Romberg ne sert a rien, car le dveloppement dEuler Mac Laurin a ses coefficients dj nuls puisque la fonction que lon intgre est priodique et donc toutes ses drives sont gales en 0 et en 2.
Si c'
n est la valeur approche de cn obtenue par la mthode des trapzes, on
a pour N2 n < N2 :
1 2 PN 1
c'
n = 2 N
k=0 yk exp(2ink/N )
puisque xk = 2k/N et f (xk ) = yk on a
f (xk ) exp(inxk ) = yk exp(2ink/N ) et
f (0) exp(0) = f (2) exp(2inN /N ) = y0 = yN
On a donc :
1
'
'
'
[c'
0 , ..c N 1 , c N , ..c1 ] = N FN ([y0 , y1 ...y(N 1) ]) car
2
si n 0, on a c'
n = yn et
n+N
2i
N =1
n
si n < 0, on a c'
puisque N
n = yn+N si N = exp( N ), N = N
Proprits
On retrouve les coefficients du polynme interpolateur de f :
N
N
pn = c'
n pour 2 n < 2 .
P N2 1 '
Ce qui veut dire que le polynme trigonomtrique n=
N cn exp(inx) in2
sa
srie
de
Fourier,
cest dire que lon a :
R +
P+
f (t) = m= cm exp(2imt) avec m= |cm | <
On a donc :
P
km
f (xk ) = f (2k/N ) = yk = +
m= cm N et
P
N 1
kn
1
c'
n = N
k=0 yk N
En remplaant
yk on obtient :
1 PN 1 P+
km kn
c'
=
n
k=0
m= cm N N
N
Or :
km kn = k(mn) et
N
N
N
321
mn
puisque N
est une racine N -ime de lunit, on a :
P 1 (mn)k
(mn)N
= 0.
N
= 1 et N
k=0 N
Donc :
P 1 k(mn)
si m n est un multiple de N (m = n + l N ) on a N
= N et
k=0 N
PN 1 k(mn)
sinon k=0 N
=0
En intervertisant
les
deux
on a :
PNsommes
1 k(mn)
1 P+
c'
=
c
n
m= m
k=0
N
N
P
+
c
c'
=
n
l= (n+lN )
cest dire :
c'
n = ...cn2N + cnN + cn cn+N cn+2N + .....
Exemple :
f(t):=cos(t)+cos(2*t)
x:=f(2*k*pi/8)$(k=0..7)
On obtient
:
6.24.3
fft a comme argument une liste (ou une squence) [a0 , ..aN1 ] o N est une puissance de deux.
fft renvoie la liste [b0 , ..bN1 ] tel que pour k=0..N-1 on ait :
N1
X
kj
fft([a0 , ..aN1 ])[k] = bk =
xj N
avec N racine N -ime de lunit.
j=0
On tape :
fft(0,1,1,0)
322
On obtient :
[2.0, -1-i, 0.0, -1+i]
On peut aussi travailler sur un corps fini Z/pZ, en indiquant une racine N ime primitive de lunit en 2ime argument et p en 3ime argument de fft. Par
exemple on verifie que 22798 est une racine primitive dordre 128 de 1 modulo
35969. Par exemple, calculons par FFT le carr dun polynme coefficients entiers alatoire infrieur 10, de degr 60, reprsent par la liste de ses coefficients
par ordre croissant complt par des 0 pour avoir une liste de taille N = 128 :
P:=poly1[op(ranm(1,60,10)[0]),0$68];
p:=fft(P,22798,35969)
il suffit maintenant de calculer le produit terme terme de p avec lui-mme et den
calculer la FFT inverse
Q:=ifft(p .* p,22798,35969)
6.24.4
ifft a comme argument une liste [b0 , ..bN1 ] (ou une squence) o N est une
puissance de deux.
ifft renvoie la liste [a0 , ..aN1 ] tel que :
fft([a0 , ..aN1 ]) = [b0 , ..bN1 ].
On tape :
ifft([2,-1-i,0,-1+i])
On obtient :
[0.0, 1.0, 1.0, 0.0]
Comme pour la fft, on peut travailler sur un corps fini en indiquant une racine
N -ime primitive de lunit en 2ime argument et p en 3ime argument de ifft.
6.24.5
323
p0 = 20.25,
p1 = 4.48115530061 + 1.72227182413 i = p1 ,
p2 = 0.375 + 0.875 i = p2 ,
p3 = 0.768844699385 + 0.222271824132 i = p3 ,
p4 = 0.5 car on a :
q = [q0 , ...qN 1 ] = [p0 , ..p N 1 , p N , .., p1 ] = N1 FN ([y0 , ..yN 1 ]) = 1N fft(y)
2
2
On calcule la valeur T 0 du polynme dinterpolation au point t0 = 13, 75 =
13 + 3/4 = 55/4.
On a :
q:=[20.25,-4.48115530061+1.72227182413*i,-0.375+0.875*i,
-0.768844699385+0.222271824132*i,0.5,
-0.768844699385-0.222271824132*i,
-0.375-0.875*i,-4.48115530061-1.72227182413*i]
On pose :
pp:=[q[4],q[5],q[6],q[7],q[0],q[1],q[2],q[3]]
On a pk = pp[k + 4] pour k = 4...3
On tape :
t0(j):=exp(2*i*pi*(13+3/4)/24*j)
T0:=1/2*pp[0]*(t0(4)+t0(-4))+sum(pp[j+4]*t0(j),j,-3,3)
evalf(sincos(T0))
On obtient :
29.4863181684
On prvoit donc une temprature de 29.49 degrs Celsius.
On tape :
q1:=[q[4]/2,q[3],q[2],q[1],q[0]/2]
a:=t0(1) (ou a:=-exp(i*pi*7/48))
g(x):=r2e(q1,x)
evalf(2*re(g(a)))
ou encore
2.0*re(q[0]/2+q[1]*t0(1)+q[2]*t0(2)+q[3]*t0(3)+q[4]/2*t0(4))
On obtient :
29.4863181684
Remarque
Si on utilise le polynme dinterpolation de Lagrange (on interpole par un polynme non priodique).
On tape :
l1:=[0,3,6,9,12,15,18,21]
l2:=[11,10,17,24,32,26,23,19]
subst(lagrange(l1,l2,13+3/4),x=13+3/4)
On obtient :
8632428959
' 30.1144061688
286654464
6.25
6.25.1
324
SANS linariser.
On tape :
hyp2exp(sinh(x))
On obtient :
(exp(x)-1/(exp(x)))/2
6.25.2
6.25.3
6.25.4
6.25.5
325
6.25.6
6.25.7
6.25.8
326
6.25.9
6.26
Les polynmes
6.26.1
Un polynme dune variable peut tre reprsent, soit par la liste de ses coefficients selon les puissances dcroissantes (on utilise comme dlimiteurs poly1[...]
en particulier lorsquil peut y avoir confusion avec un vecteur), soit par son expression symbolique. Dans les rponses affiches par un diteur dquations, le rsultat
est parenths avec [] et [] pour indiquer quil sagit de la liste de coefficients
dun polynme, lorsquon effectue une copie, cest poly1[...] qui saffiche.
Attention Lcriture est toujours selon les puissances dcroissantes mme si on
a coch puissance croissante dans la configuration du cas (puissance
croissante ne sapplique quaux expressions symboliques).
6.26.2
327
6.26.3
328
On obtient :
x*y*z+2*x*z+3*x+4*y*z+5
Remarque
Si en deuxime argument on met une valeur a (resp a, b, c), on obtient la valeur du
polynme en x = a (resp en x = a, y = b et z = c).
On tape :
poly2symb([[[1,0],[2,3]],[[4,0],5]],1,1,1)
On obtient car 1 + 2 + 3 + 4 + 5 = 15 :
15
6.26.4
329
r2e(%%%{1,[2,0]%%%}+%%%{-1,[1,1]%%%}+%%%{2,[0,1]%%%},[x,y])
Ou on tape :
poly2symb(%%%{1,[2,0]%%%}+%%%{-1,[1,1]%%%}+
%%%{2,[0,1]%%%},[x,y])
On obtient :
x^2-x*y+2*y
Remarque
Si en deuxime argument on met une valeur a (resp [a, b]), on obtient la valeur du
polynme en x = a (resp en x = a et y = b).
On tape :
poly2symb([1,0,-1],3)
On obtient car 32 1 = 8 :
8
On tape :
poly2symb(%%%{1,[2,0]%%%}+%%%{-1,[1,1]%%%}+
%%%{2,[0,1]%%%},[1,2])
On obtient :
1-1*2+2*2
6.26.5
e2r ou symb2poly a comme argument polynme, donn avec une criture polynmiale, dune variable (resp plusieurs variables), et le nom de cette variable
formelle (par dfaut x) (resp la squence des noms de ces variables).
e2r ou symb2poly transforme cette criture polynmiale, en la liste des coefficients selon les puissances dcroissantes selon le nom de la variable donn en
deuxime argument (resp lcriture rcursive de la liste des coefficients selon les
puissances dcroissantes selon les noms des variables donns en deuxime argument : le rsultat est la liste des coefficients de la premire variable, coefficients
qui sont eux-mmes des polynmes qui seront donns sous la forme la liste des
coefficients de la deuxime variable etc...).
Attention Si le deuxime argument est une liste, le rsultat est lcriture du polynme au format interne.
On tape :
e2r(x^2-1)
Ou on tape :
symb2poly(x^2-1)
330
Ou on tape :
symb2poly(x^2-1,x)
Ou on tape :
e2r(x^2-1,x)
Ou on tape :
symb2poly(y^2-1,y)
Ou on tape :
e2r(y^2-1,y)
On obtient :
[]1,0,-1[]
On tape :
symb2poly(x*y^2+2y-1,x)
Ou on tape :
e2r(x*y^2+2y-1,x)
On obtient :
[]y^2,2y-1[]
On tape :
symb2poly(x*y^2+2y-1,y)
Ou on tape :
e2r(x*y^2+2y-1,y)
On obtient :
[]x,2,-1[]
On tape :
symb2poly(x*y^2+2y-1,x,y)
Ou on tape :
e2r(x*y^2+2y-1,x,y)
On obtient :
[][]1,0,0[],[]2,-1[][]
ce qui signifie que le polynme est de degr 1 en x que le coeff de x est le polynme
en y de coefficients [1,0,0] cest dire y 2 et que le terme constant est le polynme
en y de coefficients [2,-1] cest dire 2y 1.
On tape :
331
symb2poly(x^2*y^2-x^2+2x*y+4y^2-y+3,x,y)
Ou on tape :
e2r(x^2*y^2-x^2+2x*y+4y^2-y+3,x,y)
On obtient :
[]1,0,-1[],[]2,0[],[]4,-1,3[][]
ce qui signifie que le polynme est de degr 2 en x que le coeff de x2 est le polynme en y de coefficients []1,0,-1[] cest dire y 2 1, le coeff de x est le
polynme en y de coefficients []2,0[] cest dire 2y et que le terme constant est
le polynme en y de coefficients []4,-1,3[] cest dire 4y 2 y + 3.
6.26.6
332
6.26.7
6.26.8
333
3*x
On tape :
coeff(-x^4+3x*y^2+x,[x,y],[1,2])
On obtient :
3
6.26.9
6.26.10
valuation ou ldegre a comme argument un polynme donn sous forme symbolique ou par la liste de ses coefficients.
valuation ou ldegre renvoie la valuation de ce polynme, cest le degr du
monme de plus petit degr (ldegree=low degree).
On tape :
valuation(x^3+x)
On obtient :
1
On tape :
valuation([1,0,1,0])
On obtient :
1
334
6.26.11
6.26.12
6.26.13
335
6.26.14
6.26.15
336
On obtient :
3
ou on tape :
content([6,-3,9]))
On obtient :
poly1[3]
On tape :
content(6*x^2*(y^3-y)-3*x*(y^3-1)+9*(y-1))
On obtient :
3*y-3
ou on tape :
content([6*(y^3-y),-3*(y^3-1),9*(y-1)])
On obtient :
poly1[3*y-3]
On tape :
content(6*x^2*(y^3-y)-3*x*(y^3-1)+9*(y-1),y)
ou :
content([3x,0,6*x^2+9,-9-3x])
On obtient :
3
6.26.16
6.26.17
337
338
6.26.18
((2*sqrt(5)-19)*((sqrt(5)+15)*x+7*sqrt(5)-5)*(-x+1)*((sqrt(5)+25)*x-13
On tape :
factor(x^2+1)
On obtient en mode rel :
x^2+1
On obtient en mode complexe :
((-i)*x+1)*((i)*x+1)
6.26.19
339
6.26.20
340
6.26.21
6.26.22
6.26.23
341
On tape :
normal(1/rootof([1,0],[1,0,10,0,1]))
car P (x) = x est reprsent par [1,0].
On obtient :
rootof([[-1,0,-10,0],[1,0,10,0,1]])
ce qui veut dire que :
1
= ()3 10.
Calculer ()2 .
On tape :
normal(rootof([1,0],[1,0,10,0,1])^2)
On a =rootof([1,0],[1,0,10,0,1]) car P (x) = x est reprsent
par [1,0], et pour avoir 2 , on lve au carr.
On obtient :
-5-2*sqrt(6)
2
ou pour avoir directement, on tape :
normal(rootof([1,0,0],[1,0,10,0,1])^2)
car P (x) = x2 est reprsent par [1,0,0].
On obtient :
-5-2*sqrt(6)
Ce rsultat peut se vrifier puisque lon a une quation bicarre de discriminant
rduit 25 1 = 24 = 4 6. On tape :
csolve(x^4+10x^2+1)
On obtient :
[(i)*sqrt(-2*sqrt(6)+5),(-i)*sqrt(-2*sqrt(6)+5),
(i)*sqrt(2*sqrt(6)+5),(-i)*sqrt(2*sqrt(6)+5)]
p
Donc = i 2 6 + 5
On tape :
342
On obtient :
-5-2*sqrt(6)
6.26.24
6.26.25
pcoeff (ou pcoef) a comme argument, une liste de composantes les racines
dun polynme P .
pcoeff (ou pcoef) renvoie une liste de composantes, les coefficients du polynme unitaire P (par ordre dcroissant).
On tape :
pcoef([1,2,0,0,3])
On obtient :
[1,-6,11,-6,0,0]
cest dire (x 1)(x 2)(x2 )(x 3) = x5 6x4 + 11x3 6x2 .
6.26.26
343
6.26.27
344
6.26.28
6.26.29
6.26.30
randpoly (ou randPoly) a deux paramtres le nom dune variable (par dfaut
x) et un entier n (en fait lordre des paramtres nest pas important).
randpoly renvoie un polynme de variable le premier paramtre (ou x), de degr
le deuxime paramtre et dont les coefficients sont des entiers alatoires quirpartis sur -99..+99.
On tape :
randpoly(t,4)
On obtient par exemple :
345
-8*t^4-87*t^3-52*t^2+94*t+80
On tape :
randpoly(4)
On obtient par exemple :
70*x^4-46*x^3-7*x^2-24*x+52
On tape :
randpoly(4,u)
On obtient par exemple :
2*u^4+33*u^3-6*u^2-92*u-12
6.26.31
reorder a deux paramtres : une expression et une liste contenant les noms des
variables dans un certain ordre.
reorder dveloppe lexpression selon lordre des variables donn dans le second
paramtre.
On tape :
reorder(x^2+2*x*a+a^2+z^2-x*z,[a,x,z])
On obtient :
a^2+2*a*x+x^2-x*z+z^2
Attention :
Il ne faut pas que les variables soient affectes !
6.26.32
346
6.26.33
x1
2
= 0 et pour x = 3 on a
x1
2
= 1.
lagrange([1,3],[0,1],y)
On obtient :
(y-1)/2
Attention lagrange([1,2],[3,4],y) ne renvoie pas une fonction mais une
expression. mais on peut dfinir une fonction en mettant :
f(x):=lagrange([1,2],[3,4],x) ou
f(y):=lagrange([1,2],[3,4],y) et alors
f(4) renvoie 6 car f(x)=x+2)
Bien voir la diffrence entre :
g(x):=lagrange([1,2],[3,4]) et
f(x):=lagrange([1,2],[3,4],x).
g(x):=lagrange([1,2],[3,4]) ne definit pas une fonction, par exemple,
g(2)=x-1+3 alors que f(2)=4.
Ceci dit, la dfinition of f nest pas efficace car le polynme sera recalcul depuis
le dbut chaque appel de f (quand on dfinit une fonction le membre de droite
nest pas valu, lvaluation est faite seulement quand on appelle f).
Pour tre efficace il faut utiliser unapply :
f:=unapply(lagrange([1,2],[3,4]),x) ou
f:=unapply(lagrange([1,2],[3,4],y),y) Exercice Soient f (x) =
1
, x0 = 2 x1 = 2.5 et x2 = 4. On demande de calculer le polynme L dinterpox
lation de Lagrange et sa valeur en x = 3 et x = 4.5.
On tape :
f(x):=1/x
L:=unapply(normal(lagrange([2,2.5,4],[f(2),f(2.5),f(4)])),x)
On obtient :
x->0.05*x^2-0.425*x+1.15
347
On tape :
L(3),L(4.5)
On obtient :
0.325,0.25
6.26.34
Dfinition
Soit une subdivision n de lintervalle [a, b] :
a = x0 ,
x1 ,
...,
xn = b
On dit que s est une fonction spline de degr l si s est une application de [a, b] dans
R vrifiant :
s admet des drives continues jusqu lordre l 1,
s restreint chaque intervalle de la subdivision est un polynme de degr
infrieur ou gal l.
Thorme
Lensemble des fonctions splines de degr l sur n est un R-espace vectoriel de
dimension n + l.
En effet :
Sur [a, x1 ], s est un polynme A de degr infrieur ou gal l, donc sur [a, x1 ],
s = A(x) = a0 + a1 x + ...al xl et A est une combinaison linaire de 1, x, ...xl .
Sur [x1 , x2 ], s est un polynme B de degr infrieur ou gal l, donc sur [x1 , x2 ],
s = B(x) = b0 + b1 x + ...bl xl .
Puisque s admet des drives continues jusqu lordre l 1 on doit avoir :
0 j l 1,
348
ainsi,
s|[a,b] = a0 + a1 x + ...al xl + 1 q1 (x) + .... + n1 qn1 (x) et
s est une combinaison linaire des n+l fonctions indpendantes 1, x, ..xl , q1 , ..qn1 .
Interpolation avec des fonctions splines
On peut demander dinterpoler une fonction f sur n par une fonction spline s de
degr l, ce qui va imposer s de vrifier s(xk ) = yk = f (xk ) pour tout 0 k n.
On a donc n + 1 conditions, il reste donc l 1 degrs de libert. On peut donc
encore imposer l 1 conditions supplmentaires qui seront des conditions sur les
derives de s en a et b. Il existe alors trois types dinterpolation (interpolation
dHermite, interpolation naturelle, interpolation priodique) qui sont obtenues en
rajoutant trois types de contraintes. On peut montrer que pour chacun de ces types
dinterpolation la solution au problme dinterpolation est unique.
Supposons l impair, l = 2m 1, il y a donc 2m 2 degrs de libert. On
rajoute les contraintes suivantes :
Interpolation dHermite
1 j m 1,
Interpolation naturelle
m j 2m 2,
Interpolation priodique
1 j 2m 2,
et
s(m) (a) = f (m) (a)
Interpolation naturelle
m j 2m 2,
et
s(2m1) (a) = 0
Interpolation priodique
1 j 2m 1,
Une spline naturelle de degr donn passant par des points donns est une fonction
spline vrifiant linterpolation naturelle.
Linstruction spline calcule une spline naturelle de degr donn passant par
des points dont les listes des abscisses par ordre croissant et des ordonnes sont
passes en argument. Elle renvoie la fonction spline sous forme dune liste de polynmes, chaque polynme tant valide dans un intervalle. On donne dans lordre
croissant la liste des abscisses, la liste des ordonnes, le nom de variables souhait
pour les polynmes et le degr.
Par exemple, on veut une spline naturelle de degr 3, passant par les points
x0 = 0, y0 = 1, x1 = 1, y1 = 3 et x2 = 2, y2 = 0, on tape :
349
spline([0,1,2],[1,3,0],x,3)
On obtient une liste de deux polynmes fonction de x :
[5 x3 /4 + 13 x/4 + 1,
6.27
Les polynmes sont reprsents par des expressions ou par la liste de leurs
coefficients par ordre de puissances dcroissantes. Dans le premier cas la variable
utilise par dfaut est x. Pour les polynmes coefficients dans Z/nZ, appliquez
% n lexpression ou chaque coefficient de la liste.
6.27.1
350
On tape :
divis(x^4-1)
Ou on tape :
divis(poly2symb([1,0,0,0,-1],x))
On obtient :
[1,x^2+1,x+1,(x^2+1)*(x+1),x-1,(x^2+1)*(x-1),
(x+1)*(x-1),(x^2+1)*(x+1)*(x-1)]
On tape :
divis([t^2,x^2-1])
On obtient :
[[1,t,t^2],[1,x+1,x-1,(x+1)*(x-1)]]
6.27.2
quo donne le quotient de la division euclidienne de deux polynmes (division selon les puissances dcroissantes).
On peut donner les polynmes soit par la liste de leurs coefficients selon les puissances dcroissantes, soit sous leurs formes symboliques et dans ce cas la variable
doit tre rajoute comme troisime argument (par dfaut la variable est x).
On tape :
quo(x^2+2x+1,x+3)
On obtient :
x-1
On tape :
quo(t^2+2t+1,t+3,t)
On obtient :
t-1
ou on tape :
quo([1,2,1],[1,3])
On obtient :
[] 1,-1 []
cest dire le polynme poly1[1,-1].
Pour avoir le quotient de x3 + 2x + 4 par x2 + x + 2, on tape :
351
quo(x^3+2x+4,x^2+x+2)
On obtient :
x-1
Ou on tape :
quo([1,0,2,4],[1,1,2])
On obtient :
[] 1,-1 []
cest dire le polynme poly1[1,-1] ou encore le polynme x-1.
On tape :
quo(t^3+2t+4,t^2+t+2,t)
On obtient :
t-1
On tape si on ne met pas la variable t comme dernier argument :
quo(t^3+2t+4,t^2+t+2)
On obtient :
(t^3+2*t+4)/(t^2+t+2)
6.27.3
352
On obtient :
-(2)*x+1)
La division est faite dans Z/5Z[X] alors que pour :
quo(x^3+3*x,2*x^2+6*x+5) mod 5
la division est faite dans Z[X] puis est rduite aprs :
3*x-9
Si Xcas nest pas en mode Maple, la division des polynmes dans Z/pZ[X] se
fait en tapant :
quo((x^3+3*x)% 5,(2x^2+6x+5)%5)
6.27.4
353
On obtient :
[] 4
cest dire le polynme poly1[4] ou encore le polynme 4.
On tape pour avoir le reste de x3 + 2x + 4 par x2 + x + 2 :
rem(x^3+2x+4,x^2+x+2)
On obtient :
x+6
Ou on tape :
rem([1,0,2,4],[1,1,2])
On obtient :
[] 1,6[]
cest dire le polynme poly1[1,6] ou encore le polynme x+6.
On tape :
rem(t^3+2t+4,t^2+t+2,t)
On obtient :
t+6
On tape si on ne met pas la variable t comme dernier argument :
rem(t^3+2t+4,t^2+t+2)
On obtient :
0
6.27.5
354
On obtient :
rem([1,2,4],[1,1,2])
En mode Maple on tape :
Rem(x^3+3*x,2*x^2+6*x+5) mod 5
On obtient :
2*x
La division est faite dans Z/5Z[X] alors que pour :
rem(x^3+3*x,2*x^2+6*x+5) mod 5
la division est faite dans Z[X] puis est rduite aprs :
12*x
Si Xcas nest pas en mode Maple, la division des polynmes dans Z/pZ[X] se
fait en tapant :
rem((x^3+3*x)% 5,(2x^2+6x+5)%5)
6.27.6
quorem (ou divide) donne la liste, du quotient et du reste de la division euclidienne (selon les puissances dcroissantes) de deux polynmes.
On peut donner les polynmes soit par la liste de leurs coefficients selon les puissances dcroissantes, soit sous leurs formes symboliques et dans ce cas la variable
doit tre rajoute comme troisime argument (par dfaut la variable est x).
On tape pour avoir le quotient et le reste de la division de x3 +2x+4 par x2 +x+2 :
quorem(x^3+2x+4,x^2+x+2)
On obtient :
[x-1,x+6]
Ou on tape :
quorem([1,0,2,4],[1,1,2])
On obtient :
[[1,-1],[1,6]]
cest dire la liste des polynmes [poly1[1,-1],poly1[1,6]] donc le quotient est le polynme x-1 et le reste est le polynme x+6.
On tape :
quorem(t^3+2t+4,t^2+t+2,t)
On obtient :
[t-1,t+6]
355
On tape :
quorem(t^3+2t+4,t^2+t+2)
On obtient :
[(t^3+2*t+4)/(t^2+t+2),0]
On tape :
quorem(x^3-1,x^2-1)
On obtient :
[x,x-1]
On tape :
quorem(t^3-1,t^2-1,t)
On obtient :
[t,t-1]
6.27.7
gcd dsigne le PGCD (plus grand commun diviseur) de deux polynmes pouvant
avoir plusieurs variables et aussi le PGCD dune liste de polynmes ou dune squence de polynmes pouvant avoir plusieurs variables (voir 6.7.2 pour le PGCD
dentiers). On peut aussi mettre comme paramtres deux listes de mme longueur
(ou une matrice ayant 2 lignes), dans ce cas gcd renvoie le PGCD des lments de
mme indice (ou dune mme colonne). On tape :
gcd([x^2-4,x*y-y],[x^3-8,y^2-x^2*y])
Ou on tape :
gcd([[x^2-4,x*y-y],[x^3-8,y^2-x^2*y]])
On obtient :
[x-2,y]
Exemples
On tape :
gcd(x^2+2*x+1,x^2-1)
On obtient :
x+1
On tape :
gcd(x^2-2*x+1,x^3-1,x^2-1,x^2+x-2)
ou
356
On obtient :
x-1
On tape :
A:=z^2+x^2*y^2*z^2+(-(y^2))*z^2+(-(x^2))*z^2
B:=x^3*y^3*z+(-(y^3))*z+x^3*z-z
C:=gcd(A,B)
On obtient :
z*x*y+z*x-z*y-z
On tape :
factor(A)
On obtient :
(y-1)*(y+1)*(x-1)*(x+1)*z^2
On tape :
factor(B)
On obtient :
(x^2+x+1)*(x-1)*(y+1)*(y^2-y+1)*z
On tape :
factor(C)
On obtient :
(y+1)*(x-1)*z
Pour les polynmes coefficients modulaire, on tape par exemple : On tape :
gcd((x^2+2*x+2) mod 5,(x^2-1) mod 5)
On obtient :
(1 % 5)*x-1 % 5
Mais si on tape :
gcd(x^2+2*x+2,x^2-1) mod 5)
On obtient :
1%5
car lopration modulaire se fait aprs le calcul du PGCD qui a t calcul dans
Z[X].
6.27.8
357
358
6.27.9
ezgcd heugcd modgcd psrgcd dsigne le PGCD (plus grand commun diviseur) de deux polynmes (ou dune liste de polynmes ou dune squence de
polynmes) de plusieurs variables.
ezgcd est calcul avec lalgorithme ezgcd,
heugcd est calcul avec lalgorithme dit du pgcd heuristique,
modgcd est calcul avec lalgorithme modulaire,
psrgcd est calcul avec lalgorithme du sous rsultant.
On tape :
gcd(x^2-2*x*y+y^2-1,x-y)
ou
ezgcd(x^2-2*x*y+y^2-1,x-y)
ou
heugcd(x^2-2*x*y+y^2-1,x-y)
ou
modgcd(x^2-2*x*y+y^2-1,x-y)
ou
psrgcd(x^2-2*x*y+y^2-1,x-y)
On obtient :
1
On tape :
gcd((x+y-1)*(x+y+1),(x+y+1)^2)
ou On tape :
ezgcd((x+y-1)*(x+y+1),(x+y+1)^2)
ou
heugcd((x+y-1)*(x+y+1),(x+y+1)^2)
ou
modgcd((x+y-1)*(x+y+1),(x+y+1)^2)
On obtient :
x+y+1
On tape :
psrgcd((x+y-1)*(x+y+1),(x+y+1)^2)
359
On obtient :
-x-y-1
On tape :
ezgcd((x+1)^4-y^4,(x+1-y)^2)
On obtient :
"GCD not successfull Error: Bad Argument Value"
Mais si on tape :
gcd((x+1)^4-y^4,(x+1-y)^2)
ou
heugcd((x+1)^4-y^4,(x+1-y)^2)
ou
modgcd((x+1)^4-y^4,(x+1-y)^2)
ou
psrgcd((x+1)^4-y^4,(x+1-y)^2)
On obtient :
x-y+1
6.27.10
lcm dsigne le PPCM (plus petit commun multiple) de deux polynmes pouvant
avoir plusieurs variables et aussi le PPCM dune liste de polynmes ou dune squence de polynmes pouvant avoir plusieurs variables (voir 6.7.5 pour le PPCM
dentiers).
On tape :
lcm(x^2+2*x+1,x^2-1)
On obtient :
(x+1)*(x^2-1)
On tape :
lcm(x,x^2+2*x+1,x^2-1)
ou
lcm([x,x^2+2*x+1,x^2-1])
On obtient :
(x^2+x)*(x^2-1)
360
On tape :
A:=z^2+x^2*y^2*z^2+(-(y^2))*z^2+(-(x^2))*z^2
B:=x^3*y^3*z+(-(y^3))*z+x^3*z-z
D:=lcm(A,B)
On obtient :
(x*y*z-x*z+y*z-z)*(x^3*y^3*z+(-(y^3))*z+x^3*z-z)
On tape :
factor(A)
On obtient :
(y-1)*(y+1)*(x-1)*(x+1)*z^2
On tape :
factor(B)
On obtient :
(x^2+x+1)*(x-1)*(y+1)*(y^2-y+1)*z
On tape :
factor(D)
On obtient :
(x-1)*(x+1)*(x^2+x+1)*(y-1)*(y+1)*(y^2-y+1)*z^2
6.27.11
Il sagit de lidentit de Bzout pour les polynmes (Extended Greatest Common Divisor).
egcd a 2 ou 3 arguments : les polynmes A and B qui sont, soit sous la forme
dexpressions dune variable, (si la variable nest pas spcifie cest x), soit donn
par la liste de leurs coefficients par ordre de puissances dcroissantes.
Etant donns 2 polynmes A(x), B(x), egcd ou gcdex renvoie 3 polynmes
[U(x),V(x),D(x)] vrifiant :
U(x)*A(x)+V(x)*B(x)=D(x)=PGCD(A(x),B(x))
On tape :
egcd(x^2+2*x+1,x^2-1)
On obtient :
[1,-1,2*x+2]
On tape :
361
egcd([1,2,1],[1,0,-1])
On obtient :
[[1],[-1],[2,2]]
On tape :
egcd(t^2+2*t+1,t^2-1,t)
On obtient :
[1,-1,2*t+2]
On tape :
egcd(x^2-2*x+1,x^2-x+2)
On obtient :
[x-2,-x+3,4]
On tape :
egcd([1,-2,1],[1,-1,2])
On obtient :
[[1,-2],[-1,3],[4]]
On tape :
egcd(t^2-2*t+1,t^2-t+2,t)
On obtient :
[t-2,-t+3,4]
6.27.12
362
On tape :
abcuv(x^2+2*x+1 ,x^2-1,x^3+1)
On obtient :
[1/2*x^2+1/-2*x+1/2,-1/2*x^2-1/-2*x-1/2]
On tape :
abcuv([1,2,1],[1,0,-1],[1,0,0,1])
On obtient :
[poly1[1/2,1/-2,1/2],poly1[1/-2,1/2,1/-2]]
6.27.13
chinrem a comme argument deux listes ayant chacun comme composantes deux
polynmes ventuellement donns par la liste de leurs coefficients par ordre dcroissant.
chinrem renvoie une liste de composantes deux polynmes.
chinrem([A,R],[B,Q]) renvoie la liste des polynmes P et S vrifiant :
S = R.Q,
P =A
(mod R), P = B
(mod Q)
Il existe toujours une solution P si R et Q sont premiers entre eux, et toutes les
solutions sont congrues modulo S=R*Q
Trouver les solutions P (x) de :
P (x) = x
mod (x2 + 1)
P (x) = x 1 mod (x2 1)
On tape :
chinrem([[1,0],[1,0,1]],[[1,-1],[1,0,-1]])
On obtient :
[[1/-2,1,1/-2],[1,0,0,0,-1]]
ou on tape :
chinrem([x,x^2+1],[x-1,x^2-1])
On obtient :
[1/-2*x^2+x+1/-2,x^4-1]
donc P (x) =
Autre exemple :
On tape :
x2 2.x + 1
(mod x4 1)
2
chinrem([[1,2],[1,0,1]],[[1,1],[1,1,1]])
363
On obtient :
[[-1,-1,0,1],[1,1,2,1,1]]
ou on tape :
chinrem([x+2,x^2+1],[x+1,x^2+x+1])
On obtient :
[-x^3-x^2+1,x^4+x^3+2*x^2+x+1]
6.27.14
364
6.27.15
sturm a deux ou quatre paramtres : une expression polynmiale P ou une fraction rationnelle P/Q et le nom de la variable ou une expression polynmiale P , le
nom de la variable et deux nombres a et b.
Lorsquil y a 2 paramtres sturm renvoie la liste des suites de Sturm et de leur
multiplicit pour P ou pour P et pour Q (sturm est alors identique sturmseq).
Lorsquil y a 4 paramtres sturm, se comporte comme sturmab :
si a et b sont rels, sturm renvoie le nombre de changements de signe de P
sur ]a; b]
si a ou b est complexe, sturm renvoie le nombre de racines complexes
lintrieur du rectangle de sommets opposs a et b.
On tape :
sturm(2*x^3+2,x)
On obtient :
[2,[[1,0,0,1],[3,0,0],-9],1]
On tape :
sturm((2*x^3+2)/(x+2),x)
On obtient :
[2,[[1,0,0,1],[3,0,0],-9],1,[[1,2],1]]
On tape :
sturm(x^2*(x^3+2),x,-2,0)
On obtient :
1
6.27.16
sturmab a quatre paramtres : une expression polynmiale P , le nom de la variable et deux nombres a et b.
si a et b sont rels, sturmab renvoie soit un nombre strictement positif
qui est le nombre de changements de signe de P sur ]a; b], soit 0 si P
reste de signe constant positif ou nul sur ]a; b], soit -1 si P reste de signe
constant ngatif ou nul sur ]a; b]. Ainsi, sturmab permet davoir le nombre
de racines sur [a, b[ du polynme P/G avec G = gcd(P, diff(P )).
si a ou b est complexe, le nombre de racines complexes lintrieur du rectangle de sommets opposs a et b.
On tape :
sturmab(x^2*(x^3+2),x,-2,0)
On obtient :
365
1
On tape :
sturmab(x^3-1,x,-2-i,5+3i)
On obtient :
3
On tape :
sturmab(x^3-1,x,-i,5+3i)
On obtient :
1
Attention ! ! ! !
P doit tre donn par son expression symbolique et, si on tape :
sturmab([1,0,0,2,0,0],x,-2,0),
on obtient :
Bad argument type.
6.27.17
366
On obtient :
[4,[[3,0,0,1],[9,0,0],-81],3,[[2,0,1],[4,0],-16]]
Le premier terme donne le PGCD des coefficients du numrateur (ici 4), puis la
suite de Sturm du numrateur ([[3,0,0,1],[9,0,0],-81]), puis le le PGCD des coefficient du dnominateur (ici 3), et la suite de Sturm du dnominateur ([[2,0,1],[4,0],16]). On a la suite des polynmes [3x3 + 1, 9x2 , 81] pour le numrateur et,
[2x2 + 1, 4x, 16] pour le dnominateur.
On tape :
sturmseq((x^3+1)^2,x)
On obtient :
[1,1]
En effet les termes carrs sont limins et F = 1.
On tape :
sturmseq(3*(3*x^3+1)/(2*x+2),x)
On obtient :
[3,[[3,0,0,1],[9,0,0],-81],2,[[1,1],1]]
Le premier terme donne le PGCD des coefficients du numrateur (ici 3),
le deuxime terme donne la suite de polynmes (ici 3x^3+1, 9x^2, -81),
le troisime terme donne le PGCD des coefficients du dnominateur (ici 2),
le quatrime terme indique la suite de polynmes du dnominateur (x+1,1).
Attention ! ! ! !
P doit tre donn par son expression symbolique et,si on tape :
sturmseq([1,0,0,1],x),
on obtient :
Bad argument type.
6.27.18
..
.
0
0
..
.
a0
s1(n+1) = a0
s2(n+1) = a1
..
.
0
s2(n+2) = a0
..
.
367
..
..
..
..
.
..
..
.
. ..
.
.
.
.
s(m+n)1 = 0
s(m+n)2 = 0
s(m+n)(m+1) = bn1 bn2 b0
On tape :
sylvester(x^3-p*x+q,3*x^2-p,x)
On obtient :
[[1,0,-p,q,0],[0,1,0,-p,q],[3,0,-p,0,0],
[0,3,0,-p,0],[0,0,3,0,-p]]
On tape :
det([[1,0,-p,q,0],[0,1,0,-p,q],[3,0,-p,0,0],
[0,3,0,-p,0],[0,0,3,0,-p]])
On obtient :
-4*p^3-27*q^2
6.27.19
s00 = an
s01 = an1
s0n) = a0
0
s10 = 0
s11 = an
s1n = a1
s1(n+1) = a0
..
..
..
..
.
..
.
.
.
.
.
.
.
s(m1)0 = 0 s(m1)1 = 0
et les n lignes suivantes sont composes de la mme faon partir des coefficients
de B(x) :
sm0 = bm
sm1 = bm1
smm = b0
0
0
..
..
..
..
.
..
..
.
. ..
.
.
.
.
s(m+n1)0 = 0 s(m+n1)1 = 0
On tape :
resultant(x^3-p*x+q,3*x^2-p,x)
On obtient :
-4*p^3-27*q^2
b0
0
0
..
.
a0
368
A=
1
0
3
0
0
0
1
0
3
0
p 0 p 0
3
q p 0 p 0
0
q
0
0 p
S=
1
0
3
0
0
0 p q
0
1 0 p q
0 p 0
0
3 0 p 0
0 3
0 p
On a det(A)=det(S)=-4*p^3+27*q^2
En fait on rsout U P +V Q = C avec C quelconque tel que deg(C)<deg(P )+deg(Q)
i.e. on cherche U et V tel que deg(U )<deg(Q) et deg(V )<deg(P ) (inegalites strictes)
vrifiant U P + V Q = 1. Lorsque le systme est de Cramer, il y a une solution
unique et ca correspond en arithmtique P et Q premiers entre eux (et rciproquement). Donc si det(A)=det(S) est non nul, U et V existent et sont uniques donc
les 2 polynmes x3 p x + q et 3 x2 p sont premiers entre eux et rciproquement si les 2 polynmes x3 p x + q et 3 x2 p sont premiers entre eux
U et V tel que deg(U )<deg(Q) et deg(V )<deg(P ) existent et sont uniques donc
det(A)=det(S) est non nul.
Donc si ce dterminant est nul les 2 polynmes x3 p x + q et 3 x2 p ne sont
pas premiers entre eux.
Remarque
On a : discriminant(P)=resultant(P,P)/lcoeff(P).
Un exemple dutilisation du rsultant
Soient 2 points fixes F 1 et F 2 et un point variable A sur le cercle de centre F 1 et
de rayon 2a. On veut trouver lquation cartsienne du lieu des points M intersection de F 1A et de la mdiatrice de F 2A : on a M F 1 + M F 2 = M F 1 + M A =
F 1A = 2a donc M dcrit une ellipse de foyers F 1 et F 2 et de grand axe 2a.
Choisisons comme repre orthonorm celui de centre F 1 et daxe Ox port par le
vecteur F 1F 2. On a :
A = (2a cos(); 2a sin()) o est langle (Ox, OA). On choisit comme paramtre t = tan(/2) pour que les coordonnes de A soient une fonction rationnelle
369
du paramtre t. On a donc :
1 t2
2t
A = (ax; ay) = (2a
; 2a
)
1 + t2
1 + t2
On pose F 1F 2 = 2c et on note I le milieu de AF 2. On a :
F 2 = (2c, 0) et
1 t2 2t1 t2
I = (c + ax/2; ay/2) = (c + a
;a
)
1 + t2
1 + t2
IM est perpendiculaire AF 2 donc M = (x; y) vrifie lquation eq1 = 0 avec :
eq1 := (x ix) (ax 2 c) + (y iy) ay
M = (x; y) est sur F 1A donc M vrifie lquation eq2 = 0 avec :
eq2 := y/x ay/ax
On a :
resultant(eq1,eq2,t) est un polynme eq3 en x et y, eq3 est indpendant
de t et il existe des polynmes en t, U et V tels que : U (t)eq1+V (t)eq2 = eq3.
On tape :
ax:=2*a*(1-t^2)/(1+t^2);ay:=2*a*2*t/(1+t^2);
ix:=(ax+2*c)/2; iy:=(ay/2)
eq1:=(x-ix)*(ax-2*c)+(y-iy)*ay
eq2:=y/x-ay/ax
factor(resultant(eq1,eq2,t))
On obtient comme rsultant :
-(64(x^2+y^2)(x^2a^2-x^2c^2+-2xa^2c+2xc^3-a^4+
2a^2c^2+a^2 y^2-c^4))
Le facteur -64(x^2+y^2) ne sannule jamais donc lquation du lieu est :
x2 a2 x2 c2 + 2xa2 c + 2xc3 a4 + 2a2 c2 + a2 y 2 c4 = 0
En prenant lorigine du repre en O milieu de F 1F 2, on retrouve lquation cart
sienne de lellipse. Pour faire ce changement dorigine, on a F 1M = F 1O + OM ,
donc on tape :
normal(subst(x^2a^2-x^2c^2+-2 xa^2c+2xc^3-a^4+
2a^2c^2+a^2y^2-c^4,[x,y]=[c+X,Y]))
On obtient :
-c^2*X^2+c^2*a^2+X^2*a^2-a^4+a^2*Y^2
ou encore si on pose b2 = a2 c2
normal(subst(-c^2*X^2+c^2*a^2+X^2*a^2-a^4+a^2*Y^2,
c^2=a^2-b^2))
On obtient :
-a^2*b^2+a^2*Y^2+b^2*X^2
cest dire aprs division par a2 b2 , M vrifie lquation :
X2 Y 2
+ 2 =1
a2
b
Un autre exemple dutilisation du rsultant
Soient 2 points fixes F 1 et F 2 et un point variable A sur le cercle de centre F 1 et
de rayon 2a. On veut trouver lquation cartsienne de lenveloppe de la mdiatrice
D de F 2A (on sait que la mdiatrice de F 2A est tangente lellipse de foyers F 1
et F 2 et de grand axe 2a).
Choisisons comme repre orthonorm celui de centre F 1 et daxe Ox port par le
370
vecteur F 1F 2. On a :
A = (2a cos(); 2a sin()) o est langle (Ox, OA). On choisit comme paramtre t = tan(/2) pour que les coordonnes de A soient une fonction rationnelle
du paramtre t. On a donc :
1 t2
2t
A = (ax; ay) = (2a
; 2a
)
2
1+t
1 + t2
On pose F 1F 2 = 2c et on note I le milieu de AF 2. On a :
F 2 = (2c, 0) et
1 t2 2t1 t2
I = (c + ax/2; ay/2) = (c + a
;a
)
1 + t2
1 + t2
D est perpendiculaire AF 2 donc D a pour quation : eq1 = 0 avec :
eq1 := (x ix) (ax 2 c) + (y iy) ay
Lenveloppe de D est donc le lieu de M intersection de D et de D0 dquation
eq2 = 0 avec eq2 := dif f (eq1, t).
On tape :
ax:=2*a*(1-t^2)/(1+t^2);ay:=2*a*2*t/(1+t^2);
ix:=(ax+2*c)/2; iy:=(ay/2)
eq1:=normal((x-ix)*(ax-2*c)+(y-iy)*ay)
eq2:=normal(diff(eq1,t))
factor(resultant(eq1,eq2,t))
On obtient comme rsultant :
(-(64 a^2))(x^2+y^2)(x^2a^2-x^2c^2+-2xa^2c+2xc^3a^4+2a^2c^2+a^2y^2-c^4)
Le facteur -64(x^2+y^2) ne sannule jamais donc lquation du lieu est :
x2 a2 x2 c2 + 2xa2 c + 2xc3 a4 + 2a2 c2 + a2 y 2 c4 = 0
En prenant lorigine du repre en O milieu de F 1F 2, on retrouve comme prcdemment lquation cartsienne de lellipse :
X2 Y 2
+ 2 =1
a2
b
6.28
Polynmes orthogonaux
6.28.1
371
On obtient :
(35*x^4+-30*x^2+3)/8
On tape :
legendre(4,y)
On obtient :
(35*y^4+-30*y^2+3)/8
6.28.2
6.28.3
372
On obtient :
(a^2+-2*a*x+3*a+x^2+-4*x+2)/2
On tape :
laguerre(2,y)
On obtient :
(a^2+-2*a*y+3*a+y^2+-4*y+2)/2
On tape :
laguerre(2,y,b)
On obtient :
1/2*b^2+-b*y+3/2*b+1/2*y^2-2*y+1
6.28.4
6.28.5
373
6.29
6.29.1
gbasis a au moins deux arguments : une liste de polynmes de plusieurs variables et la liste du nom de ces variables.
gbasis renvoie une base de Grbner de lidal polynomial engendr par les polynmes donns dans le premier argument.
On choisit dordonner les monmes selon lordre lexicographique en accord avec
la liste donne par le dernier argument et selon les puissances dcroissantes : par
exemple on crira x2 y 4 z 3 puis x2 y 3 z 4 si le deuxime argument est [x, y, z]
car (2, 4, 3) > (2, 3, 4) mais on crira x2 y 3 z 4 puis x2 y 4 z 3 si le deuxime
argument est [x, z, y].
Si I est un idal et si (Gk )kK est une base de Grbner de lidal I alors, si F
374
est un polynme non nul de I, le terme dominant de F est divisible par le terme
dominant dun Gk .
Proprit : Si on fait la division euclidienne de F par un des Gk puis, si on recommence avec le reste obtenu et le Gk suivant, on finit par obtenir un reste nul.
On tape :
gbasis([2*x*y-y^2,x^2-2*x*y],[x,y])
On obtient :
[y^3,x*y+(-1/2)*y^2,x^2-y^2]
On peut donner des arguments supplmentaires :
plex (lexicographique pur utilis par dfaut)), tdeg (degr total puis ordre
lexicographique), revlex (degr total puis ordre lexicographique inverse),
pour spcifier un ordre sur les monmes diffrent de lordre par dfaut (qui
est plex),
with_cocoa=true ou with_cocoa=false, si on veut utiliser la librairie CoCoA pour faire le calcul de la base de Grbner.
with_f5=true ou with_f5=false pour utiliser limplmentation de
lalgorithme F5 de la librairie CoCoA. Lordre spcifi nest alors pas utilis,
les polynmes tant homogniss.
On tape :
gbasis([x1+x2+x3,x1*x2+x1*x3+x2*x3,x1*x2*x3-1],
[x1,x2,x3],tdeg,with_cocoa=false)
On obtient
[x3^3-1,-x2^2-x2*x3-x3^2,x1+x2+x3]
6.29.2
375
La constante multiplicative peut tre dterminne en regardant comment le coefficient constant est transform. Dans lexemple, le terme constant -1 est transform
en le terme constant -2, donc le coefficient multiplicatif est 1/2.
On peut donner des arguments supplmentaires greduce comme pour gbasis
(plex(par dfaut),tdeg,plex...cf. 6.29.1), cest dailleurs ncessaire si on a calcul une base de Grbner avec un ordre diffrent de celui par dfaut, dans ce cas
greduce doit utiliser le mme ordre.
On tape :
greduce(x1^2*x3^2,[x3^3-1,-x2^2-x2*x3-x3^2,x1+x2+x3],
[x1,x2,x3],tdeg)
On obtient
x2
6.29.3
Test dappartenance dun polynme ou dune liste de polynmes un idal donn par une base de Groebner : in_ideal
in_ideal a trois (ou quatre) arguments : un polynme ou dune liste de polynmes, une liste donnant une base de Groebner, la liste des variables des polynmes.
On peut donner des arguments supplmentaires in_ideal comme pour gbasis
(plex(par dfaut),tdeg,plex...cf. 6.29.1), cest dailleurs ncessaire si on a calcul une base de Grbner avec un ordre diffrent de celui par dfaut (qui est lordre
lexicographique pur plex), dans ce cas in_ideal doit utiliser le mme ordre.
in_ideal teste si le polynme ou les polynmes du 1ier argument sont dans
lidal engendr par la base de Groebner,par rapport une liste de variables et renvoie vrai ou faux ou une liste compose de vrai ou de faux.
On tape :
in_ideal((x+y)^2,[y^2,x^2+2*x*y],[x,y])
On obtient
[vrai]
On tape :
in_ideal([(x+y)^2,x+y],[y^2,x^2+2*x*y],[x,y])
On obtient
[vrai,faux]
On tape :
in_ideal(x+y,[y^2,x^2+2*x*y],[x,y])
On obtient
[faux]
On tape :
376
|gbasis([x1+x2+x3,x1*x2+x1*x3+x2*x3,x1*x2*x3-1],|
[x1,x2,x3],tdeg)
in_ideal([(x1+x2+x3)^3,x1+x2+x3],[x1+x2+x3,-x2^2-x2*x3-x3^2,x3^3-1],
[x1,x2,x3],tdeg)
On obtient
[vrai,vrai]
6.29.4
6.30
6.30.1
Numrateur : getNum
377
6.30.2
6.30.3
Dnominateur : getDenom
378
6.30.4
6.30.5
f2nd (ou fxnd) a comme argument une fraction rationnelle et renvoie la liste
forme par le numrateur et le dnominateur de cette fraction simplifie (voir aussi
6.9.5).
On tape :
f2nd((x^2-1)/(x-1))
On obtient :
[x+1,1]
On tape :
f2nd((x^2+2*x+1)/(x^2-1))
On obtient :
[x+1,x-1]
6.30.6
Simplifier : simp2
simp2 a comme paramtre deux polynmes (ou deux entiers voir 6.9.6). Ces deux
polynmes sont considrs comme reprsentant une fraction rationnelle.
simp2 renvoie la fraction rationnelle simplifie sous la forme dune liste de deux
polynmes.
On tape :
simp2(x^3-1,x^2-1)
On obtient :
[x^2+x+1,x+1]
6.30.7
379
6.30.8
6.30.9
380
6.30.10
6.31
6.31.1
381
[[i[-1.0000000000036,-0.99999999999633],1],
[i[0.49999999999909,0.50000000000091] i[0.86602540378354,0.86602540378536]*i,1],[i[0.49999999999909,0.50000000000091]
+i[0.86602540378354,0.86602540378536]*i,1]]
Donc pour x3 + 1 :
-1 est une racine de multiplicit 1,
1/2i*b est une racine de multiplicit 1 avec 7/8 b 13/16,
1/2i*c est racine de multiplicit1 avec 13/1 c 7/8.
On tape pour avoir les racines de x3 + 1 dans le rectangle de sommets opposs
1, 1 + 2 i :
complexroot(x^3+1,0.1,-1,1+2*i)
On obtient :
[[i[-1.0000000000036,-0.99999999999633],1],
[i[0.49999999999909,0.50000000000091]
+i[0.86602540378354,0.86602540378536]*i,1]]
On tape pour avoir les racines de x3 + 1 dans le rectangle de sommets opposs
0, 1 + 2 i :
complexroot(x^3+1,0.1,0,1+2*i)
On obtient :
[[i[0.49999999999909,0.50000000000091]
+i[0.86602540378354,0.86602540378536]*i,1]]
6.31.2
realroot a 1 ou 4 arguments : un polynme et un nombre rel l et ventuellement deux rels a, b et cherche les racines relles du polynme en utilisant lalgorithme de Vincent-Akritas-Strzebonski (VAS).
On peut aussi utiliser un argument supplmentaire pour dire que lalgorithme utilise les suites de Sturm : on met alors sturm comme premier argument. Mais les
rsultats seront moins prcis.
realroot(P,l,a,b) et realroot(sturm,P,l,a,b) renvoient la liste
des intervalles de longueur <=l o se trouvent les racines relles de P situes
dans a..b avec leur multiplicit. realroot(P,l,a,b) utilise lalgorithme de
Vincent-Akritas-Strzebonski (VAS) alors que realroot(sturm,P,l,a,b)
utilise les suites de Sturm qui sont moins efficaces.
Si realroot a 1 argument (resp 2 arguments), realroot(P) (resp realroot(sturm,P))
renvoie la liste des intervalles o se trouvent les racines relles de P avec leur
multiplicit en utilisant lalgorithme de Vincent-Akritas-Strzebonski (VAS)
(resp en utilisant les suites de Sturm). Lalgorithme sarrte ds quil a trouv
un intervalle qui contient une racine.
On tape :
382
realroot(x^3-7*x+7)
On obtient :
[[[-4,0],1],[[1,3/2],1],[[3/2,2],1]]
Ce qui veut dire quil y a une racine dans lintervalle [-4,0] qui est de multiplicit 1, une racine dans lintervalle [1,3/2] qui est de multiplicit 1 et une
racine dans lintervalle [3/2,2] qui est de multiplicit 1.
On tape :
realroot(x^5+2*x^4-6*x^3-7*x^2+7*x+7)
On obtient :
[[[-5,-1],1],[-1,2],[[1,3/2],1],[[3/2,2],1]]
Ce qui veut dire que -1 est une racine de multiplicit 2, les 3 autres racines
sont de multiplicit 1 et se trouve dans les intervalles [-5,-1],[1,3/2],[3/2,2].
On tape :
realroot(125*x^3-700*x^2+1225*x-686)
On obtient :
[[[1,2],2],[[2,4],1]]
Ce qui veut dire quil y a une racine de multiplicit 2 dans lintervalle [1,2]
et une racine de multiplicit 1 dans lintervalle [2,4].
Si realroot a 2 arguments (resp 3 arguments), realroot(P,l) (resp
realroot(sturm,P,l)) renvoie la liste des vecteurs de coordonnes la
valeur des racines relles et exactes du polynme et leur multiplicit ou des
vecteurs de coordonnes un intervalle contenant une racine relle du polynme et la multiplicit de cette racine.
Si lintervalle renvoy est [a1 , a2 ] on a |a1 a2 | < l et la racine x1 vrifie
a1 x1 a2 . On tape :
realroot(x^5+2*x^4-6*x^3-7*x^2+7*x+7,1e-5)
On obtient :
[[[-1598513/524288,-1598509/524288],1],[-1,2],
[[2845609/2097152,2845625/2097152],1],
[[3548417/2097152,3548433/2097152],1]]
ce qui donne en valeurs approches :
[[[-3.04892158508,-3.04891395569],1.0],[-1.0,2.0],
[[1.35689210892,1.35689973831],1.0],
[[1.6920170784,1.69202470779],1.0]] On tape :
realroot(sturm,x^5+2*x^4-6*x^3-7*x^2+7*x+7,1e-5)
On obtient :
[[[-99907/32768,-399627/131072],1],
[[177851/131072,44463/32768],1],
[[13861/8192,221777/131072],1],[-1,2]]
ce qui donne en valeurs approches :
[[[-3.04891967773,-3.04891204834],1.0],
[[1.35689544678,1.35690307617],1.0],
[[1.69201660156,1.69202423096],1.0],[-1.0,2.0]]
On tape :
realroot(x^3-7*x+7,1e-5)
On obtient :
[[[-1598513/524288,-1598509/524288],1], [[2845609/2097152,2845625/
[[3548417/2097152,3548433/2097152],1]]
383
6.31.3
VAS(P) renvoie une liste dintervalles disolation des racines relles deP par
lalgorithme de Vincent-Akritas-Strzebonski. Cela ne fait que calculer des intervalles disolation des racines.
On tape :
VAS(x^3-7*x+7)
On obtient :
[[-4,0],[1,3/2],[3/2,2]]
On tape :
384
VAS(x^5+2*x^4-6*x^3-7*x^2+7*x+7)
On obtient :
[[-5,-1],-1,[1,3/2],[3/2,2]]
On tape :
VAS(x^3-x^2-2*x+2)
On obtient :
[[-3,0],1,[1,3]]
6.31.4
6.31.5
6.31.6
385
6.31.7
386
6.31.8
6.32
6.32.1
387
x5 2.x4 + x3
:
x2
froot((x^3-2*x^2+1)/(x-2))
On obtient :
[1,1,(1+sqrt(5))/2,1,(1-sqrt(5))/2,1,2,-1]
Remarque : pour avoir les racines et les ples complexes il faut avoir coch Complexe
dans la configuration du cas (bouton donnant la ligne dtat).
On tape :
froot((x^2+1)/(x-2))
On obtient :
[-i,1,i,1,2,-1]
6.32.2
6.33
On peut faire des calculs modulo p cest dire dans Z/pZ ou dans Z/pZ[x] et
la faon de sy prendre dpends de la syntaxe choisie :
En mode Xcas, les nombres n de Z/pZ sont nots n% p.
Exemples de notation
un entier n de Z/13Z
n:=12% 13.
un vecteur V de coordonnes dans Z/13Z
V:=[1,2,3]% 13 ou V:=[1% 13,2% 13,3% 13].
une matrice A de coefficients dans Z/13Z
A:=[[1,2,3],[2,3,4]]% 13 ou
A:=[[1% 13,2% 13,3% 13],[2% 13,3% 13,4% 13]].
un polynme A de Z/13Z[x] en reprsentation symbolique
A:=(2*x^2+3*x-1)%13 ou
A:=2%13*x^2+3%13*x-1%13.
388
6.33.1
6.33.2
Pour raliser une addition dans Z/pZ, on utilise le + habituel et, pour les polynmes de Z/pZ[x], on utilise le + habituel et la commande normal pour simplifier.
Pour les entiers dans Z/pZ, on tape :
3% 13+10% 13
On obtient :
0%13
Pour les polynmes coefficients dans Z/pZ, on tape :
normal(11% 13*x+5% 13+8% 13*x+6% 13)
ou encore
normal((11*x+5 )% 13+(8*x+6)% 13)
On obtient :
(6%13)*x+-2% 13
6.33.3
389
Pour raliser une soustraction dans Z/pZ, on utilise le - habituel et, pour les
polynmes de Z/pZ[x], on utilise le - habituel et la commande normal pour
simplifier.
Pour les entiers dans Z/pZ, on tape :
31% 13-10% 13
On obtient :
-5% 13
Pour les polynmes coefficients dans Z/pZ, on tape :
normal(11% 13*x+5% 13-8% 13*x+6% 13)
ou encore
normal((11*x+5)% 13-(8*x+6)% 13)
On obtient :
(3% 13)*x+-1% 13
6.33.4
Pour raliser une multiplication dans Z/pZ, on utilise le * habituel et, pour les
polynmes de Z/pZ[x], on utilise le * habituel puis la commande normal pour
simplifier.
Pour les entiers dans Z/pZ, on tape :
31% 13*10% 13
On obtient :
-2% 13
Pour les polynmes coefficients dans Z/pZ, on tape :
normal((11% 13*x+5% 13)*(8% 13*x+6% 13))
ou encore on tape :
normal((11*x+5)% 13*(8*x+6 )% 13)
On obtient :
(-3% 13)*x^2+(2% 13)*x+4% 13
390
6.33.5
Quotient : quo
6.33.6
Remainder : rem
6.33.7
391
6.33.8
/ divise deux entiers dans Z/pZ, ou divise deux polynmes A et B dans Z/pZ[x].
A
simplifie dans Z/pZ[x].
Pour les polynmes, le rsultat est la fraction rationnelle B
Pour les entiers dans Z/pZ, on tape :
5% 13/2% 13
On obtient :
-4% 13
puisque 2 est inversible dans Z/13Z.
Pour les polynmes coefficients dans Z/pZ.
On tape :
(2*x^2+5)% 13/(5*x^2+2*x-3)% 13
On obtient :
((6% 13)*x+1% 13)/((2% 13)*x+2% 13)
392
6.33.9
6.33.10
rem((x+1)^17,x^4+x+1)
393
qui renvoie :
29144*x^3+36519*x^2+12270*x-4185 et
(29144*x^3+36519*x^2+12270*x-4185)% 5 qui renvoie :
(-1 % 5)*x^3+(-1 % 5)*x^2
et
((-1 % 5)*x^3+(-1 % 5)*x^2)% 0
qui renvoie :
-x^3-x^2
Remarque (cf section 6.33.9)
Si on peut calculer une puissance dans Z/pZ on tape par exemple :
:
(5% 13)^21)
On obtient :
5% 13
On tape :
(5% 8)^21)
On obtient :
-3% 8
6.33.11
6.33.12
fracmod (ou iratrecon pour compatibilit Maple) a deux arguments, un entier n (ou une expression entire) et un nombre entier p.
fracmod renvoie une fraction a/b vrifiant :
p
p
p
<a
, 0b<
, n b = a (mod p)
2
2
2
En dautres termes n = a/b (mod p).
On tape :
fracmod(3,13)
394
On obtient :
-1/4
En effet on a : -1/4 mod 13 renvoie 3 % 13 i.e.
3 4 = 12 = 1 (mod 13) donc 3% 13 = 1/4% 13. On tape :
fracmod(13,121)
On obtient :
-4/9
En effet on a : -4/9 mod 121 renvoie 13 % 121 i.e.
: 13 9 = 117 = 4 (mod 121) donc 13% 121 = 4/9% 121.
6.33.13
6.33.14
6.33.15
395
6.33.16
inverse (ou inv) a comme argument une matrice A coefficients dans Z/pZ.
inverse (ou inv) renvoie, linverse de la matrice A dans Z/pZ.
On tape :
inverse([[1,2,9]% 13,[3,10,0]% 13,[3,11,1]% 13])
Ou on tape :
inv([[1,2,9]% 13,[3,10,0]% 13,[3,11,1]% 13])
Ou on tape :
inverse([[1,2,9],[3,10,0],[3,11,1]]% 13)
Ou on tape :
inv([[1,2,9],[3,10,0],[3,11,1]]% 13)
On obtient :
[[2% 13,-4% 13,-5% 13],[2% 13,0% 13,-5% 13], [-2%
13,-1% 13,6% 13]]
cest linverse de la matrice A = [[1, 2, 9], [3, 10, 0], [3, 11, 1]] dans Z/13Z.
6.33.17
396
Ou on tape :
rref([[1, 2, 9],[3,10,0]])%13
On obtient :
[[1% 13,0% 13,3% 13],[0% 13,1% 13,3% 13]]
ce qui veut dire que x=3% 13 et y=3% 13.
6.33.18
397
398
On obtient :
G(1)
Les lments de GF(2,2) sont donc : 0,1,w,w^2=w+1.
On peut enfin indiquer quel polynme irrductible on souhaite utiliser, en lindiquant en 2-ime paramtre (au lieu de n), par exemple :
G:=GF(2,w^8+w^6+w^3+w^2+1,[w,G])
Si on donne un polynme irrductible non primitif, Xcas lindique et propose un
remplacement par un polynme primitif, par exemple :
G:=GF(2,w^8+w^7+w^5+w+1,[w,G])
On obtient :
G:=GF(2,w^8-w^6-w^3-w^2-1,[w,G],undef)
6.33.19
6.34
6.34.1
399
On obtient :
quo((x^3+x^2+1)% 13,(2*x^2+4)% 13)
puis en utilisant eval(ans()), on obtient :
(-6% 13)*x+-6% 13
Attention Quo est surtout utile en mode Maple.
On tape, en mode Maple :
Quo(x^3+x^2+1,2*x^2+4) mod 13
On obtient :
(-6)*x-6
On tape, en mode Maple :
Quo(x^2+2*x,x^2+6*x+5) mod 5
On obtient :
1
6.34.2
400
6.34.3
6.34.4
6.34.5
401
6.34.6
402
On obtient :
inverse([[1% 13,2% 13,9% 13],[3% 13,10% 13,0% 13], [3%
13,11% 13,1% 13]])
puis :
[[2% 13,-4% 13,-5% 13],[2% 13,0% 13,-5% 13], [-2%
13,-1% 13,6% 13]]
cest linverse de la matrice A = [[1, 2, 9], [3, 10, 0], [3, 11, 1]] dans Z/13Z.
Attention en mode Maple on tape :
Inverse([[1,2,9],[3,10,0],[3,11,1]]) mod 13
On obtient :
[[2,-4,-5],[2,0,-5],[-2,-1,6]]
6.34.7
Rref renvoie rref sans lvaluer. Ensuite, rref rsout, dans Z/pZ, un systme
dquations linaires de la forme : Ax = B (voir aussi 6.55.3).
Rsoudre dans Z/13Z
x + 2y = 9
3 x + 10 y = 0
On tape :
Rref([[1,2,9] mod 13,[3,10,0] mod 13])
Ou on tape :
Rref([[1,2,9],[3,10,0]] mod 13)
Ou on tape :
Rref([[1,2,9]% 13,[3,10,0]% 13])
Ou on tape :
Rref([[1,2,9],[3,10,0]]% 13)
On obtient :
rref([[1% 13, 2% 13, 9% 13],[3% 13,10% 13,0% 13]])
puis :
[[1% 13,0% 13,3% 13],[0% 13,1% 13,3% 13]]
ce qui veut dire que x=3% 13 et y=3% 13.
Attention en mode Maple on tape :
Rref([[1,2,9],[3,10,0],[3,11,1]]) mod 13
On obtient :
[[1,0,0],[0,1,0],[0,0,1]]
6.35
6.35.1
403
6.35.2
404
6.35.3
405
On obtient :
1/4+(-(4*sqrt(3)))/4*(x-pi/6)+(4*3-4)/4*(x-pi/6)^2+
32*sqrt(3)/3/4*(x-pi/6)^3+(-16*3+16)/3/4*(x-pi/6)^4+
(x-pi/6)^5*order_size(x-pi/6)
dveloppement au voisinage de x=+ ou x=-
Exemple 1 :
Donner un dveloppement de arctan(x) lordre 5 au voisinage de x=+
1
en prenant comme infiniment petit h = .
x
On tape :
series(atan(x),x=+infinity,5)
On obtient :
pi/2-1/x+1/3*(1/x)^3-1/5*(1/x)^5+
(1/x)^6*order_size(1/x)
Donner un dveloppement de arctan(x) lordre 5 au voisinage de x=-
1
en prenant comme infiniment petit h = .
x
On tape :
series(atan(x),x=-infinity,5)
On obtient :
-pi/2-1/x-1/3*(-1/x)^3+1/5*(-1/x)^5+
(-1/x)^6*order_size(-1/x)
Exemple 2 :
1
Donner un dveloppement de (2x 1)e x1 lordre 2 au voisinage de
x=+ en prenant comme infiniment petit h = x1 .
On tape :
series((2*x-1)*exp(1/(x-1)),x=+infinity,3)
On obtient seulement lordre 1 :
2*x+1+2/x+(1/x)^2*order_size(1/x)
On tape pour avoir le dveloppement lordre 2 en 1/x :
series((2*x-1)*exp(1/(x-1)),x=+infinity,4)
On obtient :
2*x+1+2/x+17/6*(1/x)^2+(1/x)^3*order_size(1/x)
Exemple 3 :
1
Donner un dveloppement de (2x 1)e x1 ) lordre 2 au voisinage de
x=- en prenant comme infiniment petit h = x1 .
On tape :
series((2*x-1)*exp(1/(x-1)),x=-infinity,4)
On obtient :
-2*(-x)+1-2*(-1/x)+17/6*(-1/x)^2+
(-1/x)^3*order_size(-1/x)
dveloppement unidirectionnel
Il faut utiliser un paramtre supplmentaire pour indiquer la direction :
1 pour faire un dveloppement au voisinage de x = a avec x > a,
-1 pour faire un dveloppement au voisinage de x = a avec x < a,
0 pour faire un dveloppement au voisinage de x = a avec x 6= a.
Exemple
406
lordre 2, au voisinage de x = 0+ .
Donner un dveloppement de (1+x)
x3
On tape :
series((1+x)^(1/x)/x^3,x=0,2,1)
On obtient :
exp(1)/x^3+(-(exp(1)))/2/x^2+1/x*order_size(x)
6.35.4
6.35.5
407
On obtient :
Searching int of 1/(2 t 1) where t is on the unit circle, using residues
(2*pi)/2
On tape :
int(exp(2*i*t)/(2*exp(i*t)-1))^2,t=0..2*pi)
On obtient :
Searching int of t/(4 t2 4 t + 1) where t is on the unit circle, using residues
(2*pi)/4
6.35.6
pade a 4 arguments
une expression,
le nom de la variable utilise,
un entier n ou un polynme N ,
un entier p.
pade renvoie une fraction rationnelle P/Q (avec le degr de P < p) qui a, au
voisinage de 0, le mme dveloppement de Taylor lordre n que lexpression, ou
qui est gal lexpression modulo xn+1 (resp modulo N ).
On tape :
pade(exp(x),x,5,3)
Ou on tape :
pade(exp(x),x,x^6,3)
On obtient :
(3*x^2+24*x+60)/(-x^3+9*x^2-36*x+60)
On vrifie en tapant :
taylor((3*x^2+24*x+60)/(-x^3+9*x^2-36*x+60))
On obtient :
1+x+1/2*x^2+1/6*x^3+1/24*x^4+1/120*x^5+x^6*order_size(x)
On reconnait le dveloppement de Taylor lordre 5 de exp(x) au voisinage de
0.
On tape :
pade((x^15+x+1)/(x^12+1),x,12,3)
Ou on tape :
pade((x^15+x+1)/(x^12+1),x,x^13,3)
On obtient :
408
On tape :
pade((x^15+x+1)/(x^12+1),x,14,4)
Ou on tape :
pade((x^15+x+1)/(x^12+1),x,x^15,4)
On obtient :
(-2*x^3-1)/(-x^11+x^10-x^9+x^8-x^7+x^6-x^5+x^4x^3-x^2+x-1)
On vrifie en tapant :
series(ans(),x=0,15)
On obtient :
1+x-x^12-x^13+2x^15+x^16*order_size(x)
puis en tapant :
series((x^15+x+1)/(x^12+1),x=0,15)
On obtient :
1+x-x^12-x^13+x^15+x^16*order_size(x)
Les deux expressions ont mme dveloppement de Taylor lordre 14 au voisinage
de 0.
6.36
6.36.1
6.36.2
409
410
6.36.3
6.36.4
6.37
Les intervalles
6.37.1
Dfinition : i[]
411
Un intervalle est un ensemble de 2 nombres flottants de n 15 chiffres significatifs spars par une virgule et parenthss par i[].
On utilise le mot reserv i[]), on crit pour dsigner lintervalle [1, 13/11] :
i[1,13/11].
Lintervalle vide scrira i[]
Par exemple, on tape :
i[1,13/11]
On obtient :
i[1.0000000000000,1.1818181818182]
Remarque Si a>b alors i[a,b] renvoie
i[evalf(b,15)-epsilon,evalf(a,15)+epsilon] avec epsilon Par
exemple, on tape :
i[pi,sqrt(3)]
On obtient :
i[1.7320508075689,3.1415926535898]
Autre notation On peut aussi dsigner un intervalle par un nombre dcimal a
suivi dun point dinterrogation. Si la partie dcimale de a contient n chiffres ,
lintervalle a pour milieu a et pour longueur 2 10n Par exemple, on tape :
0.123?
On obtient :
i[0.122,0.123]
On tape : 789.123456?
On obtient :
i[0.789123455e3,0.789123457e3]
Attention
On tape :
a:=i[1,13/11]
On obtient :
i[1.0000000000000,1.1818181818182]
b:=i[1,13/11]
On obtient :
i[1.0000000000000,1.1818181818182]
a==b
412
On obtient :
faux
En fait, a ou b reprsente un nombre dcimal entre 1 et 1.1818181818182 car
lintervalle sert donner une approximation du nombre a ou b i.e a et b sont dans
le mme intervalle.
On tape :
b:=i[pi,pi+10^-5]
On obtient :
i[3.1415926535898,3.1416026535898]
En fait b reprsentent un nombre dcimal entre 3.1415926535898 et 3.1416026535898.
6.37.2
Somme de 2 intervalles
6.37.3
Loppos dun intervalle est un intervalle qui a pour borne infrieure (resp suprieure) loppos de la borne suprieure du (resp infrieure).
On tape :
-i[2,3]
On obtient :
i[-3.0000000000000,-2.0000000000000]
6.37.4
Produit de 2 intervalles
6.37.5
413
Linverse dun intervalle est un intervalle qui a pour borne infrieure (resp suprieure) linverse de la borne suprieure du (resp infrieure).
On tape :
1/i[2,3]
On obtient :
i[0.33333333333333,0.50000000000000]
6.37.6
On tape :
left(i[2,5])
On obtient :
2.0000000000000
On tape :
right(i[2,5])
On obtient :
5.0000000000000
6.37.7
6.37.8
414
6.37.9
6.37.10
6.37.11
415
6.38
Les squences
6.38.1
Dfinition : seq[] ()
Une squence est une suite dlments spars par une virgule et parenthss
par ( ) ou on utilise le mot reserv seq[...] donc on crit :
(1,2,3,4) ou
seq[1,2,3,4]
On tape :
A:=(1,2,3,4) ou A:=seq[1,2,3,4]
B:=(5,6,3,4) ou B:=seq[5,6,3,4]
Attention !
lordre est important : si B:=(5,6,3,4) et C:=(3,4,5,6) la rponse de
B==C est 0.
Attention ! (voir 6.38.5)
seq([0,2])=(0,0) et seq([0,1,1,5])=[0,0,0,0,0] alors que
seq[0,2]=(0,2) et seq[0,1,1,5]=(0,1,1,5)
6.38.2
La concatnation de deux squences est simple puisquil suffit dcrire les squences en les sparant par une virgule (,).
On tape :
A:=(1,2,3,4)
B:=(5,6,3,4)
A,B
On obtient :
(1,2,3,4,5,6,3,4)
6.38.3
Pour accder un lment dune squence, on tape lindice de cet lment entre
des crochets pour des indices qui commencent 0
ou bien
on tape son indice entre des doubles crochets pour des indices qui commencent
1.
On tape :
(0,1,2)[1]
On obtient car lindice du premier lment est 0 :
1
416
Ou bien
On tape :
(0,1,2)[[1]]
On obtient car lindice du premier lment est 1 :
0
6.38.4
Pour extraire une sous-squence dune squence, on tape entre des crochets
lindice de dbut, puis .. et lindice de fin de la sous-squence.
On tape :
(0,1,2,3,4)[1..3]
On obtient :
(1,2,3)
6.38.5
seq peut renvoyer une squence (avec la mme syntaxe que Maple) ou une liste
(avec la mme syntaxe que TI) selon la forme de ses arguments qui sont : une
expression dpendant dun paramtre (par exemple j) et des paramtres dcrivant
la variation de j.
$ renvoie une squence et cest la version infixe de seq lorsque seq a deux
arguments : une expression dpendant dun paramtre (par exemple j) et (j =
a..b) o a et b sont des nombres rels (par exemple j^2$ (j=-1..3)), ou une
expression constante et un nombre n (par exemple 4$3).
seq a deux, trois, quatre ou cinq arguments car on peut exprimer la variation de j
de a b laide dun argument (j = a..b) ou de deux arguments (j, a..b) (syntaxe
Maple o il ny a pas la possibilit de mettre un paramtre de saut) ou encore
laide de trois arguments (j, a, b) ou de quatre arguments (j, a, b, p) (syntaxe TI
avec la possibilit de mettre p comme paramtre de saut).
Syntaxe Maple
seq a deux arguments une expression dpendant dun paramtre (par exemple
j) et j = a..b o a et b sont des nombres rels (ou une expression constante
et un nombre n). On peut ajouter pour seq un troisime argument, le pas (1
par dfaut).
$ a les mme arguments mais est une fonction infixe et il faut parenthser
les arguments.
seq (ou $) dfinit la squence obtenue en remplacant dans lexpression j
par a, a + 1..b si b > a et par a, a 1..b si b < a (ou seq renvoie la squence forme par n fois la constante).
-seq a trois arguments une expression dpendant dun paramtre (par exemple
j), le nom du paramtre (par exemple j) et a..b o a et b sont des nombres
rels, ou
seq dfinit la squence obtenue en remplacant dans lexpression j par a,
a + 1..b si b > a et par a, a 1..b si b < a le pas est donc soit gal 1, soit
417
gal -1.
Syntaxe TI
-seq a quatre arguments une expression dpendant dun paramtre (par
exemple j), le nom du paramtre (par exemple j), puis a et b o a et b sont
des nombres rels. seq dfinit la liste obtenue en remplaant dans lexpression j par a, a + 1..b si b > a ou par a, a 1..b si b < a).
-seq a cinq arguments une expression dpendant dun paramtre (par exemple
j), le nom du paramtre (par exemple j), puis a et b (o a et b sont des
nombres rels) et p le pas (o p est un nombre rel positif ou ngatif).
seq dfinit la liste obtenue en remplaant dans lexpression j par a, a +
p..a+k p (a+k p b < a+(k +1)p ou a+k p b > a+(k +1)p).
Par dfaut, on a p=1 si b > a et p=-1 si b < a. Si p na pas le bon signe, ce
signe est rectifi par le logiciel !
Remarque :
Dans la syntaxe Maple, seq renvoie une squence et il ny a pas la possibilit de
mettre un paramtre de saut, contrairement la syntaxe TI o seq renvoie une
liste avec la possibilit de mettre un paramtre de saut.
On tape pour avoir une squence dlments identiques :
seq(t,4)
Ou on tape
seq(t,k=1..4)
Ou on tape
t$4
On obtient :
(t,t,t,t)
On tape pour avoir une squence :
seq(j^3,j=1..4)
Ou on tape
(j^3)$(j=1..4)
Ou on tape :
seq(j^3,j,1..4)
On obtient :
(1,4,9,16)
Ou on tape pour avoir une liste :
seq(j^3,j,1,4)
418
On obtient :
[1,4,9,16]
On tape :
seq(j^3,j,0,5,2)
On obtient :
[0,8,64]
On tape :
seq(j^3,j,5,0,-2)
ou
seq(j^3,j,5,0,2)
On obtient :
[125,27,1]
On tape :
seq(j^3,j,1,3,0.5)
On obtient :
[1,3.375,8,15.625,27]
On tape :
seq(j^3,j,1,3,1/2)
On obtient :
[1,27/8,8,125/8,27]
Exemples dutilisation
On tape pour avoir la drive troisime de ln(t) :
diff(log(t),t$3)
On obtient :
-((-(2*t))/t^4)
On tape :
l:=[[2,3],[5,1],[7,2]]
seq((l[k][0])$(l[k][1]),k=0 .. size(l)-1)
On obtient :
2,2,2,seq[5],7,7
2,2,2,5,7,7
On tape pour transformer une chane en la liste de ces caractres :
f(chn):={ local l; l:=size(chn); return
seq(chn[j],j,0,l-1); }
puis,
f("abracadabra")
419
On obtient :
["a","b","r","a","c","a","d","a","b","r","a"]
On tape pour transformer une chane en la squence de ces caractres :
f(chn):={ local l; l:=size(chn); return
seq(chn[j],j,0..l-1); }
puis,
f("abracadabra")
On obtient :
("a","b","r","a","c","a","d","a","b","r","a"]))
6.38.6
Pour transformer une squence en liste il suffit dentourer la squence par des
crochets ([]) ou on utilise la fonction nop.
On tape :
[seq(j^3,j=1..4)]
ce qui quivaut :
seq(j^3,j,1,4)
ou :
[(j^3)$(j=1..4)]
On obtient :
[1,4,9,16]
On tape :
nop(1,4,9,16)
On obtient :
[1,4,9,16]
6.38.7
420
Mais si on tape :
[1,2,3,4,5,6]+[4,3,5]
On obtient :
[5,5,8,4,5,6]
bf Attention
Quand loprateur + est prfix il doit tre quot cest dire crit +.
6.39
Les ensembles
6.39.1
Dfinition : set[]
6.39.2
Tester si 2 ensembles (ou listes) sont inclus(e) lun(e) dans lautre :is_included,
est_inclus
421
6.39.3
union renvoie lensemble qui est lunion de deux ensembles ou de deux listes.
union est un oprateur infix.
On tape :
set[1,2,3,4] union set[5,6,3,4]
Ou on tape :
% {1,2,3,4% } union % {5,6,3,4% }
On obtient :
[1,2,3,4,5,6]
On tape :
[1,2,3] union [2,5,6]
On obtient :
[1,2,3,5,6]
422
6.39.4
6.39.5
6.40
6.40.1
423
Une liste peut contenir des listes (cest le cas des matrices) et peut dsigner
un vecteur (liste des coordonnes) ou un polynme (liste des coefficients des puissances dcroissantes), alors que une squence est plate car on ne peut pas avoir un
lment dune squence qui soit une squence.
Lordre est important dans une liste alors que lordre na pas dimportance pour
un ensemble, il peut y avoir plusieurs fois le mme objet dans une liste alors que
chaque objet est unique dans un ensemble.
Dans les rponses de Xcas,
les coordonnes dun vecteur sont parenthses avec [ et ],
une matrice avec [ et ],
un polynme avec [] et [],
un ensemble avec [ et ].
Un vecteur peut donc tre reprsents par une liste contenant les composantes du
vecteur (on met les composantes du vecteur entre crochets).
Attention !
Pour accder un lment dune liste, on tape son indice entre des crochets pour
des indices qui commencent 0
ou bien
on tape son indice entre des doubles crochets pour des indices qui commencent
1.
Pour toutes les autres fonctions de Xcas (autres que laccs un lment), lindice
du premier lment est 0.
Exemple
On tape : L:=[2,5,1,3]
L[1]
On obtient :
5
On tape : L[[1]]
On obtient :
2
On tape : L:=[2,5,1,3]
L[1]:=4
L
On obtient :
[2,4,1,3]
On tape : L:=[2,5,1,3]
L[[1]]:=4
L
On obtient :
[4,5,1,3]
Pour dessiner ou dfinir un vecteur gomtrique voir 9.10.5 et 10.5.5.
6.40.2
424
6.40.3
Accs un lment
On utilise la fonction at pour accder un lment dune liste, ou on tape son
indice entre des crochets pour des indices qui commencent 0
ou bien
on tape son indice entre des doubles crochets ou entre des parenthses pour des
indices qui commencent 1.
Pour toutes les autres fonctions de Xcas (autres que laccs un lment), lindice
du premier lment est 0.
Exemples
Soit la liste : [0,1,2] et on veut dsigner llment 1.
On tape son indice 1 entre des crochets :
[0,1,2][1]
ou
at([0,1,2],1)
On obtient puisque les indices commencent 0 :
1
ou bien 0n tape son indice 2 entre des doubles crochets ou entre des parenthses :
[0,1,2][[2]]
ou
[0,1,2](2)
On obtient puisque avec cette notation, les indices commencent 1 :
1
Soit la matrice : A:=[[4,5],[2,6]] et on veut dsigner la ligne [4,5].
On tape son indice 0 entre des crochets, si on veut que les indices commencent
0:
A[0]
ou
at(A,0)
425
6.40.4
426
6.40.5
6.40.6
6.40.7
6.40.8
427
gauche([0,1,2,3,4,5,6,7,8],3)
Ou on tape :
left([0,1,2,3,4,5,6,7,8],3)
On obtient :
[0,1,2]
6.40.9
6.40.10
rotate a comme argument une liste et un nombre entier relatif (par dfaut n=-1).
rotate renvoie :
si n>0, la liste obtenue en permuttant les n premiers lments avec la fin de
la liste,
si n<0 en permuttant les -n derniers lments avec le dbut de la liste. Par
dfaut n=-1 et on met le dernier lment en premier.
On tape :
rotate([0,1,2,3,4])
On obtient :
[4,0,1,2,3]
On tape :
rotate([0,1,2,3,4],2)
On obtient :
[2,3,4,0,1]
On tape :
rotate([0,1,2,3,4],-2)
On obtient :
[3,4,0,1,2]
428
6.40.11
shift a comme argument une liste et un nombre entier relatif (par dfaut n=-1).
shift renvoie :
si n>0 la liste obtenue en remplaant les n premiers lments de la liste par
undef, puis en en permuttant ces n premiers lments avec la fin de la liste,
si n<0 en remplaant les -n derniers lments de la liste par undef, puis
en permuttant les -n derniers lments avec le dbut de la liste. Par dfaut
(n=-1) le premier lment vaut undef et il est suivi par la liste prive de
son dernier lment.
On tape :
shift([0,1,2,3,4])
On obtient :
[undef,0,1,2,3]
On tape :
shift([0,1,2,3,4],2)
On obtient :
[2,3,4,undef,undef]
On tape :
shift([0,1,2,3,4],-2)
On obtient :
[undef,undef,0,1,2]
6.40.12
subsop permet de modifier un lment dans une liste sans avoir la mettre dans
une variable.
Remarque Si le second argument est k=NULL, llment dindice k est enlev
de la liste.
On tape en mode Xcas (les indices commencent 0) :
subsop([0,1,2],1=5)
Ou on tape :
L:=[0,1,2];L[1]:=5
On obtient :
[0,5,2]
On tape en mode Xcas (les indices commencent 0)
subsop([0,1,2],1=NULL)
429
On obtient :
[0,2]
On tape en mode Mupad TI (les indices commencent 1) :
subsop([0,1,2],2=5)
Ou on tape :
L:=[0,1,2];L[2]:=5
On obtient :
[0,5,2]
Attention, en mode Maple les arguments sont permuts et les indices commencent
1.
On tape :
subsop(2=5,[0,1,2])
Ou on tape :
L:=[0,1,2];L[2]:=5
On obtient :
[0,5,2]
6.40.13
430
6.40.14
6.40.15
size ou nops ou length renvoie la longueur dune liste (ou dune chane).
On tape :
nops([3,4,2])
ou
size([3,4,2])
ou
length([3,4,2])
On obtient :
3
6.40.16
6.40.17
431
concat (ou augment) concatne deux listes, ou concatne une liste et un lment.
On tape :
concat([3,4,2],[1,2,4])
Ou on tape :
augment([3,4,2],[1,2,4])
On obtient :
[3,4,2,1,2,4]
On tape :
concat([3,4,2],5)
Ou on tape :
augment([3,4,2],5)
On obtient :
[3,4,2,5]
Attention
concat([[3,4,2]],[[1,2,4]])
On obtient :
[[3,4,2,1,2,4]]
6.40.18
432
6.40.19
6.40.20
Trier : sort
sort a comme argument une liste ou une expression ou une chaine de caractres.
Pour une liste, sort renvoie la liste trie selon lordre croissant.
On tape :
sort([3,4,2])
On obtient :
[2,3,4]
Remarque Si la liste est une matrice (resp une liste de chaines de caractres),
sort renvoie la matrice dont les lignes sont tries selon lordre croissant en
triant les lignes selon lordre [a0 , a1 , ..an ] < [b0 , b1 , ..bn ] si a0 < b0 ou si
il existe k n tel que a0 = b0 ,...ak1 < bk1 et ak < bk (resp la liste de
chaines de caractres tries par lordre lexicographique).
On tape :
sort([[3,4,2],[4,2,3],[2,3,4],[2,4,3]])
On obtient :
[[2,3,4],[2,4,3],[3,4,2],[4,2,3]]
Pour trier par ordre dcroissant il faut mettre en second argument une fonction de tri, par exemple on tape la fonction boolenne superoueg qui renvoie 1 si L1>=L2 et 0 sinon :
superoueg(L1,L2):={
local s,j;
s:=min(size(L1),size(L2))-1;
j:=0;
tantque L1[j]==L2[j] and j<s faire
j:=j+1;
ftantque;
//si L2[j]>L1[j] alors return 0 sinon return 1; fsi;
si [sort(L1[j],L2[j])]==[L1[j],L2[j]] alors
return 0
433
sinon
return 1;
fsi;
}:;
On a remplac L2[j]>L1[j] par [sort(L1[j],L2[j])]==[L1[j],L2[j]]
pour que superoueg soit aussi valable pour les chaines de caractres. On
tape :
sort([[3,4,2],[4,2,3],[2,3,4],[2,4,3]],superoueg)
ou on tape
sort([[3,4,2],[4,2,3],[2,3,4],[2,4,3]],(x,y)->superoueg(x,y))
On obtient :
[[2,3,4],[2,4,3],[3,4,2],[4,2,3]][[2,3,4],[2,4,3],[3,4,2],[4,2,3]]
On tape :
sort(["dac","bac","sac","asc","cab"])
On obtient :
["asc","bac","cab","dac","sac"]
On tape :
sort(["dac","bac","sac","asc","cab"],superoueg)
On obtient :
["sac","dac","cab","bac","asc"]
Pour une expression, sort trie et collecte les termes gaux dans les sommes
et produits.
On tape :
sort(exp(2*ln(x))+x*y-x+y*x+2*x)
On obtient :
2*x*y+exp(2*ln(x))+x
On tape :
simplifier(exp(2*ln(x))+x*y-x+y*x+2*x)
On obtient :
x^2+2*x*y+x
Remarque
sort accepte un 2-ime argument aprs une liste qui est la fonction de tri, par
exemple (x,y)->x>y pour avoir la liste trie selon lordre dcroissant.
Attention La fonction de tri f doit dfinir un ordre strict faible cest dire que
f (x, y) est un fonction renvoyant 0 (faux) ou 1 (vrai) qui est toujours dfinie
(f doit renvoyer 0 si 2 lments ne sont pas comparables) et doit vrifier :
f doit dfinir une relation transitive (si f (x, y) et f (y, z) sont vrais alors
f (x, z) est vrai)
on ne peut pas avoir f (x, y) et f (y, x) vrai en mme temps (antisymtrie
non rflexive)
f ne dfinit pas forcment une relation dordre total, on peut avoir f (x, y)
et f (y, x) simultanment faux. Si on dfinit la relation E par x E y est vrai
lorsque f (x, y) et f (y, x) sont simultanment faux alors E doit tre une
relation dquivalence.
Sinon lalgorithme employ risque de boucler.... Par exemple, on ne peut pas mettre
comme fonction de tri : (x,y)->x[1]>=y[1]. On tape :
434
On obtient :
[4,3,2]
Pour trier des listes de listes
sort trie les listes de listes par ordre croissant.
sort([[1,3],[2,4],[2,3],[1,4]])
On obtient :
[[1,3],[1,4],[2,3],[2,4]]
Pour un ordre diffrent, il faut mettre une fonction de tri comme 2ime argument.
Par exemple :
Si on veut trier par ordre dcroissant la premire colonne ou en cas dgalit par
ordre dcroissant la 2ime colonne (ordre lexicographique).
On tape :
sort([[1,3],[2,4],[2,3],[1,4]],(x,y)->when(x[0]==y[0],x[1]>y[1],x[0]>y
On obtient :
[[2,4],[2,3],[1,4],[1,3]]
Et si on veut trier par ordre dcroissant la 2ime colonne ou en cas dgalit par
ordre dcroissant la premire colonne.
On tape :
sort([[1,3],[2,4],[2,3],[1,4]],
(x,y)->when(x[1]==y[1],x[0]>y[0],x[1]>y[1]))
On obtient :
[[2,4],[1,4],[2,3],[1,3]]
Attention Dans lexemple prcdent,
on ne peut pas mettre comme fonction de tri (x,y)->x[1]>=y[1] car
lordre nest pas strict
on peut mettre comme fonction de tri f:=(x,y)->x[1]>y[1] bien que
lordre ne soit pas total.
Soient :
L1:=[[1,2],[2,3],[4,3]]
L2:=[[1,2],[4,3],[2,3]]
Dans ce cas sort(L1,(x,y)->x[1]>y[1]) et sort(L2,(x,y)->x[1]>y[1])
renvoient des rponses diffrentes parce que lordre nest pas total et que [2,3]
et [4,3] sont considrs comme quivalents.
6.40.21
435
Attention SortA et sorta ne sont pas des synonymes : SortA sutilise avec
la syntaxe TI i.e. sans avoir besoin de mettre des parenthses et modifie la valeur
de largument alors que sorta sutilise comme des fonctions normales de Xcas
(parenthses obligatoires et sans changer largument !).
SortA ou sorta a comme argument une liste, une squence ou une matrice.
SortA ou sorta renvoie la liste ou la squence trie selon lordre croissant.
Si largument est une matrice, SortA ou sorta trie la 1-ire ligne de la matrice
selon lordre croissant, et reporte les manuvres de tri de la 1-ire ligne sur les
autres lignes cest dire le tri conserve les colonnes de la matrice.
On tape :
sorta([3,4,2])
ou
SortA([3,4,2])
ou
SortA [3,4,2]
ou
SortA 3,4,2
On obtient :
[2,3,4]
On tape :
sorta([[3,4,2],[6,4,5]])
ou
SortA([[3,4,2],[6,4,5]])
ou
SortA [[3,4,2],[6,4,5]]
ou
SortA [3,4,2],[6,4,5]
On obtient :
[[2,3,4],[5,6,4]]
On tape :
A:=[[3,4,2],[6,4,5]]
SortA(A)
436
On obtient :
[[2,3,4],[5,6,4]]
et maintenant A vaut [[2,3,4],[5,6,4]] Mais, on tape :
A:=[[3,4,2],[6,4,5]]
sorta(A)
On obtient :
[[2,3,4],[5,6,4]]
et maintenant A vaut toujours [[3,4,2],[6,4,5]]
Attention La syntaxe sans parenthse peut vous jouer des tours !
Par exemple, on tape :
L1:=[1,3,2];L2:=[2,3,1];
SortA L1,SortA L2
On obtient la matrice ! : [[1,2,3],[3,2,1]]
qui est le rsultat de :
SortA(L1,SortA(L2))
6.40.22
Attention et sortd ne sont pas des synonymes : SortD sutilise avec la syntaxe
TI i.e. sans avoir besoin de mettre des parenthses et modifie la valeur de largument alors que sortd sutilise comme des fonctions normales de Xcas (parenthses obligatoires et sans changer largument !).
SortD ou sortd a comme argument une liste, une squence ou une matrice.
SortA ou sorta renvoie la liste ou la squence trie selon lordre dcroissant.
Si largument est une matrice, SortD ou sortd trie la 1-ire ligne de la matrice
selon lordre dcroissant, et reporte les manuvres de tri de la 1-ire ligne sur les
autres lignes cest dire le tri conserve les colonnes de la matrice.
On tape :
sortd([3,4,2])
ou
SortD([3,4,2])
ou
SortD [3,4,2]
ou
SortD 3,4,2
On obtient :
[4,3,2]
6.40.23
437
438
6.40.24
6.40.25
6.40.26
439
6.40.27
440
On obtient :
[[1,3],[2,1],[3,2],[10,1]]
On tape :
count((x)->x,[2,12,45,3,7,78])
Ou on tape :
count((x)->x,[[2,12,45],[3,7,78]])
On obtient :
147
car on a : 2+12+45+3+7+78=147.
On tape :
count((x)->x,[[2,12,45],[3,7,78]],row)
On obtient :
[59,88]
car on a : 2+12+45=59 et 3+7+78=88.
On tape :
count((x)->x,[[2,12,45],[3,7,78]],col)
On obtient :
[5,19,123]
car on a : 2+3=5,12+7=10,45+78=123.
On tape :
count((x)->x<12,[2,12,45,3,7,78])
On obtient :
3
On tape :
count((x)->x==12,[2,12,45,3,7,78])
Ou on tape :
count((x)->x==12,[[2,12,45],[3,7,78]])
On obtient :
1
On tape :
count((x)->x>12,[2,12,45,3,7,78])
441
On obtient :
2
On tape :
count(x->x^2,[3,5,1])
On obtient :
35
En effet on a : 32 + 52 + 11 = 35.
On tape :
count(id,[3,5,1])
On obtient :
9
En effet, id est la fonction identit et on a : 3+5+1=9.
On tape :
count(1,[3,5,1])
On obtient :
3
En effet, 1 est la fonction constante gale 1 et on a : 1+1+1=3.
6.40.28
count_eq a deux ou trois et paramtres : une nombre et une liste (ou une matrice)
et dans le cas o le deuxime paramtre est une matrice, un argument optionnel
row ou col.
count_eq renvoie le nombre dlments de la liste (ou de la matrice) qui sont
gaux au premier argument. Dans le cas o il y a un argument optionnel row
(resp col) count_eq agit sur chacune des lignes (resp colonnes) de la matrice
et renvoie alors une liste.
On tape :
count_eq(12,[2,12,45,3,7,78])
Ou on tape :
count_eq(12,[[2,12,45],[3,7,78]])
On obtient :
1
On tape :
count_eq(12,[[2,12,45],[3,7,78]],row)
442
On obtient :
[1,0]
On tape :
count_eq(12,[[2,12,45],[3,7,78]],col)
On obtient :
[0,1,0]
Remarque
Les deux paramtres de count_eq ne sont pas forcment numriques : count_eq(ab,[[-ab,1,ab
renvoie 4 si la variable ab nest pas affecte, mais renverra 6 si il y a 0 dans ab
count_eq("ab",["ab",1,"ab",1,"ab",-3]) renvoie 3. Attention ! ! !
si la variable ab nest pas affecte,
count_eq(ab+1-1,[[-ab,1,ab,1,ab,-3],[-ab,1,ab,1,ab,-3]])
renvoie 4,
mais count_eq(ab+1,[-ab,1,ab+1,1,1+ab,-3]) renvoie 1.
6.40.29
count_inf a deux ou trois paramtres : une nombre et une liste (ou une matrice)
et dans le cas o le deuxime paramtre est une matrice, un argument optionnel
row ou col.
count_inf renvoie le nombre dlments de la liste (ou de la matrice) qui sont
strictement infrieurs au premier argument. Dans le cas o il y a un argument optionnel row (resp col) count_inf agit sur chacune des lignes (resp colonnes)
de la matrice et renvoie alors une liste.
On tape :
count_inf(12,[2,12,45,3,7,78])
Ou on tape :
count_inf(12,[[2,12,45],[3,7,78]])
On obtient :
3
On tape :
count_inf(12,[[2,12,45],[3,7,78]],row)
On obtient :
[1,2]
On tape :
count_inf(12,[[2,12,45],[3,7,78]],col)
On obtient :
[2,1,0]
6.40.30
443
count_sup a deux paramtres : une nombre et une liste relle (ou une matrice
relle) et dans le cas o le deuxime paramtre est une matrice, un argument optionnel row ou col.
count_sup renvoie le nombre dlments de la liste (ou de la matrice) qui sont
strictement suprieurs au premier argument. Dans le cas o il y a un argument optionnel row (resp col) count_sup agit sur chacune des lignes (resp colonnes)
de la matrice et renvoie alors une liste.
On tape :
count_sup(12,[2,12,45,3,7,78])
Ou on tape :
count_sup(12,[[2,12,45],[3,7,78]])
On obtient :
2
On tape :
count_sup(12,[[2,12,45],[3,7,78]],row)
On obtient :
[1,1]
On tape :
count_sup(12,[[2,12,45],[3,7,78]],col)
On obtient :
[0,0,2]
6.40.31
sum ou add a comme paramtre l une liste (ou une squence) de nombres rels
ou de dcimaux.
sum ou add renvoie la somme des lments de l.
On tape :
sum(2,3,4,5,6)
On obtient :
20
444
6.40.32
cumSum a comme paramtre l une liste (ou une squence) de nombres rels ou de
dcimaux ou de chane de caractres.
cumSum renvoie la liste (ou la squence) de mme longueur que l avec comme
k-ime lment la somme (ou la concatnation) des lments l[0], .., l[k].
On tape :
cumSum(sqrt(2),3,4,5,6)
On obtient :
sqrt(2),3+sqrt(2),3+sqrt(2)+4,3+sqrt(2)+4+5,
3+sqrt(2)+4+5+6
On tape :
normal(cumSum(sqrt(2),3,4,5,6))
On obtient :
sqrt(2),sqrt(2)+3,sqrt(2)+7,sqrt(2)+12,sqrt(2)+18
On tape :
cumSum(1.2,3,4.5,6)
On obtient :
1.2,4.2,8.7,14.7
On tape :
cumSum([0,1,2,3,4])
On obtient :
[0,1,3,6,10]
On tape :
cumSum("a","b","c","d")
On obtient :
"a","ab","abc","abcd"
On tape :
cumSum("a","ab","abc","abcd")
On obtient :
"a","aab","aababc","aababcabcd"
6.40.33
445
446
6.40.34
447
map ou apply ou of sert appliquer une fonction aux lments dune liste. Mais
ces trois instructions ne sont pas des synonymes. On a :
of a 2 paramtres une fonction f et une expression E ou une liste L. of(f,E)
renvoie f(E) et of(f,L) renvoie f(L). En effet, of est la traduction interne des parenthses : f(x) est traduit en interne par of(f,x). On peut
donc utiliser directement f(x),
apply a 2 paramtres une fonction f et une liste L. apply(f,L) renvoie
[f(L[0]),f(L[1]),...f(L[size(L)-1])]. Attention
apply rpond [] si le deuxime lment nest pas une liste.
map a 2 paramtres une expression E ou une liste L et une fonction f.
map(E,f) renvoie f(E) et map(L,f) renvoie [f(L[0]),f(L[1]),...f(L[size(L)-1])].
Attention lordre des paramtres qui nest pas le mme pour map et pour
apply , cest pour des raisons de compatibilit ! ! !.
Lorsque la liste est une matrice et que la fonction doit sappliquer chaque
lment dune matrice il faut mettre matrix comme argument optionnel
map
On tape :
apply(x->x+1,[3,5,1])
ou
map([3,5,1],x->x+1)
cela ajoute 1 chaque lment de la liste et on obtient :
[4,6,2]
On tape
of(x->x+1,[3,5,1])
et puisque [3,5,1]+1=[3,5,2], on obtient :
[3,5,2]
Exemple avec une matrice
On tape :
apply(x->x+1,[[3,5,1],[3,5,1],[3,5,1]])
ou
map([[3,5,1],[3,5,1],[3,5,1]],x->x+1)
cela ajoute 1 chaque lment de la liste cest dire chaque ligne de la matrice
et comme [3,5,1]+1=[3,5,2], on obtient :
[[3,5,2],[3,5,2],[3,5,2]]
448
On tape :
of(x->x+1,[[3,5,1],[3,5,1],[3,5,1]])
cela ajoute 1 cest dire la matrice identit la matrice et on obtient :
[[4,5,1],[3,6,1],[3,5,2]]
On tape :
map([[3,5,1],[3,5,1],[3,5,1]],x->x+1,matrix)
cela ajoute 1 chaque lment de la matrice et on obtient :
[[4,6,2],[4,6,2],[4,6,2]]
Autres exemples On tape :
apply(x->x^2,[3,5,1])
ou
of(x->x^2,[3,5,1])
ou
map([3,5,1],x->x^2)
ou on dfinit la fonction h(x) = x2 en tapant :
h(x):=x^2
puis
apply(h,[3,5,1])
ou
of(h,[3,5,1])
ou
map([3,5,1],h)
On obtient :
[9,25,1]
On tape :
apply(h,[[3,5,1],[3,5,1],[3,5,1]])
ou
map([[3,5,1],[3,5,1],[3,5,1]],h)
ou
map([[3,5,1],[3,5,1],[3,5,1]],h,matrix)
449
6.40.35
450
Pour agir sur un monme de n variables, f doit tre une fonction de n + 1 variables, on considre que ces variables reprsentent le coefficient, lexposant de la
premire variable,...,lexposant de la n-ime variable et f transforme le coefficient
de ce monme.
Par exemple, si le monme est 5x2 y 3 , au format interne il scrit : % % % {5,[2,3]%
% % }
et si f est ddfinie par :
f(a,b,c):=a*(2*b+3*c)
alors
map(% % % {5,[2,3]% % % },f) renvoie le monme f (5, 2, 3)x2 y 3 = 65x2 y 3
crit au format interne, cest dire % % % {65,[2,3]% % % }
On tape :
map(% % % {5,[2,3]% % % },(a,b,c)->a*(2b+3c))
On obtient :
% % % {65,[2,3]% % % }
On tape :
map(% % % {1,[2,0]% % % }+% % % {2,[1,1]% % % }+% % % {1,[0,2]%
% % },(a,b,c)->a*(b+2c))
On obtient :
% % % {2,[2,0]% % % }+% % % {6,[1,1]% % % }+% % % {4,[0,2]%
% % } car si f est la fonction (a, b, c) > a (b + 2c) alors f (1, 2, 0) =
2, f (2, 1, 1) = 6, f (1, 0, 2) = 4
6.40.36
451
f:=(x,y)->[x^2+y^2,x+y]
puis,
zip(f,[4,2,1],[3,5,1])
On obtient :
[[25,7],[29,7],[2,2]]
6.40.37
6.40.38
makelist fabrique une liste laide dune fonction, en donnant les bornes de la
variable et le pas de cette variable qui par dfaut vaut 1 ou -1 selon que lordre des
bornes.
On tape :
makelist(x->x^2,3,5)
ou bien
makelist(x->x^2,3,5,1)
ou on dfinit la fonction h(x) = x2 en tapant : h(x):=x^2 puis
makelist(h,3,5,1)
On obtient :
[9,16,25]
On tape :
makelist(x->x^2,3,6,2)
On obtient :
[9,25]
Attention ! ! ! il faut purger x si x est affect.
452
6.40.39
453
454
Ou on tape :
randvector(10,multinomial([1/2,1/3,1/6],["R","V","B"]))
On obtient par exemple :
["R","R","B","V","R","V","B","B","R","R"]
On tape :
randvector(6,poisson,1.3)
Ou on tape :
randvector(6,poisson(1.3))
On obtient par exemple :
[1,0,1,1,1,1]
On tape :
randvector(4,exponential,1.2)
Ou on tape :
randvector(4,exponential(1.2))
On obtient par exemple :
[1.67683756526,0.192937941271,0.580820253805,0.709352619633]
On tape :
randvector(5,fisher,4,6)
Ou on tape :
randvector(5,fisher(4,6))
On obtient par exemple :
[0.17289703163,1.03709368317,0.161051043162,1.4407877128,0.35869010427
6.40.40
6.41. FONCTIONS UTILES POUR LES VECTEURS ET LES COMPOSANTES DUN VECTEUR455
6.40.41
list2mat permet dobtenir la matrice des termes de la liste donne comme argument en scindant la liste selon le nombre de colonnes spcifies. Si il manque des
termes, la liste est complte par des 0.
On tape :
list2mat([5,8,1,9,5,6],2)
On obtient :
[[5,8],[1,9],[5,6]]
On tape :
list2mat([5,8,1,9],3)
On obtient :
[[5,8,1],[9,0,0]]
Remarque
En rponse, les dlimiteurs dune matrice sont [ et ] alors que les dlimiteurs dune
liste sont [ et ] (la barre verticale des crochets est plus eppaisse pour les matrices).
6.40.42
mat2list permet dobtenir la liste des termes de la matrice donne comme argument.
On tape :
mat2list([[5,8],[1,9]])
On obtient :
[5,8,1,9]
6.41
6.41.1
Voir aussi 6.48 pour les diffrentes instructions pour les normes dune matrice.
Les diffrentes instructions pour les normes dun vecteur sont :
maxnorm pour calculer la norme l dun vecteur : cest le maximum des
valeurs absolues de ses coordonnes.
On tape :
maxnorm([3,-4,2])
Ou on tape :
maxnorm(vecteur(3,-4,2))
On obtient :
4
456
6.41.2
6.41.3
6.41. FONCTIONS UTILES POUR LES VECTEURS ET LES COMPOSANTES DUN VECTEUR457
Ou on tape :
[1,2,3] .+[4,3,5]
Ou on tape :
+([1,2,3],[4,3,5])
Ou on tape :
+([[1,2,3],[4,3,5]])
On obtient :
[5,5,8]
On tape :
[1,2,3,4,5,6]+[4,3,5]
Ou on tape :
+([1,2,3,4,5,6],[4,3,5])
Ou on tape :
+([[1,2,3,4,5,6],[4,3,5]])
On obtient :
[5,5,8,4,5,6]
Attention
Quand loprateur + est prfix il doit tre quot cest dire crit +.
Si on tape : On tape :
[1,2,3,4,5,6]+4
On obtient, car la liste est considre comme les coefficients dun polynme :
[1,2,3,4,5,10]
6.41.4
458
Ou on tape :
-([1,2,3],[4,3,5])
Ou on tape :
-([[1,2,3],[4,3,5]])
On obtient :
[-3,-1,-2]
Attention
Quand loprateur - est prfix il doit tre quot cest dire crit -.
6.41.5
Voir aussi 6.45.9, hadamard pour les matrices (cf 6.45.8) et product pour
les listes et les matrices (cf 6.45.6 et 6.40.33)
Le produit terme terme de deux listes de mme longueur se fait avec loprateur
infix .*.
On tape :
[1,2,3] .* [4,3,5]
On obtient :
[4,6,15]
On tape :
[[1,2],[4,3]] .* [[4,3],[5,6]]
On obtient :
[[4,6],[20,18]]
6.41.6
Le quotient terme terme de deux listes de mme longueur se fait avec loprateur infix ./.
On tape :
[1,2,3] ./ [4,3,5]
On obtient :
[1/4,2/3,3/5]
6.41. FONCTIONS UTILES POUR LES VECTEURS ET LES COMPOSANTES DUN VECTEUR459
6.41.7
*, oprateur infix, calcule le produit scalaire des deux vecteurs dont les composantes sont donnes en argument.
dot ou dotP ou dotprod ou scalar_product ou scalarProduct calcule le produit scalaire des deux vecteurs dont les composantes sont donnes en
argument.
On tape :
dot([1,2,3],[4,3,5])
ou :
scalar_product([1,2,3],[4,3,5])
ou :
produit_scalaire([1,2,3],[4,3,5])
ou :
produit_scalaire(vecteur([1,2,3]),vecteur([4,3,5]))
ou :
[1,2,3]*[4,3,5]
ou encore :
*([1,2,3],[4,3,5])
On obtient :
25
En effet 25=1*4+2*3+3*5.
Attention
Le produit de deux listes de longueur n renvoie le prduit scalaire de deux vecteurs
de Rn mais une liste leve au carr renvoie la liste des carres terme terme : On
tape :
[1,2,3]*[1,2,3]
On obtient :
25
On tape :
[1,2,3]^2
On obtient :
[1,4,9]
460
6.41.8
6.42
6.42. FONCTIONS UTILES POUR LES STATISTIQUES : MEAN MOYENNE, VARIANCE, STDDEV ECART_
On
p a en effet la moyenne qui vaut 3 et lcart
p 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 numrique des lments dune liste.
On tape :
variance([3,4,2])
On obtient :
2/3
median pour calculer la mdiane des lments dune liste.
On tape :
median([0,1,3,4,2,5,6])
On obtient :
3.0
quantile pour calculer les dciles des lments dune 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 mdiane :
[3.0]
On tape :
quantile([0,1,3,4,2,5,6],0.75)
On obtient le troisime quartile :
[5.0]
quartiles calcule le minimum, le premier quartile, la mdiane, le troisime quartile et le maximum dune 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 dune serie statistique.
On tape :
quartile1([0,1,3,4,2,5,6])
On obtient :
1.0
quartile3 calcule le troisime quartile dune 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 lments dune liste.
On tape :
moustache([0,1,3,4,2,5,6])
462
6.43
Une table est une liste indice par quelque chose de plus gnral que des entiers.
Une table peut tre utilise, par exemple, pour stocker des numros de tlphone
indics par des noms.
Dans Xcas, les indices dune table peuvent tre nimporte quels objets de Xcas.
Laccs se fait par un algorithme qui trie par type puis utilise lordre de chaque
type (par exemple < pour le type numrique, lordre lexicographique pour les
chaines etc...).
table a comme argument une liste ou une squence dgalit 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
463
6.44
Une matrice est represente par une liste de listes de mme longueur. Dans
les rponses de Xcas, les matrices sont parenthses avec []. Par exemple, [1,2,3]
dsigne la matrice [[1,2,3]] qui a une seule ligne, alors que [1,2,3] dsigne la liste
[1,2,3].
Dans ce document, on utilise la notation habituelle ( [[1,2,3]]) pour les matrices
renvoyes comme rponses.
6.44.1
464
On obtient :
[[1,0,0],[0,1,0],[0,0,1]]
6.44.2
newMat(n,p) ou matrix(n,p) renvoie la matrice de n lignes et de p colonnes forme par des zros.
On tape :
newMat(4,3)
Ou on tape :
matrix(4,3)
On obtient :
[[0,0,0],[0,0,0],[0,0,0],[0,0,0]]
6.44.3
465
ranm(2,4,rand(3))
On obtient :
[[0,1,1,0],[0,1,2,0]]
On tape :
ranm(2,4,randnorm(0,1))
On obtient :
[[1.83785427742,0.793007112053,-0.978388964902,-1.88602023857],
[-1.50900874199,-0.241173369698,0.311373795585,-0.532752431454]]
On tape :
ranm(2,4,2..4)
On obtient :
[[2.00549363438,3.03381264955,2.06539073586,2.04844321217],
[3.88383254968,3.28664474655,3.76909781061,2.39113253355]]
On tape :
ranm(4,5,binomial,4,0.2)
Ou on tape :
ranm(4,5,binomial(4,0.2))
On obtient :
[[1,1,1,0,2],[2,1,0,0,0],[1,2,2,1,1],[0,2,1,1,0]]
On effectue 4*5 fois 4 tirages avec une probabilit de succs de 0.2 et chaque fois
le nombre de succs a t de :
1 puis 1, puis 1, puis 0, puis 2, puis 2, puis 1 etc...
On tape :
ranm(4,5,multinomial,[1/2,1/3,1/6])
Ou on tape :
ranm(4,5,multinomial([1/2,1/3,1/6]))
On obtient par exemple :
[[4,1,0],[2,2,1],[3,2,0],[4,1,0]]
Dans ce cas on obitient une matrice ayant 4 lignes et 3 colonnes car sur chaque
ligne on a le dcompte du nombre de tirages par type, ici pour le premier tirage on
a obtenu 4 objets ayant la probabilit 1/2 dtre tirs, 1 objet de probabilit ayant la
probabilit 1/3 dtre tirs, 0 objet de probabilit ayant la probabilit 1/6 dtre tirs,
etc... Cest pratique car par exemple ranm(4,200,multinomial,[1/2,1/3,1/6])
va renvoyer une matrice 4*3 qui donne la rpartition.
On tape :
466
Ou on tape :
ranm(3,5,multinomial([1/2,1/3,1/6],["R","V","B"]))
On obtient par exemple :
[["B","B","V","V","R"],["B","R","R","R","R"],["R","R","R","R","V"]]
On tape :
ranm(3,4,poisson,1.3)
Ou on tape :
ranm(3,4,poisson(1.3))
On obtient par exemple :
[[2,2,0,4],[0,0,1,1],[0,4,1,0]]
On tape :
ranm(2,3,exponential,1.2)
Ou on tape :
ranm(2,3,exponential(1.2))
On obtient par exemple :
[[1.39292444066,0.214488721628,0.607596751757],
[0.58087800165,0.662248573431,0.385110606536]]
On tape :
ranm(2,3,fisher,6,5)
Ou on tape :
ranm(2,3,fisher(6,5))
On obtient par exemple :
[[0.580815888368,0.43932104968,3.00433399184],[0.546184604298,2.078467
6.44.4
467
6.44.5
6.44.6
1
j+k+1
On tape :
hilbert(4)
On obtient :
[[1,1/2,1/3,1/4],[1/2,1/3,1/4,1/5],[1/3,1/4,1/5,1/6],
[1/4,1/5,1/6,1/7]]
468
6.44.7
6.45
6.45.1
evalm sert valuer une matrice en mode Maple, par contre Xcas value toujours les matrices, sans avoir besoin de la commande evalm.
6.45.2
6.45.3
469
6.45.4
6.45.5
Somme cumule des lments dune mme colonne dune matrice : cumSum
6.45.6
470
6.45.7
[[(11-sqrt(33))/22*((sqrt(33)+5)/2)^n+(11+sqrt(33))/22*((-sqrt(33)+5)/
6.45.8
471
Ici [1,2],[3,4] nest pas considr comme 2 vecteurs (car le produit de Hadamard
ne marche que sur des matrices) mais comme une matrice 2 lignes.
hadamard calcule prend le produit des normes des vecteurs colonnes et des vecteurs
lignes
et renvoie leplus petit des 2 :
6.45.9
6.45.10
6.45.11
472
6.45.12
473
[[3,4,5],[1,2,6]][[1]]
ou
A[[1]]
ou
[[3,4,5],[1,2,6]](1)
ou
A(1)
On obtient :
[3,4,5]
Pour obtenir une sous-ligne de la matrice A, on met deux arguments entre
des crochets : lindice de la ligne et un intervalle pour dsigner les indices
des colonnes formant la sous-ligne.
On tape :
A[1,0..2]
On obtient :
[1,2,6]
On tape :
A[1,1..2]
On obtient :
[2,6]
Pour obtenir, sous la forme dune liste, une colonne de la matrice A, on utilise
tran(A) qui dsigne la transpose de A et on tape lindice de la colonne
entre des crochets si les indices commencent 0 :
tran([[3,4,5],[1,2,6]])[[1]]
ou
tran(A)[1]
ou
at(tran(A),1)
On obtient :
[4,2]
Ou bien On tape lindice de la colonne entre des doubles crochets ou des
parenthses si on veut que les indices commencent 1 :
tran([[3,4,5],[1,2,6]])[[1]]
ou
tran(A)[[1]]
ou
tran([[3,4,5],[1,2,6]])(1)
ou
tran(A)(1)
On obtient :
[3,1]
ou encore on met deux arguments entre des crochets : un intervalle pour
dsigner toutes les lignes et lindice de la colonne.
On tape :
A[0..1,1]
On obtient :
[4,2]
Pour avoir une liste reprsentant une sous-colonne, on met deux arguments
474
6.45.13
475
A(j,k):=j*k;
fpour;
fpour;
B:=idn(3);
pour j de 1 jusque 3 faire
pour k de 1 jusque 3 faire
B[[j,k]]:=j*k;
fpour;
fpour;
On a alors
A renvoie la fonction (j,k)->j*k
B renvoie la matrice [[1,2,3],[2,4,6],[3,6,9]]
Si on assigne avec :=, une nouvelle copie de la matrice est cre et llment est
modifi, et si on assigne avec =< la matrice est modifie sans faire de copie ce qui
est plus rapide lorque la matrice est de grande taille.
Par exemple :
Si A:=[[4,5],[2,6]], pour modifier A en la matrice [[4,5],[3,6]] on
peut taper :
A[1,0]:=3 ou
A[1,0]=<3 ou
A[[2,1]]:=3 ou
A(2,1):=3 ou
A[[2,1]]=<3
Puis on tape :
A
On obtient la nouvelle valeur de A :
[[4,5],[3,6]]
On peut aussi modifier une ligne, par exemple, si A:=[[4,5],[2,6]] pour modifier en A la matrice [[4,5],[3,7]], on peut taper :
A:=[[4,5],[2,6]] A[1]:=[3,7] ou
A[1]=<[3,7] ou
A[[2]]:=[3,7] ou
A(2):=[3,7] ou
A[[2]]=<[3,7] ou
A(2)=<[3,7]
Puis on tape :
A
On obtient la nouvelle valeur de A :
[[4,5],[3,7]].
Remarque
Il faut utiliser =< avec prcautions car tous les objets pointant sur cette matrice
seront modifis. Dans un programme il faudra utiliser A:=copy(B) lors de linitialisation pour que les modifications faites avec =< sur B ne se fassent pas sur la
copie A ou que les modifications faites avec =< sur la copie A ne se fassent pas sur
B (cf 8.4.15).
Par exemple :
On tape :
B:=[[4,5],[2,6]]
476
A=<B ou A:=B
A,B
On obtient :
[[4,5],[2,6]],[[4,5],[2,6]]
On tape :
B[1]=<[3,7] ou A[1]=<[3,7]
A,B
On obtient :
[[4,5],[3,7]],[[4,5],[3,7]]
Mais si on tape :
B:=[[4,5],[2,6]]
A:=copy(B)
A,B
On obtient :
[[4,5],[2,6]],[[4,5],[2,6]]
On tape :
B[1]=<[3,7]
A,B
On obtient :
[[4,5],[2,6]],[[4,5],[3,7]]
Ou si on tape :
B:=[[4,5],[2,6]]
A:=copy(B)
A,B
On obtient :
[[4,5],[2,6]],[[4,5],[2,6]]
On tape :
A[1]=<[3,7]
A,B
On obtient :
[[4,5],[3,7]],[[4,5],[2,6]]
6.45.14
subsop permet de modifier un lment ou une ligne dune matrice sans avoir
stocker la matrice dans une variable.
1. Modification dun lment
subsop a deux ou trois arguments.
Attention
En mode Maple les arguments sont permuts.
En mode Xcas, les indices commence 0 :
subsop a deux (resp trois) arguments : une matrice A et une galit
[r,c]=v (resp une matrice A, la liste des indices de la ligne et de la
colonne [r,c], la nouvelle valeur v).
On tape en mode Xcas :
subsop([[4,5],[2,6]],[1,0]=3)
Ou on tape :
477
subsop([[4,5],[2,6]],[1,0],3)
On obtient :
[[4,5],[3,6]]
En mode Mupad, TI, les indices commencent 1 :
subsop a deux (resp trois) arguments : une matrice A et une galit
[r,c]=v (resp une matrice A, la liste des indices de la ligne et de la
colonne [r,c], la nouvelle valeur v).
On tape en mode Mupad, TI :
subsop([[4,5],[2,6]],[2,1]=3)
Ou on tape :
subsop([[4,5],[2,6]],[2,1],3)
On obtient :
[[4,5],[3,6]]
Remarque
Si la matrice a un nom par exemple :
A:=[[4,5],[2,6]], on peut taper directement A[2,1]:=3 pour modifier A en la matrice [[4,5],[3,6]].
En mode Maple, les arguments sont permuts et les indices commencent
1:
subsop a deux arguments : une galit [r,c]=v et une matrice A.
On tape :
subsop([2,1]=3,[[4,5],[2,6]])
On obtient :
[[4,5],[3,6]]
Remarque
Si la matrice un nom par exemple :
A:=[[4,5],[2,6]], on peut taper directement A[2,1]:=3 pour modifier A en la matrice [[4,5],[3,6]].
2. Modification dune ligne
subsop permet de modifier une ligne dune matrice sans avoir stocker la
matrice dans une variable.
subsop a alors deux arguments :
En mode Xcas, les indices commence 0 :
subsop a deux arguments une matrice et une galit, savoir lindice de
la ligne modifier, suivi du signe = puis la liste des nouvelles valeurs de
cette ligne.
On tape en mode Xcas :
subsop([[4,5],[2,6]],1=[3,3])
On obtient :
[[4,5],[3,3]]
Remarque
Si la matrice un nom par exemple :
A:=[[4,5],[2,6]], on peut taper directement A[1]:=[3,3] pour
modifier A en la matrice [[4,5],[3,3]].
En mode Mupad, TI, les indices commencent 1 :
subsop a deux arguments une matrice et une galit, savoir lindice de
la ligne modifier, suivi du signe = puis la liste des nouvelles valeurs de
cette ligne.
478
Remarque
On peut aussi supprimer la ligne n dune matrice avec subsop en mettant comme
second argument n=NULL.
On tape en mode Xcas :
subsop([[4,5],[2,6]],1=NULL)
On obtient :
[[4,5]]
6.45.15
REDIM a comme argument une matrice A (resp un vecteur) et une liste de 2 entiers
(resp 1 entier).
redim redimensionner cette matrice (resp ce vecteur) selon le deuxime argument
soit on la (resp le)raccourcissant, soit en laugmentant avec des 0.
On tape :
REDIM([[4,1,-2],[1,2,-1],[2,1,0]],[5,4])
On obtient :
[[4,1,-2,0],[1,2,-1,0],[2,1,0,0],[0,0,0,0],[0,0,0,0]]
On tape :
REDIM([[4,1,-2],[1,2,-1],[2,1,0]],[2,1])
On obtient :
479
On tape :
REDIM([4,1,-2,1,2,-1],10)
On obtient :
[[4],[1]]
On tape :
REDIM([4,1,-2,1,2,-1],3)
On obtient :
[4,1,-2]
6.45.16
480
6.45.17
Extraire des lignes ou des colonnes dune matrice (compatibilit Maple) : row col
row (resp col) permet dextraire une ou plusieurs lignes (resp colonnes) dune
matrice.
row (resp col) a 2 arguments : une matrice A, et un entier n ou un intervalle
n1 ..n2 .
row (resp col) renvoie la ligne (resp colonne) dindice n de la matrice A, ou la
squence des lignes (resp colonnes) dindice allant de n1 n2 de la matrice A.
On tape :
row([[1,2,3],[4,5,6],[7,8,9]],1)
On obtient :
[4,5,6]
On tape :
row([[1,2,3],[4,5,6],[7,8,9]],0..1)
On obtient :
([1,2,3],[4,5,6])
On tape :
col([[1,2,3],[4,5,6],[7,8,9]],1)
On obtient :
[2,5,8]
On tape :
col([[1,2,3],[4,5,6],[7,8,9]],0..1)
On obtient :
([1,4,7],[2,5,8])
6.45.18
481
[[1,2,3],[7,8,9]]
On tape :
delrows([[1,2,3],[4,5,6],[7,8,9]],0..1)
On obtient :
[[7,8,9]]
On tape :
delcols([[1,2,3],[4,5,6],[7,8,9]],1..1)
On obtient :
[[1,3],[4,6],[7,9]]
On tape :
delcols([[1,2,3],[4,5,6],[7,8,9]],0..1)
On obtient :
[[3],[6],[9]]
6.45.19
subMat a 5 arguments : une matrice A, et 4 entiers nl1, nc1, nl2, nc2. Ces indices
sont : nl1 est lindice du dbut de ligne ,nc1 est lindice du dbut de colonne, nl2
est lindice de fin de ligne et nc2 est lindice de fin de colonne.
subMat(A,nl1,nc1,nl2,nc2) extrait la sous-matrice de la matrice A de
premier lment A[nl1,nc1] et de dernier lment A[nl2,nc2].
On dfinit la matrice A, on tape :
A:=[[3,4,5],[1,2,6]]
On tape :
subMat(A,0,1,1,2)
ou
subMat(A,[0,1],[1,2])
On obtient :
[[4,5],[2,6]]
On tape :
subMat(A,0,1,1,1)
ou
subMat(A,[0,1],[1,1])
482
On obtient :
[[4],[2]]
Par dfaut nl1 = 0, nc1 = 0, nl2=nrows-1 et nc2=ncols-1
On tape :
A:=[[3,4,5],[1,2,6]]
subMat(A)
On obtient :
[[3,4,5],[1,2,6]]
On tape :
subMat(A,1)
Ou :
subMat(A,1,0)
Ou :
subMat(A,1,0,1)
Ou :
subMat(A,1,0,1,2)
On obtient :
[[1,2,6]]
6.45.20
redim a comme argument une matrice A (resp un vecteur) et une liste de 2 entiers
(resp 1 entier).
redim redimensionner cette matrice (resp ce vecteur) soit en la (resp le) raccourcissant, soit en laugmentant avec des 0.
On tape :
redim([[4,1,-2],[1,2,-1]],[3,4])
On obtient :
[[4,1,-2,0],[1,2,-1,0],[0,0,0,0]]
On tape :
redim([[4,1,-2],[1,2,-1],[2,1,0]],[2,1])
On obtient :
[[4],[1]]
483
On tape :
redim([4,1,-2,1,2,-1],8)
On obtient :
[4,1,-2,1,2,-1,0,0]
On tape :
redim([4,1,-2,1,2,-1],3)
On obtient :
[4,1,-2]
6.45.21
484
6.45.22
6.45.23
6.45.24
6.45.25
485
6.45.26
6.45.27
486
On tape :
blockmatrix(2,2,[idn(2),newMat(2,3),
newMat(3,2),idn(3)])
On obtient :
[[1,0,0,0,0],[0,1,0,0,0],[0,0,1,0,0],
[0,0,0,1,0],[0,0,0,0,1]]
On tape :
blockmatrix(3,2,[idn(1),newMat(1,4),
newMat(2,3),idn(2),newMat(1,2),[[1,1,1]]])
On obtient :
[[1,0,0,0,0],[0,0,0,1,0],[0,0,0,0,1],[0,0,1,1,1]]
On tape :
A:=[[1,1],[1,1]];B:=[[1],[1]]
puis :
blockmatrix(2,3,[2*A,3*A,4*A,5*B,newMat(2,4),6*B])
On obtient :
[[2,2,3,3,4,4],[2,2,3,3,4,4],
[5,0,0,0,0,6],[5,0,0,0,0,6]]
6.45.28
487
[[3,4,2,1,2,4]]
En effet, quand les deux matrices A et B ont la mme dimension, concat fabrique
une matrice ayant mme nombre de lignes que A et B en accolant A et B.
On tape :
concat([[3,4],[2,1],[0,1]],[[1,2],[4,5]])
On obtient :
[[3,4],[2,1],[0,1],[1,2],[4,5]]
alors que :
concat([[3,4],[2,1]],[[1,2],[4,5]])
On obtient :
[[3,4,1,2],[2,1,4,5]]
6.45.29
488
6.45.30
6.45.31
6.45.32
489
6.45.33
count a deux ou trois paramtres : une fonction relle f et une matrice relle A
de dimension p*q (resp une liste relle l de longueur n) et ventuellement un paramtre optionnel row ou col.
count applique la fonction aux lments de la matrice (ou liste) et en renvoie la
somme, cest dire,
count renvoie f(A[0,0])+..f(A[p-1,q-1]) (resp f(l[0])+..f(l[n])).
Si il y a row (resp col) comme troisime paramtre count agit sur chaque ligne
(resp colonne) de la matrice et renvoie une liste.
Si f est une fonction boolnne count renvoie le nombre dlments de la matrice
(ou liste) pour lesquels la fonction boolnne est vraie.
On tape :
count((x)->x,[[2,12],[45,3],[7,78]])
On obtient :
147
car on a : 2+12+45+3+7+78=147.
On tape :
count((x)->x,[[2,12],[45,3],[7,78]],row)
On obtient :
[14,48,85]
490
car on a : 2+12=14,45+3=48,7+78=85.
On tape :
count((x)->x,[[2,12],[45,3],[7,78]],col)
On obtient :
[54,93]
car on a : 2+45+7=54, 12+3+78=93.
On tape :
count(x->x<10,[[2,12],[45,3],[7,78]])
On obtient :
3
6.45.34
count_eq a deux ou trois paramtres : un rel et une matrice (ou une liste) relle
et ventuellement un paramtre optionnel row ou col.
count_eq renvoie le nombre dlments de la matrice (ou de la liste) qui sont
gaux au premier argument.
Si il y a row (resp col) comme troisime paramtre count_eq agit sur chaque
ligne (resp colonne) de la matrice et renvoie une liste.
On tape :
count_eq(12,[[2,12,45],[3,7,78]])
On obtient :
1
On tape :
count_eq(12,[[2,12,45],[3,7,78]],row)
On obtient :
[1,0]
On tape :
count_eq(12,[[2,12,45],[3,7,78]],col)
On obtient :
[0,1,0]
6.45.35
491
count_inf a deux ou trois paramtres : une nombre et une matrice (ou liste)
relle et ventuellement un paramtre optionnel row ou col.
count_inf renvoie le nombre dlments de la matrice (ou liste) qui sont strictement infrieurs au premier argument.
Si il y a row (resp col) comme troisime paramtre count_inf agit sur chaque
ligne (resp colonne) de la matrice et renvoie une liste.
On tape :
count_inf(12,[2,12,45,3,7,78])
Ou on tape :
count_inf(12,[[2,12],[45,3],[7,78]])
On obtient :
3
On tape :
count_inf(12,[[2,12],[45,3],[7,78]],row)
On obtient :
[1,1,1]
On tape :
count_inf(12,[[2,12],[45,3],[7,78]],col)
On obtient :
[2,1]
6.45.36
count_sup a deux ou trois paramtres : une nombre et une matrice (ou liste)
relle et ventuellement un paramtre optionnel row ou col.
count_sup renvoie le nombre dlments de la matrice (ou liste) qui sont strictement suprieurs au premier argument.
Si il y a row (resp col) comme troisime paramtre count_sup agit sur chaque
ligne (resp colonne) de la matrice et renvoie une liste.
On tape :
count_sup(12,[[2,12,45],[3,7,78]])
On obtient :
2
On tape :
492
On obtient :
[1,1]
On tape :
count_sup(12,[[2,12,45],[3,7,78]],col)
On obtient :
0,0,2]
6.45.37
493
[2.0,2.0,3.0,3.0,2.0,2.0,3.0]
quantile pour calculer le dcile selon le second argument, de series statistiques qui sont les colonnes dune matrice.
On tape :
quantile([[6,0,1,3,4,2,5],[0,1,3,4,2,5,6],[1,3,4,2,5,6,0],
[3,4,2,5,6,0,1],[4,2,5,6,0,1,3],[2,5,6,0,1,3,4]],0.25)
On obtient un vecteur de composantes le premier quartile des colonnes :
[1.0,1.0,2.0,2.0,1.0,1.0,1.0]
On tape :
quantile([[6,0,1,3,4,2,5],[0,1,3,4,2,5,6],[1,3,4,2,5,6,0],
[3,4,2,5,6,0,1],[4,2,5,6,0,1,3],[2,5,6,0,1,3,4]],0.75)
On obtient un vecteur de composantes le troisime quartile des colonnes :
[4.0,4.0,5.0,5.0,5.0,5.0,5.0]
quartiles pour calculer le minimum, le premier quartile, la mdiane, le
troisime quartile et le maximum de series statistiques qui sont les colonnes
dune matrice.
On tape :
quartiles([[6,0,1,3,4,2,5],[0,1,3,4,2,5,6],[1,3,4,2,5,6,0],
[3,4,2,5,6,0,1], [4,2,5,6,0,1,3],
[2,5,6,0,1,3,4]])
On obtient la matrice, de premire ligne le minimum de chaque colonne,
de deuxime ligne le premier quartile de chaque colonne, de troisime ligne
la mdiane de chaque colonne, de quatrime ligne le troisime quartile de
chaque colonne et de dernire ligne le maximum de chaque colonne :
[[0.0,0.0,1.0,0.0,0.0,0.0,0.0],[1.0,1.0,2.0,2.0,1.0,1.0,1.0],
[2.0,2.0,3.0,3.0,2.0,2.0,3.0],[4.0,4.0,5.0,5.0,5.0,5.0,5.0],
[6.0,5.0,6.0,6.0,6.0,6.0,6.0]]
boxwhisker ou moustache pour afficher les boites moustaches de
series statistiques qui sont les colonnes dune matrice.
On tape :
moustache([[6,0,1,3,4,2,5],[0,1,3,4,2,5,6],
[1,3,4,2,5,6,0], [3,4,2,5,6,0,1],
[4,2,5,6,0,1,3],[2,5,6,0,1,3,4]])
On obtient les dessins des boites moustaches des series statistiques qui sont
les colonnes de la matrice mise comme paramtre.
6.45.38
494
On obtient :
[2,3]
6.45.39
6.45.40
6.46
Algbre linaire
6.46.1
6.46.2
495
6.46.3
trace a comme argument une matrice A (voir aussi trace dun objet gomtrique 9.21.3).
trace renvoie la trace de A : cest la somme des lments de la diagonale.
On tape :
trace([[1,2],[3,4]])
On obtient :
5
6.46.4
496
6.46.5
6.46.6
497
6.46.7
6.46.8
1 2
3 4
1
1 1
1 2
5 8
=
9
7
0 1
3 4
2
498
6.46.9
basis a comme argument la liste des composantes des vecteurs qui engendrent
un sous espace vectoriel de Rn .
basis renvoie une liste constitue des vecteurs dune base de ce sous espace
vectoriel.
On tape :
basis([[1,2,3],[1,1,1],[2,3,4]])
On obtient :
[[1,0,-1], [0,1,2]]
6.46.10
ibasis a comme argument deux listes de vecteurs qui engendrent deux sous espaces vectoriels de Rn .
ibasis renvoie une liste constitue de vecteurs formant une base de lintersection
de ces sous espaces vectoriels.
On tape :
ibasis([[1,2]],[[2,4]])
On obtient :
[[1,2]]
6.46.11
6.46.12
ker (ou kernel ou nullspace) a comme argument la matrice dune application linaire f dans la base canonique.
ker (ou kernel ou nullspace) renvoie une liste de vecteurs formant une base
du noyau de f .
On tape :
ker([[1,1,2],[2,1,3],[3,1,4]])
On obtient :
[[1,1,-1]]
Le noyau est donc engendr par le vecteur [1,1,-1].
6.46.13
499
6.46.14
500
6.46.15
6.47
Programmation linaire
6.47.1
avec
A.x b, x 0, b 0
(X, Y ) 0
3X + 2Y 3
max(X + 2Y ) lorsque
X +Y 4
On tape :
501
simplex_reduce([[-3,2],[1,1]],[3,4],[1,2])
On obtient :
7,[1,3,0,0],[[0,1,1/5,3/5,3],[1,0,(-1)/5,2/5,1],
[0,0,1/5,8/5,7]]
Ce qui veut dire que le maximum de X+2Y sous ces conditions est 7, il est obtenu
pour X=1,Y=3 car [1,3,0,0] est la solution augmente et la matrice rduite
est :
[[0,1,1/5,3/5,3],[1,0,(-1)/5,2/5,1], [0,0,1/5,8/5,7]].
Un cas plus compliqu qui se ramne au cas simple
simplex_reduce oblige rcrire les contraintes impliquant une seule variable
pour quelles soient sous la forme xk 0, puis liminer les variables sans
contraintes puis ajouter des variables afin davoir comme contraintes : toutes
les composantes des lments du simplexe sont positives. Par exemple, si on part
du problme :
x 1
y 2
x + 3y z = 2
min(2x + y z + 4) lorsque
2x y + z 8
x + y 5
on pose x = 1 X, y = Y + 2, z = 5 X + 3Y le problme devient chercher le
minimum de (2X + Y (5 X + 3Y ) + 8) lorsque
X 0
Y 0
2(1
X)
(Y
+
2)
+
5
X
+
3Y
8
(1 X) + (Y + 2) 5
donc chercher le minimum de :
X
Y
(X 2Y + 3) lorsque
3X
+
2Y
X +Y
0
0
3
4
502
On a C=[[-3,2,1,0,3],[1,1,0,1,4]]
et D=[[-3,2,1,0,3],[1,1,0,1,4],[-1,-2,0,0,0]]
On tape :
simplex_reduce(D)
On obtient le mme rsultat que prcdemment.
6.47.2
x 1
y 2
max(2x + y z + 4) lorsque
x
+
3y
z = 2
2x y + z 8
on pose x = 1 X, y = Y + 2, donc on cherche :
Y
max(2X + Y z + 8) lorsque
1
X
+
3(Y
+
2)
2(1 X) (Y + 2) + z
0
0
2
8
X 0
Y 0
max(2X +Y (5X +3Y )+8) lorsque
2X Y + 5 X + 3Y 8
503
(X, Y ) 0
3X + 2Y 3
Il faut ici ajouter une variable dcart t 0 pour transformer la dernire ingalit
en galit :
on pose t = 3 (3X + 2Y ) et on a alors
t 0 et 3X + 2Y + t = 3 est quivalent 3X + 2Y 3, et cela donne un
sommet de dpart vident. La matrice correspondant ces conditions est alors la
ligne
(3, 2, 1, 3)
le sommet de dpart associ est (X, Y, t) = (0, 0, 3) la sous-matrice identit utilise
la 3me colonne (t est le coefficient non nul). On pourrait passer le coefficient non
nul en 2me colonne (sommet (X, Y, t) = (0, 3/2, 0)) en rcrivant lgalit sous
la forme
(3/2, 1, 1/2, 3/2)
mais on ne pourrait passer le coefficient non nul en 1re colonne (il ny a en effet
que 2 sommets ce simplexe).
Avec Xcas, on tape :
simplex_reduce([[-3,2]],[3],[-1,-2])
On obtient :
(0,[0,0,3],[[-3,2,1,3],[1,2,0,0]])
En gnral, le passage dun sommet un autre sommet consiste alors effectuer une opration de rduction de Gauss qui fait sortir une colonne et entrer
une autre colonne dans les composantes non nulles du sommet, ce qui revient
dplacer la sous-matrice identit. On doit prendre garde effectuer lopration de
rduction de Gauss en conservant la positivit du membre de droite des contraintes
de lgalit, et ce sans diminuer la valeur de la fonction optimiser. Pour pouvoir
raliser cette dernire condition, on augmente la matrice des contraintes dgalit
par une ligne forme des opposs des coefficients de la fonction maximiser, sauf
en dernire colonne (on y met le coefficient constant de la fonction maximiser).
Dans lexemple ce serait
3 2 1 3
1 2 0 3
On cre (si ncessaire) des zros dans cette dernire ligne dans les colonnes correspondant la sous-matrice identit (donc aux composantes non nulles du sommet),
de sorte que le coefficient constant de la ligne (aprs cette rduction) reprsente la
valeur de la fonction optimiser en ce sommet. Plus gnrallement pour un point
du simplexe, au cours de la rduction la somme de la fonction maximiser et du
produit scalaire des coordonns du point avec cette dernire ligne (priv du dernier
coefficient) vaut le dernier coefficient. On aura donc un sommet ralisant le maximum si tous les coefficients de la ligne sont positifs (sauf le dernier). Cest le cas
ici, le maximum est 3, atteint pour X = Y = 0 (donc x = 1, y = 2 et z = 5).
Linstruction simplex_reduce de Xcas applique lalgorithme du simplexe
dans deux situations distinctes : soit le problme est pos sous forme canonique
et on lui donne 3 arguments (cf. infra), soit on lui donne un seul argument qui doit
tre une matrice associe un sommet au sens de ce paragraphe.
504
6.47.3
Lorsquon lui passe 3 arguments A, b, c, la fonction simplex_reduce calcule le maximum (sil existe) de c.x pour c vecteur fix de Rn et x variable, sous
les conditions x 0 et A.x b (avec A et b 0 fixs). Ce problme est appel
forme canonique.
Xcas ajoute m variables dcart y1 , ..., ym (m=nombre de lignes de A) pour
transformer les ingalits en galits, puis choisit comme sommet de dpart vident
toutes les variables de dpart nulles et les variables dcart valant b. Il construit
donc la matrice
A I bt
c 0 0
Ensuite il se dplace en suivant des artes du simplexe dfini par les conditions
Ax + y = b, x, y 0 en augmentant le plus possible la valeur de c.x. Cela se
fait en cherchant dans la dernire ligne un coefficient ngatif strict (soit le plus
ngatif possible, soit le premier ngatif), qui reprsentera une colonne entrant dans
la sous-matrice identit (en rendant son coefficient non nul dans les composantes du
sommet, on augmentera au sens large la valeur de c.x). Sil ny a pas de coefficient
ngatif, on arrte lalgorithme (on verra que le maximum est le coefficient en bas
droite de la matrice). Sil existe, on slectionne cette colonne comme colonne du
pivot (colonne entrante dans la matrice identit), il nous reste dterminer la ligne
du pivot utilis (cest la colonne sortant de la matrice identit) :
dune part, le pivot utilis doit tre positif, en effet on va diviser la ligne du
pivot par la valeur du pivot, et le coefficient constant de cette ligne (qui sera
la valeur dune coordonne dun sommet) doit rester positif.
dautre part les autres coefficients du sommet doivent aussi rester positifs.
Pour raliser cela, on calcule de la ligne 1 m les rapport des coefficients
de cette ligne dernire colonne avec le coefficient de cette ligne, colonne
du pivot, en cherchant la ligne qui donne un rapport positif le plus petit
possible. Sil nexiste pas de telle ligne, le maximum est alors + (car on
peut indfiniment augmenter la valeur de la composante ayant ce numro
de colonne en restant dans le domaine). Si une telle ligne existe, on se sert
du coefficient de cette ligne/colonne comme dun pivot, et on cre un 1
cette ligne et des 0 ailleurs dans cette colonne par combinaisons linaires de
lignes.
Au cours de lalgorithme, les m premires lignes de la matrice contiennent toujours une sous-matrice identit m, m (puisquon fait du pivot de Gauss), et les coefficients de la dernire ligne qui correspondent cette sous-matrice identit sont
nuls (pour la mme raison). On a donc une matrice de la forme
B 1 A
B 1
B 1 b
c + cB B 1 A cB B 1 cB B 1 b
o B est une sous-matrice extraite de A, I (correspondant des colonnes de la dernire ligne ayant pour coefficients 0) et cB est la liste des coefficients de c correspondant aux mmes colonnes de A, I que B. Pour viter de boucler indfiniment si
le coefficient en bas droite est constant, on peut garder en mmoire dans une table
les colonnes correspondant lidentit et se refuser revenir une configuration
prcdente.
505
2x1 + x2 + x3 2
x1 + 2x2 + 3x3 5
2x1 + 2x2 + x3 6
on prend A:=[[2,1,1],[1,2,3],[2,2,1]], b:=[2,5,6] et c:=[3,1,3],
donc on tape :
simplex_reduce([[2,1,1],[1,2,3],[2,2,1]],[2,5,6],[3,1,3])
et on obtient 27/5 comme maximum, [1/5,0,8/5,0,0,4] comme solution
augmente (donc [1/5,0,8/5] est solution), ainsi que la matrice rduite.
6.47.4
6.47.5
506
P
On ajoute des variables artificielles y1 , ..., ym et on maximise yi sous condition Ax = b, x 0, y 0 en partant de la valeur initiale 0 pour les variables non
artificielles et b pour y (on appelle donc simplex_reduce avec un argument
matrice obtenue en augmentant A par lidentit, b inchang et un c artificiel form
de 0 au dbut et de 1 en dessous de lidentit (que simplex_reduce va commencer par annuler)). Si le maximum existe et est 0, on obtiendra une sous-matrice
identit dans les colonnes correspondants x, et on pourra liminer les variables
artificielles (dont la valeur sera 0 pour atteindre loptimum). Il restera appliquer
nouveau lalgorithme du simplexe mais avec le c original (comme les coefficients
de c correspondant lidentit nont pas de raison dtre nuls, on doit commencer
par les rendre nuls, ce que simplex_reduce fait si on permute les colonnes
pour placer la sous-matrice identit droite).
Exemple : on cherche le minimum de 2x + 3y z + t avec les x, y, z, t 0
et :
x y + t = 1
yz+t = 3
Ceci revient calculer loppos du maximum de (2x+3yz+t). On ajoute donc
deux variables artificielles y1 et y2 , on tape directement la matrice de lalgorithme
simplex_reduce([[-1,-1,0,1,1,0,1],
[0,1,-1,1,0,1,3],
[0,0,0,0,1,1,0]])
On obtient comme optimum 0, avec 0
cielles, et la matrice
1/2 0 1/2
1/2 1 1/2
0
0
0
Ceci signifie aussi quune valeur initiale dans le domaine est (0, 1, 0, 2). Il nous
reste optimiser le problme de dpart en remplacant les lignes de Ax = b par
les 2 premires lignes de la matrice rponse ci-dessus dont on enlve les variables
artificielles et en ajoutant la ligne de la fonction optimiser. On prend donc la
matrice
simplex_reduce([[-1/2,0,-1/2,1,2],
[1/2,1,-1/2,0,1],[2,3,-1,1,0]])
On obtient comme maximum -5, donc le minimum de loppos est 5, obtenu pour
(0, 1, 0, 2) soit aprs replacement des colonnes t = 2 et y = 1, les autres nuls.
Pour plus de dtails, chercher sur google simplex algorithm ou dans une
bibliothque Ciarlet Introduction lanalyse matricielle et loptimisation.
6.48
6.48.1
507
On tape :
B:=[[1,2,3],[3,-9,6],[4,5,6]]
puis,
frobenius_norm(B)
On obtient :
sqrt(217)
6.48.2
6.48.3
508
6.48.4
509
En effet max(SVL(B)) renvoie la plus grande racine carre des valeurs propres
de trn(B)*B.
sqrt(proot(pcar(trn(B)*B))) ou sqrt(EIGENVAL(trn(B)*B)) renvoie :
[9.48552308331,0.759394515579,11.2449175989]
On tape :
matrix_norm(B,inf)
ou
linfnorm(B)
ou
rownorm(B)
On obtient :
18
En effet max(1 + 2 + 3, 3 + 9 + 6, 4 + 5 + 6) = 18
Rappel
En mathmatiques, et plus particulirement en analyse fonctionnelle, une norme
doprateur ou norme subordonne est une norme dfinie sur lespace des oprateurs borns entre deux espaces vectoriels norms. Entre deux tels espaces, les
oprateurs borns ne sont autres que les applications linaires continues.
On va considrer ici que les applications linaires sur des espaces vectoriels de dimension finie.
Thorme
Soient E et F 2 espaces vectoriels norms (de norme k kE et k kF ) de dimension
finie et f une application linaire de E dans F .
Alors il existe une constante relle K tel que pour tout x E on ait :
kf (x)kF KkxkE
f est donc lipschitzienne sur E et continue de E dans F .
Dfinition de la triple norme
Daprs ce qui prcde, on a :
pour tout x E si kxkE 1 alors on a kf (x)kF K.
Donc lensemble {kf (x)kF pourkxkE 1} est une partie non vide et majore
de R. Cet ensemble admet donc une borne suprieure que lon appelle la triple
norme.
Ainsi
|||f ||| = sup kf (x)kF
kxkE 1
510
0kn1
Cest ce quiP
est dfini dans Xcas par rownorm(A)
Si kxkE = 1in |xi | (cest la norme l1 ), alors la norme de f vaut :
max
0kn1
|ajk |
0jn1
Cest ce qui q
est not dans Xcas : colnorm(A)
P
2
Si kxkE =
0jn1 xj (cest la norme l2 ou euclidienne, associe au
produit scalaire canonique), alors la norme triple de f est la racine carre de
la plus grande valeur propre de f f , o f dsigne ladjoint de f .
La norme triple de f est donc sa plus grande valeur singulire. Ceci se gnralise en remplaant Rn par nimporte quel espace de Hilbert.
Cest ce qui est not dans Xcas : max(SVL(A)) : cest la plus grande valeur singulire de A i.e la plus grande valeur de la racine carre des valeurs
propres de trn(A)*A.
Pour tout endomorphisme symtrique g (en particulier pour g = f f ), la
norme de g est gale son rayon spectral, qui est la plus grande des valeurs
absolues de ses valeurs propres.
Dmonstration Soient E = Rn et F = Rp munis de leur base canonique
Soit e1 ..en est la base canonique de E
Soit aj,k la matrice associe f dans les bases canoniques de E et F .
Montrons que pour la norme l1norm, la triple norme de A nomme ici matrix_norm(A,1)
cest colnorm.
P
Soit x = k (xk ek )
On a donc :
P
P
l1norm(f (x)) =l1norm(
k |xk |l1norm(f (ek )) P
k xk f (ek ))
P
l1norm(f (x)) k |xk |maxk (l1norm(f (ek ))) =l1norm(x)maxk ( j |aj,k |)
donc
matrix_norm(A,1)<=colnorm(A)
Montrons que ce maximum est atteint.
Soit k0P
tel que :
P
maxk ( j |aj,k |) = j |aj,k0 | =colnorm(A)
P
On a alors l1norm(ek0 ) = 1 et l1norm(f (ek0 )) = j |aj,k0 |
donc matrix_norm(A,1)=colnorm(A).
Montrons que pour la norme du maximum la triple norme de A nomme ici
matrix_norm(A,inf)
cest rownorm.
P
Soit x = k xk ek avec maxk (|xk |) 1
On a :
P
maxnorm(f (x))=maxnorm(P k xk f (ek )) =
P
maxnorm(f (x)) = maxj (| k xk ajk|) maxj ( k |xk | |aj,k |) puisque
maxk |xk ) 1
P
maxnorm(f (x)) maxj ( k |aj,k |) =colrow(A)
Montrons que ce maximum
est atteint.
P
P
Soit j0 tel que maxj ( k |aj,k |) = k |aj0 , k| =rownorm(A).
511
P
Soit xO = k sign(aj0 ,k ) ek alors maxnorm(x
P 0 ) = 1 et
maxnorm(f
(x
))
=
max
(f
(x
))
=
max
(|
0
j
0
j
k sign(aj0 ,k ) aj,k |) =
P
P
max( k |aj0 ,k |, maxj!=j0 (| k sign(aj0 ,k ) aj,k |))
siP
j! = j0 on a :
P
P
| k sign(aj0 ,k ) aj,k )| k |aj,k | k |aj0 ,k |
Donc
P
maxnorm(f (x0 )) = k |aj0 ,k | =rownorm(A)
Donc matrix_norm(A,inf)=rownorm(A).
Montrons que pour la norme l2norm, la triple norme de la matrice A nomme
ici matrix_norm(A,2) cest max(SVL(A)) cest dire la plus grande racine
carre desP
valeurs propres de trn(A)*A.
Soit x = k (xk ek )
On a :
l2norm(x)=sqrt(scalar_product(x,x))
qP
2
0n note < x, x >=
k xk =scalar_product(x,x)
l2norm(f(x))=sqrt(scalar_product(A*x,A*x))
On a : < Ax, Ax >=< x, (A)t Ax > donc
l2norm(f(x))=sqrt(scalar_product(x,trn(A)*A*x))
La matrice M = trn(A) A est symtrique donc diagonalisable et ses valeurs
propres k sont relles.
Il existe une matrice B diagonale et P une matrice de passage orthogonale (i.e.
inv(P)=trn(P)) tels que :
B = tran(P ) M P i.e. M = trn(A) A = P B trn(P )
On a de plus :
M vk = k vk et
< Avk , Avk >=< vk , M vk >=< vk , k vk >= k < vk , vk >k
Comme < Avk , Avk > 0 on en dduit que les k sont positifs.
Donc l2norm(f(x))=sqrt(scalar_product(trn(P)*x,B*trn(P)*x))
Si y = trn(P ) x = (y0 ...yn1 ) on a :
< y, y >=<
P x, P trn(P )x >=< x, xP>
B y = k k yk et < y, B y >= k k yk2
Donc :
qP
2
l2norm(f(x))=
k k yk
Or puisque k > 0 on a : P
P
2
2
k k yk maxk (k ) k yk et
k existe
et
qP
qP
2 =< y, y >=< x, x >=
2
y
k k
k xk
Donc :
qP
2
l2norm(f(x)) maxk ( k )
k xk
Montrons que ce maximum est atteint.
Soit m = maxk (k ) et vm le vecteur propre associ.
On a alors :
l2norm(f(vm))=
sqrt(scalar_product(A
*vm,A*vm))
512
m =max(SVL(A)).
Donc : matrix_norm(A,2)=max(SVL(A))
6.48.5
513
On obtient :
14.807741389
En effet, si B:=[[1,2,3],[3,-9,6],[4,5,6]] on tape :
max(SVL(B)),max(SVL(inv(B))),max(SVL(B))*max(SVL(inv(B)))
On obtient :
11.2449175989,1.31683858585,14.807741389
On tape :
COND([[1,2,3],[3,-9,6],[4,5,6]],inf)
On obtient :
28
En effet, si B:=[[1,2,3],[3,-9,6],[4,5,6]] on tape :
rownorm(B),rownorm(inv(B)),rownorm(B)*rownorm(inv(B))
On obtient :
18,14/9,28
6.49
6.49.1
514
6.49.2
[[0.324869129433,0,0],[0,4.21431974338,0],[0,0,1.46081112719]]
6.49.3
egv (ou eigenvectors eigenvects eigVc) a comme argument une matrice A dordre n.
egv (ou eigenvectors eigenvects eigVc) renvoie la matrice de passage dune matrice diagonalisable (les colonnes du rsultat sont les vecteurs propres
de la matrice rsultat).
On tape :
egv([[1,1,3],[1,3,1],[3,1,1]])
On obtient :
[[-1,1,1],[2,1,0],[-1,1,-1]]
On tape :
egv([[4,1,-2],[1,2,-1],[2,1,0]])
On obtient :
"Not diagonalizable at eigenvalue 2"
En mode complexe on tape :
egv([[2,0,0],[0,2,-1],[2,1,2]])
On obtient :
[0,1,0],[-1,-2,-1],[i,0,-i]]
6.49.4
515
516
[[1,-1,1/2],[1,0,-1],[1,1,1/2]],[[6,0,0],[0,3,0],[0,0,3]]
On tape en mode Xcas, Mupad et TI :
rat_jordan([[1,0,0],[1,2,-1],[0,0,1]])
On obtient :
[[0,1,0],[1,0,1],[0,1,1]],[[2,0,0],[0,1,0],[0,0,1]]
On tape en mode Xcas, Mupad et TI :
rat_jordan([[4,1,-2],[1,2,-1],[2,1,0]])
On obtient :
[[[1,2,1],[0,1,0],[1,2,0]],[[2,1,0],[0,2,1],[0,0,2]]]
En mode complexe et en mode Xcas, Mupad et TI, on tape :
rat_jordan([[2,0,0],[0,2,-1],[2,1,2]])
On obtient :
[[1,0,0],[-2,-1,-1],[0,-i,i]],[[2,0,0],[0,2-i,0],[0,0,2+i]]
On tape en mode Maple :
rat_jordan([[1,0,0],[1,2,-1],[0,0,1]],P)
On obtient :
[[2,0,0],[0,1,0],[0,0,1]]
puis on tape :
P)
On obtient :
[[0,1,0],[1,0,1],[0,1,1]]
6.49.5
517
1 0 0
0 1 1
1 1 1
518
0
1
0
2 0
0
, 0 1
1
0
1
1
21 0 21
0 0 2
6.49.6
6.49.7
519
520
[1,-6,12,-8]
pmin : calcul du polynme minimal relatif un vecteur pris au hasard, cest
le polynme caractristique sil est de degr maximal.
On tape :
pcar([[4,1,-2],[1,2,-1],[2,1,0]],pmin)
On obtient :
[1,-6,12,-8]
Pour les matrices coefficients entiers, lalgorithme utilis par dfaut est modulaire, on calcule le polynme caractristique modulo plusieurs nombres premiers,
soit par le polynme minimal, soit par Hessenberg, et on reconstruit par les restes
chinois coefficient par coefficient. Le test darrt est probabiliste, lorsque le polynme reconstruit ne varie plus pour des nombres premiers dont le produit est
suprieur linverse de la valeur de proba_epsilon (que lon peut modifier
dans la configuration du cas). Si proba_epsilon est nul, le rsultat est dterministe (une majoration priori des coefficients est alors utilise). Dans tous les
cas, le temps de calcul est en O(n4 ln(n)), mais il est plus rapide avec la mthode
probabiliste.
6.49.8
6.49.9
521
On obtient :
[1,-1]
On tape :
pmin([[1,0],[0,1]],x)
On obtient :
x-1
Donc le polynme minimal de [[1,0],[0,1]] est x-1.
On tape :
pmin([[2,1,0],[0,2,0],[0,0,2]])
On obtient :
[1,-4,4]
On tape :
pmin([[2,1,0],[0,2,0],[0,0,2]],x)
On obtient :
x^2-4*x+4
Donc le polynme minimal de [[2,1,0],[0,2,0],[0,0,2]] est x2 4x + 4.
6.49.10
Comatrice : adjoint_matrix
522
6.49.11
6.49.12
523
3 8 5
5/2
2
1 0 0
0 0
0 1 0
0 0
2 1 1/2 (5)/4 1
0 1 1
2
0
0 0
, 0 2 1
0 1 1/2 1/4 1 0 0 2
3/2
2
0 0 0
13/8 7/2
0 1 1
1 0
On a en effet si :
A:=[[3,2,2,2,2],[2,1,2,-1,-1],[2,2,1,-1,1],
[2,-1,-1,3,1],[2,-1,1,1,2]]
P,B:= hessenberg(A,0)
pcar(A)=pcar(B)=[1,-10,13,71,-50,-113]
inv(P)*A*P est gal B
Avec comme deuxime argument -1, les calculs sont approchs et la matrice
B est triangulaire.
On tape :
hessenberg([[3,2,2,2,2],[2,1,2,-1,-1],[2,2,1,-1,1],
[2,-1,-1,3,1],[2,-1,1,1,2]],-1)
On obtient (on donne le rsultat avec 2 digits) :
,
0.34
0.68
0.17 0.46
0.43
0.41
0.25
0.44
0.76 0.063
4.6
0
0
0
0.0
0.0
1.9
0
0
0.0
0.0
0.0
1.7
0
0.0
0.0
0.0
0.0
1.2
524
1
0
0
0
0
0
0
0
0
0.5 0.75
0
0.43
0.5 0.45 0.71 0.21
0.5 0.15
0
0.85
0.5 0.45
0.71 0.21
3.0
4
0.0 1.6e 14 5.4e 14
4
2.2 0.83
0.0
0.0
0 0.83 0.75
1.7
1.4e 14
0
0
1.7
0.5
2
0
0
0
2
3.5
On a en effet si :
A:=[[3,2,2,2,2],[2,1,2,-1,-1],[2,2,1,-1,1],
[2,-1,-1,3,1],[2,-1,1,1,2]]
P,B:= hessenberg(A,-2)
inv(P)*A*P est gal B et inv(P) est gal tr(P) en calcul numrique.
Avec comme deuxime argument n > 1 et n premier, les calculs sont modulo n et la matrice B est triangulaire.
On tape :
hessenberg([[3,2,2,2,2],[2,1,2,-1,-1],[2,2,1,-1,1],
[2,-1,-1,3,1],[2,-1,1,1,2]],13)
On obtient
1
0
0
0
1
0
0 12
1
0 66
6
0 131 12
0
0
0
1
4
0
0
0
0
1
3 5 8 10
2
2 1
7 5 1
0 2
1 5 11
0 0
7 5 12
0 0
0
0
10
6.49.13
525
6.49.14
526
6.50
Les isomtries
6.50.1
6.50.2
527
et dune
[[0,-1,0],[0,0,-1],[-1,0,0]]
On tape :
mkisom(pi/2,1)
On obtient la matrice en dimension 2, de la rotation plane dangle
[[0,-1],[1,0]]
On tape :
mkisom([1,2],-1)
On obtient la matrice en dimension 2, de la symtrie plane par rapport la droite
dquation x + 2y = 0 :
[[3/5,-4/5],[-4/5,-3/5]]
528
6.51
6.51.1
6.51.2
529
Dcomposition QR : qr
6.51.3
6.51.4
530
On obtient :
[[30.0,0],[38.4,1.2]],[[0.8,0.6],[-0.6,0.8]],[[1,0],[0,1]]
On tape : L*Q et on obtient P*A.
6.51.5
Dcomposition LU : lu
B = [b0 , b1 ..bn1 ]
Vrification :
On tape :
permu2mat(p)*A; L*U
On obtient :
[[4.0,5.0],[3.0,5.0]],[[4.0,5.0],[3.0,5.0]]
Il faut noter que la permutation est diffrente lorsque les donnes sont exactes (le
choix du pivot est plus simple). On tape :
lu([[1,2],[3,4]])
531
On obtient :
[1,0],[[1,0],[3,1]],[[1,2],[0,-2]]
On tape :
lu([[1.0,2],[3,4]])
On obtient :
[1,0],[[1,0],[0.333333333333,1]],[[3,4],
[0,0.666666666667]]
6.51.6
532
6.51.7
6.51.8
svd (singular value decomposition) a comme argument une matrice carre numrique relle dordre n.
svd utilise la librairie lapack
svd(A) renvoie U une matrice orthogonale, s la diagonale dune matrice diagonale S constitue par les valeurs singulires de A et Q une matrice orthogonale
(t Q Q = I) tel que :
A = U.diag(s).tran(Q).
On tape :
533
svd([[1,2],[3,4]])
On obtient :
[[-0.404553584834,-0.914514295677],[-0.914514295677,
0.404553584834]], [5.46498570422,0.365966190626],
[[-0.576048436766,0.81741556047],[-0.81741556047,
-0.576048436766]]
On tape :
(U,s,Q):=svd([[3,5],[4,5]])
On obtient :
[[-0.672988041811,-0.739653361771],[-0.739653361771,
0.672988041811]],[8.6409011028,0.578643354497],
[[-0.576048436766,0.81741556047],[-0.81741556047,
-0.576048436766]]
Vrifions :
On tape :
U*diag(s)*tran(Q)
On obtient :
[[3.0,5.0],[4.0,5.0]]
6.51.9
SVD (singular value decomposition) a comme argument une matrice carre numrique relle dordre n.
SVD(A) renvoie U une matrice orthogonale, s la diagonale dune matrice diagonale S =diag(s) constitue par les valeurs singulires de A et Q une matrice
orthogonale, ,(t Q Q = I) tel que :
A = U.diag(s).tran(Q).
On tape :
SVD([[1,2],[3,4]])
On obtient :
[[[0.914514295677,0.404553584834],[-0.404553584834,0.914514295677]],[0.365966
On tape :
(U,s,Q):=SVD([[3,5],[4,5]])
On obtient :
[[[0.739653361771,0.672988041811],[-0.672988041811,0.739653361771]],[0.578643
Vrifions :
On tape :
U*diag(s)*tran(Q)
On obtient :
[[3.0,5.0],[4.0,5.0]]
534
6.51.10
6.52
6.52.1
535
6.52.2
a2q a deux arguments : une matrice symtrique A reprsentant une forme quadratique q et le vecteur de composantes les variables utilises.
a2q renvoie la forme quadratique q.
On tape :
a2q([[0,1],[1,0]],[x,y])
On obtient :
2*x*y
On tape :
a2q([[1,2],[2,4]],[x,y])
On obtient :
x^2+4*x*y+4*y^2
6.52.3
536
6.52.4
conjugate_gradient(A,y,x0,eps) met en uvre lalgorithme du gradient conjugu pour rsoudre A x = y eps prs, lorsque A est une matrice
symtrique dfinie positive et x0 une solution initiale approche optionnelle.
On tape :
conjugate_gradient([[2,1],[1,5]],[1,0])
On obtient :
[5/9,-1/9]
On tape :
conjugate_gradient([[2,1],[1,5]],[1,0],[0.55,-0.11],1e-2)
On obtient :
[0.555,-0.11]
On tape :
conjugate_gradient([[2,1],[1,5]],[1,0],[0.55,-0.11],1e-10)
On obtient :
[0.555555555556,-0.111111111111]
6.52.5
537
Exemple
Pour les polynmes de degr <n, on considre le produit scalaire dfini par :
Z
P.Q =
P (x).Q(x)dx
1
On tape :
gramschmidt([1,1+x],(p,q)->integrate(p*q,x,-1,1))
Ou on crit la fonction p_scal, on tape :
p_scal(p,q):=integrate(p*q,x,-1,1)
et on tape :
gramschmidt([1,1+x],p_scal)
On obtient :
[1/(sqrt(2)),(1+x-1)/sqrt(2/3)]
6.52.6
6.52.7
538
On obtient :
[[-5/3,5/6],[[-1/(sqrt(2)),1/(sqrt(2))],[-1/(sqrt(2)),
-1/(sqrt(2))]],1,3*x^2+y^2+-7/6,[[(-10+5*i)/6+(1/(sqrt(2))+
(i)/(sqrt(2)))*((sqrt(14)*cos( t))/6+
((i)*sqrt(42)*sin(t))/6),t,0,2*pi,(2*pi)/60]]]
La conique nest pas dgnre et a pour quation rduite :
3x2 + y 2 7/6 = 0
dans le repre dorigine 5/3 + 5 i/6 et daxes parallles aux vecteurs (1, 1)
et (1, 1).
Son quation paramtrique est :
10 + 5 i (1 + i) ( 14 cos(t) + i 42 sin(t))
+
6
6
2
et pour le dessin, le paramtre t varie de 0 2 avec un pas tstep=2/60.
Remarque :
Lorsque la conique est dgnre en 1 ou 2 droite(s), chaque droite nest pas donn
par son quation paramtrique mais par la liste constitue par un vecteur normal
la droite et un point de la droite.
On tape :
conique_reduite(x^2-y^2+3*x+y+2)
On obtient :
[[(-3)/2,1/2],[[1,0],[0,1]],0,x^2-y^2,
[[(-1+2*i)/(1-i),(1+2*i)/(1-i)],
[(-1+2*i)/(1-i),(-1)/(1-i)]]]
On obtient :
(2*sqrt(5*23297^2*126757^*21302293^2))/62906903119301897
Soit :
2*sqrt(5)
On tape :
H1:=projection(D1,M)
longueur(M,F1)/longueur(M,H1)
On obtient :
(2^14*3*13*17*89*311*521*563*769*2609*
sqrt(2*3*49409^2*112249^2*126757^2*
21302293^2*568000439^2*6789838247809^2))/
(2^14*3^2*13*17*89*311*521*563*769*
2609*49409*112249*126757*21302293*568000439*6789838247809)
Soit :
(sqrt(6))/3
6.52.8
539
6.52.9
540
[[(sqrt(6)*sqrt(602/243)*sin(u)*cos(v))/3+
(sqrt(5)*sqrt(602/81)*sin(u)*sin(v))/5+
((-(sqrt(30)))*sqrt(602/81)*cos(u))/15+11/27,
(sqrt(6)*sqrt(602/243)*sin(u)*cos(v))/6+
(sqrt(30)*sqrt(602/81)*cos(u))/6+(-26)/27,
((-(sqrt(6)))*sqrt(602/243)*sin(u)*cos(v))/6+
(2*sqrt(5)*sqrt(602/81)*sin(u)*sin(v))/5+
(sqrt(30)*sqrt(602/81)*cos(u))/30+(-29)/54], u=(0
.. pi),v=(0 .. (2*pi)),ustep=(pi/20),
vstep=((2*pi)/20)]]
Donc la quadrique est un ellipsode eta pour quation :
9 x2 + 3 y 2 + 3 z 2 + (602)/27
dans le repre dorigine [11/27, (26)/27, (29)/54]
de matrice de passage P est :
6
3
6
6
5
5
2 5
5
30
15
30
6
30
30
q 602
q 602
q 602
sin(u)
cos(v)
sin(u)
sin(v)
6
5
30 81 cos(u) 11
243
81
+
x=
3
5
15
27
q
q
602
602
6 243 sin(u) cos(v)
30 81 cos(u)) 26
y
=
+
6
27
q 6
q
q 602
602
602
z=
+
+
6
5
30
54
Remarque :
Lorsque la quadrique est dgnre en 1 ou 2 plan(s), chaque plan nest pas donn
par son quation paramtrique mais par la liste constitue par un vecteur normal au
plan et un point du plan.
On tape :
quadrique_reduite(x^2-y^2+3*x+y+2)
On obtient :
[[(-3)/2,1/2,0],[[1,0,0],[0,1,0],[0,0,-1]],0,x^2-y^2,
[hyperplan([1,1,0],[(-3)/2,1/2,0]),
hyperplan([1,-1,0],[(-3)/2,1/2,0])]]
6.53
6.53.1
541
F F
derive renvoie le gradient de F (Grad(F ) = [ F
x , y , z ] si n = 3).
Exemple
Dterminer le gradient de F (x, y, z) = 2x2 y xz 3 .
On tape :
derive(2*x^2*y-x*z^3,[x,y,z])
Ou on tape :
diff(2*x^2*y-x*z^3,[x,y,z])
Ou on tape :
grad(2*x^2*y-x*z^3,[x,y,z])
On obtient :
[2*2*x*y-z^3,2*x^2,-(x*3*z^2)]
On obtient aprs simplification avec normal(ans()) :
[4*x*y-z^3,2*x^2,-(3*x*z^2)]
Si on veut connaitre les points critiques de F (x, y, z) = 2x2 y xz 3 , il suffit de
taper :
solve(derive(2*x^2*y-x*z^3,[x,y,z]),[x,y,z])
On obtient :
[[0,y,0]]
6.53.2
Le Laplacien : laplacian
542
6.53.3
6.53.4
La divergence : divergence
6.53.5
543
Le rotationnel : curl
].
y
z z
x x
y
On tape :
curl([x*z,-y^2,2*x^y],[x,y,z])
On obtient :
[2*x^y*log(x),x-2*y*x^(y-1),0]
6.53.6
Le potentiel : potential
potential renvoie une fonction U telle que Grad(U ) = V si bien sr, cela est
On sait quun vecteur V est un gradient si et seulement si son rotationnel est nul :
autrement dit si curl(V)=0.
potential est la fonction rciproque de derive.
On tape :
potential([2*x*y+3,x^2-4*z,-4*y],[x,y,z])
On obtient :
2*y*x^2/2+3*x+(x^2-4*z-2*x^2/2)*y
6.53.7
vpotential renvoie un vecteur U tel que Rot( U ) = V si bien sr, cela est
possible ! On dit alors que V est un champ flux conservatif ou un champ solnodal.
La solution gnrale est la somme dune solution particulire et du gradient dune
fonction arbitraire, Xcas renvoie le vecteur solution particulire de premire composante nulle.
V = B = le champ magntique et
U = A = le potentiel vecteur.
vpotential est la fonction rciproque de curl.
On tape :
544
On obtient :
[0,(-(2*y))*z*x,-x^3/3-(-(4*z))*x+3*y]
6.54
quations
6.54.1
6.54.2
6.54.3
6.54. QUATIONS
6.54.4
545
6.54.5
546
6.54.6
6.54. QUATIONS
547
On obtient :
[[1/2,1/2]]
Rsoudre en x, y le systme x2 + y = 2, x + y 2 = 2
On tape :
solve([x^2+y=2,x+y^2=2],[x,y])
On obtient :
[[-2,-2],[1,1],[(-sqrt(5)+1)/2,(1+sqrt(5))/2],
[(sqrt(5)+1)/2,(1-sqrt(5))/2]]
Rsoudre en x, y, z le systme x2 y 2 = 0, x2 z 2 = 0 :
On tape :
solve([x^2-y^2=0,x^2-z^2=0],[x,y,z])
On obtient :
[[x,x,x],[x,-x,-x],[x,-x,x],[x,x,-x]]
Rsoudre cos(2 x) = 1/2
On tape :
solve(cos(2*x)=1/2)
On obtient :
[pi/6,(-pi)/6]
On obtient en ayant coch All_trig_sol :
[(6*pi*n_0+pi)/6,(6*pi*n_0-pi)/6]
Remarque Pour pouvoir par exemple trouver lintersection dune droite (donne
par son quation paramtrique) et un plan on peut mettre les quations sous la
forme dune liste contenant une liste.
Exemple : Trouver lintersection de la droite D dquation paramtrique [y z =
0, z x = 0, x y = 0] et du plan P dquation x 1 + y + z = 0.
On tape
solve([[y-z=0,z-x=0,x-y=0],x-1+y+z=0],[x,y,z])
On obtient :
[[1/3,1/3,1/3]]
Remarque
Diffrence entre solve et csolve : En mode complexe solve renvoie le mme
rsultat que csolve (pour csolve que lon soit en mode complexe ou rel cela
importe peu). Ainsi, si on ne veut pas que le rsultat dpende du mode, pour avoir
les solutions complexes il est prfrable dutiliser csolve.
On tape en mode rel :
solve(re(r*exp(-(i)*t))-1,r)
On obtient :
[1/(cos(t))]
car en mode rel linconnue r est considre comme un nombre rel.
On tape en mode complexe :
solve(re(r*exp(-(i)*t))-1,r)
On obtient :
548
[ x+(i)*1/(sin(t))*(- x*cos(t)+1)]
car en mode complexe, lexpression contient i donc linconnue r est considre
comme un nombre complexe. La solution complexe est :
x+(i)*1/(sin(t))*(- x*cos(t)+1) (la partie relle de r vaut
x qui est un nombre rel quelconque et la partie imaginaire de r est fonction de
x).
On tape en mode complexe ou rel :
csolve(re(r*exp(-(i)*t))-1,r)
On obtient :
[ x+(i)*1/(sin(t))*(- x*cos(t)+1)]
car avec csolve, linconnue r est toujours considre comme un nombre complexe.
6.54.7
6.55
549
6.55.1
syst2mat a comme argument un vecteur contenant un systme dquations linaires et un vecteur contenant les variables.
syst2mat crit le systme AX = B sous la forme dune matrice forme de A
borde droite par B.
On tape :
syst2mat([x+y,x-y-2],[x,y])
On obtient :
[[1,1,0],[1,-1,-2]]
On tape :
syst2mat([x+y=0,x-y=2],[x,y])
On obtient :
[[1,1,0],[1,-1,-2]]
Attention ! ! !
Il faut purger auparavant les variables (ici x et y).
6.55.2
ref permet de rsoudre un systme dquations linaires que lon crit sous forme
matricielle :
A*X=B
Le paramtre de ref est la "matrice augmente" du systme (celle forme par la
matrice A du systme et ayant comme dernier vecteur colonne le second membre
B).
Le rsultat est une matrice [A1,B1] : A1 a des zros au dessous de sa diagonale
et les solutions de :
A1*X=B1
sont les mmes que celles de :
A*X=B
ref peut travailler dans Z/pZ.
Par exemple, soit rsoudre le systme dans R et dans Z/5Z :
3x + y = 2
3x + 2y =
2
On tape pour rsoudre le systme dans R :
550
On obtient :
[[1,1/3,-2/3],[0,1,4]]
cela signifie donc que :
y = 4 et x = 2 sont solutions du systme. On tape pour rsoudre le systme dans
Z/5Z :
ref([[3,1,-2],[3,2,2]]%5)
On obtient :
[[1 % 5,2 % 5,1 % 5],[0 % 5,1 % 5,-1 % 5]]
cela signifie donc que :
y = 1%5 et x = 3%5 sont solutions du systme.
Remarque
Lorsque le nombre de colonnes est gal au nombre de lignes +1 ref ne divise pas
par le pivot de la derniere colonne, par exemple, on tape :
ref([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3],[1,0,0,1,-a4]])
On obtient :
[[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3],[0,0,0,0,a1-a2+a3-a4]]
Ainsi on peut savoir que si a1-a2+a3-a4 nest pas nul, il ny a pas de solution.
6.55.3
rref permet de rsoudre un systme dquations linaires que lon crit sous
forme matricielle (voir aussi 6.33.17) :
A*X=B
rref a un ou deux paramtres.
Si rref na quun paramtre, ce paramtre est la "matrice augmente" du
systme (celle forme par la matrice A du systme et ayant comme dernier
vecteur colonne le second membre B).
Le rsultat est une matrice [A1,B1] : [A1,B1] a des zros de part et
dautre de sa diagonale et des 1 sur sa diagonale et les solutions de :
A1*X=B1
sont les mmes que celles de :
A*X=B
rref peut travailler dans Z/pZ.
Par exemple, soit rsoudre le systme dans R et dans Z/5Z :
3x + y = 2
3x + 2y =
2
On tape pour rsoudre le systme dans R :
551
rref([[3,1,-2],[3,2,2]])
On obtient :
[[1,0,-2],[0,1,4]]
cela signifie donc que :
x = 2 et y = 4 sont solutions du systme.
On tape pour rsoudre le systme dans Z/5Z :
rref([[3,1,-2],[3,2,2]]%5)
On obtient :
[[1 % 5,0,-2 % 5],[0,1 % 5,-1 % 5]]
cela signifie donc que :
x = 2%5 et y = 1%5 sont solutions du systme.
Si rref a deux paramtres, le deuxime paramtre est un entier k qui permet de ne faire Gauss-Jordan que sur les k premires colonnes ou est loption
conserver_pivot ou keep_pivot.
On tape :
rref([[3,1,-2,1],[3,2,2,2]],1)
On obtient :
[[3,1,-2,1],[0,1,4,1]]
Loption conserver_pivot ou keep_pivot permet de ne pas diviser
par les pivots, cela pour viter de diviser par des pivots nuls.
par exemple, pour rsoudre le systme dans R et dans Z/2Z :
z1 + z2 = a 1
z2 + z3 = a 2
z + z4 = a 3
3
z4 + z1 = a 4
On tape pour rsoudre le systme dans R :
A:=syst2mat([z1+z2=a1,z2+z3=a2,z3+z4=a3,z4+z1=a4],
[z1,z2,z3,z4])
puis,
rref(A,keep_pivot)
ou bien, on tape directement :
rref([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3],
[1,0,0,1,-a4]],keep_pivot)
On obtient :
[[a1-a2+a3-a4,0,0,a1-a2+a3-a4,0],
[0,a1-a2+a3-a4,0,-a1+a2-a3+a4,0],
[0,0,a1-a2+a3-a4,a1-a2+a3-a4,0],
[0,0,0,0,a1-a2+a3-a4]]
Remarque
Lorsque le nombre de colonnes est gal au nombre de lignes +1 rref ne
divise pas par le pivot de la derniere colonne, par exemple, pour rsoudre le
systme :
z1 + z2 = a 1
z2 + z3 = a 2
z
+ z4 = a 3
3
z4 + z1 = a 4
On tape :
552
553
[[1,0,-2,0],[0,1,4,1]]
cela signifie donc que :
x = 2 et y = 4 sont solutions du systme
3x + y = 2
3x + 2y =
2
et que x = 0 et y = 1 sont solutions du systme
3x + y = 1
3x + 2y = 2
6.55.4
simult permet de rsoudre un systme dquations linaires (resp plusieurs systmes dquations linaires qui ne diffrent que par leur second membre).
On crit le (rep les) systme(s) sous forme matricielle (voir aussi 6.33.17) :
A*X=b (resp A*X=B)
Les paramtres de simult sont la matrice A du systme et le vecteur colonne (i.e.
une matrice dune colonne) b form par le second membre du systme rsoudre
(resp la matrice B dont les colonnes sont les vecteurs b des second membres des
systmes rsoudre).
Le rsultat est un vecteur colonne solution du systme (resp une matrice dont les
colonnes sont les solutions des diffrents systmes).
Par exemple, soit rsoudre le systme :
3x + y = 2
3x + 2y =
2
On tape :
simult([[3,1],[3,2]],[[-2],[2]])
On obtient :
[[-2],[4]]
cela signifie donc que :
x = 2 et y = 4 sont solutions du systme.
On tape :
simult([[3,1],[3,2]],[[-2,1],[2,2]])
On obtient :
[[-2,0],[4,1]]
cela signifie donc que :
x = 2 et y = 4 sont solutions du systme
3x + y = 2
3x + 2y =
2
et que x = 0 et y = 1 sont solutions du systme
3x + y = 1
3x + 2y = 2
554
6.55.5
6.55.6
linsolve permet de rsoudre un systme dquations linaires o chaque quation est de la forme Xpr = 0 o Xpr est une expression.
linsolve a comme paramtres la liste des quations et la liste des variables.
linsolve renvoie une liste qui est solution du systme dquations.
linsolve permet de rsoudre aussi un systme dquations linaires dans Z/nZ.
On tape :
linsolve([2*x+y+z=1,x+y+2*z=1,x+2*y+z=4],[x,y,z])
On obtient :
[1/-2,5/2,1/-2]
donc
1
5
1
x = ,y = ,z =
2
2
2
2x + y + z = 1
x + y + 2z = 1
x + 2y + z = 4
On tape :
linsolve([2*x+y+z-1,x+y+2*z-1,x+2*y+z-4]%3,[x,y,z])
On obtient :
[1 % 3,1 % 3,1 % 3]
555
donc
x = 1%3, y = 1%3, z = 1%3
sont solutions du systme :
(2x + y + z 1) %3 = 0
(x + y + 2z 1) %3 = 0
(x + 2y + z 4) %3 = 0
6.55.7
LSQ a pour arguments une matrice A et un vecteur (rep une matrice) B qui reprsentent le (resp les) systme(s) linaire(s) A*X=B si B est un vecteur (resp une
matrice).
LSQ(A,B) calcule la norme minimale selon la mthode des moindres carrs du
systme linaire A*X=B sur- ou sous-dtermin cest pour estimer la solution dun
systme linaire A*X=B (si B est un vecteur) ou des systmes linaires A*X=B (si
B est une matrice) pour :
un systme sur-dtermin (on a plus de lignes que de colonnes)
si B est un vecteur : on cherche X de norme euclidienne minimum qui
minimise la norme euclidienne de (AX-B).
si B est une matrice : on cherche Xj de norme euclidienne minimum parmi
les solutions qui minimise la norme euclidienne de (AXj-Bj)
un systme sous determin (en gnral on a plus de colonnes que de lignes)
On cherche X qui minimise la norme
qP de Frobenius de (AX-B) (la norme de
2
Frobenius dune matrice M est
j,k |M (j, k)| ).
un systme exactement dtermin (le nombre de colonnes est gal au nombre
de lignes et A est inversible).
On utilise inv(A)*B pour avoir X qui produit des rsultats faux en calcul
approch si la matrice est mal conditionne (quations indpendantes proche
lune de lautre)
On tape :
LSQ([[1,2],[3,4]],[5,11])
On obtient :
[[1],[2]]
En effet si X:=[[1],[2]], on a [[1,2],[3,4]]*X=[[5],[11]] On tape :
LSQ([[1,2],[3,4]],[7,9])
On obtient :
[[-5],[6]]
En effet si X:=[[-5],[6]], on a [[1,2],[3,4]]*X=[[7],[9]] On tape :
LSQ([[1,2],[3,4]],[[5,7],[11,9]])
On obtient :
556
6.55.8
557
6.56
558
6.56.1
559
560
561
desolve([y+y=cos(x),y(0)^2=1,y(0)=1],y)
On obtient :
[-cos(x)+(x+2)/2*sin(x),cos(x)+(x+2)/2*sin(x)]
chaque composante de cette liste est une solution.On a donc deux solutions.
5. Rsoudre :
y 00 + 2y 0 + y = 0
On tape alors :
desolve(y+2*y+y=0,y)
On obtient les solutions dpendant de 2 constantes dintgration c_0
et c_1 :
(x*c_0+x*c_1+c_0)*exp(-x)
6. Rsoudre :
y 00 6y 0 + 9y = xe3x
On tape alors :
desolve(y-6*y+9*y=x*exp(3*x),y)
On obtient :
(x^3+(-(18*x))*c_0+6*x*c_1+6*c_0)*1/6*exp(3*x)
la solution dpend de 2 constantes dintgration c_0 et c_1.
Exemples de rsolution dune quation diffrentielle linaire du premier
ordre.
1. Rsoudre :
xy 0 + y 3x2 = 0
On tape alors :
desolve(x*y+y-3*x^2,y)
Ou on tape :
desolve(x*y+y-3*x^2)
On obtient :
(c_0+x^3)/x
2. Rsoudre :
y 0 + x y = 0, y(0) = 1
On tape alors :
desolve([y+x*y=0, 0,1])
Ou on tape :
desolve([y+x*y=0, y(0)=1],y)
Ou on tape :
desolve((y+x*y=0) && (y(0)=1),[x,y])
562
563
On obtient :
[(-ln(2)*x^2+x^2*ln(x))/(x^2-1)]
6. Rsoudre :
p
p
1 + x2 y 0 x y = 1 + x2
On tape alors :
desolve(y*sqrt(1+x^2)-x-y-sqrt(1+x^2))
Ou on tape :
desolve(y*sqrt(1+x^2)-x-y-sqrt(1+x^2),y)
On obtient :
(-c_0+ln(sqrt(x^2+1)-x))/(x-sqrt(x^2+1))
Exemples de rsolution dune quation diffrentielle variables spares.
1. Rsoudre :
y0 = 2 y
On tape alors :
desolve(y=2*sqrt(y))
Ou on tape :
desolve(y=2*sqrt(y),y)
On obtient :
[x^2+-2*x*c_0+c_0^2]
2. Rsoudre :
xy 0 ln(x) y(3 ln(x) + 1) = 0
On tape alors :
desolve(x*y*ln(x)-(3*ln(x)+1)*y)
Ou on tape :
desolve(x*y*ln(x)-(3*ln(x)+1)*y,y)
On obtient :
c_0*x^3*ln(x)
Exemples de rsolution dune quation diffrentielle de Bernoulli du premier ordre, de type a(x)y 0 + b(x)y = c(x)y n avec n=constante relle.
Ces quations se rsolvent en divisant par y n , car on se ramne une quation linaire en u = 1/y n1 .
1. Rsoudre :
xy 0 + 2y + xy 2 = 0
On tape alors :
desolve(x*y+2*y+x*y^2)
Ou on tape :
564
p
x2 + y 2
On tape alors :
desolve(x*y=y+sqrt(x^2+y^2))
565
Ou on tape :
desolve(x*y=y+sqrt(x^2+y^2),y)
On obtient :
[(-i)*x,(i)*x,pnt[c_0/(sqrt( t^2+1)- t),(
t*c_0)/(sqrt( t^2+1)- t)]]
donc les solutions sont :
y = ix, y = ix
et la famille de courbes dquation paramtrique
p
p
x = c0 /( t2 + 1 t), y = t c0 /( t2 + 1 t)
(le paramtre est not t dans la rponse.
Exemples de rsolution dune quation diffrentielle du premier ordre ayant
un facteur intgrant.
1. Rsoudre :
yy 0 + x
On tape alors :
desolve(y*y+x)
Ou on tape :
desolve(y*y+x,y)
On obtient :
[sqrt(-2*c_0-x^2),-(sqrt(-2*c_0-x^2))]
dans cet exemple, xdx + ydy est une diffrentielle totale, et le facteur
intgrant est 1.
2. Rsoudre :
2xyy 0 + x2 y 2 + a2 = 0
On tape alors :
desolve(2*x*y*y+x^2-y^2+a^2)
Ou on tape :
desolve(2*x*y*y+x^2-y^2+a^2,y)
On obtient :
[sqrt(a^2-x^2-c_1*x),-(sqrt(a^2-x^2-c_1*x))]
dans cet exemple le facteur intgrant est 1/x2 .
Exemple de rsolution dune quation diffrentielle du premier ordre incomplte en x.
Rsoudre :
(y + y 0 )4 + y 0 + 3y = 0
566
y(t) = t 8 t4
mathmaticien
Alexis Clairaut.
On pose dy/dx = y 0 = t et on remplace lquation diffrentielle y =
x y 0 + f (y 0 ) par le systme paramtrique :
y = x t + f (t) et dy = tdx
ce systme est quivalent au systme obtenu en liminant dy :
y = x t + f (t) et (x + f 0 (t))dt = 0
car dy = tdx + xdt + f 0 (t)dt = tdx
On a alors deux types de solutions :
celles qui vrifient y = x t + f (t) et dt = 0
donc t = m = cste et y = mx + f (m)
y = mx + f (m) est lquation des droites Dm . Ces droites sont appeles
les solutions gnrales de lquation.
celles qui vrifient y = x t + f (t) et x + f 0 (t) = 0
cest dire la courbe dquation paramtrique :
x = f 0 (t) et y = tf 0 (t) + f (t) cette solution est appele solution
singulire.
La courbe reprsentative de cette solution est lenveloppe de la famille des
droites Dm .
En effet si y = mx + f (m), lenveloppe de ces droites est lensemble des
points de coordonnes x, y qui vrifient :
y = mx + f (m) et 0 = x + f 0 (m) lorsque m R
qui sont les 2 quations qui definissent la solution singulire/
Des solutions hybrides peuvent tre obtenues par raccordement de ces
diffrentes courbes solutions, dautant plus simplement quil sagit dune
567
p
a2 + b2 y 02 = 0
On tape alors :
desolve(y-x*y-sqrt(a^2+b^2*y^2),y)
On obtient :
[c_0*x+sqrt(a^2+b^2*c_0^2), [-b^2*2*
t*(sqrt(a^2+b^2* t^2))^-1/2,- t*b^2*2*
t*(sqrt(a^2+b^2* t^2))^-1/2+sqrt(a^2+b^2*
t^2)]]
568
6.56.2
569
570
ilaplace ou invlaplace :
On tape :
ilaplace(1/(x^2+1))
On obtient :
sin(x)
On tape :
ilaplace(1/(t^2+1),t)
On obtient :
sin(t)
On tape :
ilaplace(1/(t^2+1),t,x)
On obtient :
sin(x)
On utilise les proprits suivantes :
L(y 0 )(x) = y(0) + x.L(y)(x)
L(y 00 )(x) = y 0 (0) + x.L(y 0 )(x)
= y 0 (0) x.y(0) + x2 .L(y)(x)
On a donc si y00(x) + p.y0(x) + q.y(x) = f (x) :
L(f )(x) = L(y 00 + p.y 0 + q.y)(x)
= y 0 (0) x.y(0) + x2 .L(y)(x) p.y(0) + p.x.L(y)(x)) + q.L(y)(x)
= (x2 + p.x + q).L(y)(x) y 0 (0) (x + p).y(0)
soit, si a = y(0) et b = y 0 (0) :
Laplace(f )(x) = (x2 + p.x + q).Laplace(y)(x) (x + p).a b
La solution est alors :
y(x) = L1 ((L(f )(x) + (x + p).a + b)/(x2 + p.x + q))
Exemple :
Rsoudre :
y00 6.y0 + 9.y = x.e3.x ,
Ici, p = 6, q = 9.
On tape :
y(0) = c_0,
y0(0) = c_1
571
laplace(x*exp(3*x))
On obtient :
1/(x^ 2-6*x+9)
On tape :
ilaplace((1/(x^2-6*x+9)+(x-6)*c_0+c_1)/(x^2-6*x+9))
On obtient
(216*x^3-3888*x*c_0+1296*x*c_1+1296*c_0)*exp(3*x)/1296
aprs simplification et factorisation (commande factor) la solution y scrit :
(-18*c_0*x+6*c_0+x^3+6*x*c_1)*exp(3*x)/6
On peut bien sr taper directement :
desolve(y-6*y+9*y=x*exp(3*x),y)
On obtient bien :
exp(3*x)*(-18*c_0*x+6*c_0+x^3+6*x*c_1)/6
6.57
6.57.1
si f (z) = ztrans(an , n, z) on a
f (z) =
inf
X
an
n=0
zn
On tape :
ztrans(1)
On obtient :
572
OnP
a en effet :
1
= inf
n=0 xn =
On tape :
1
1 x1
x
x1
ztrans(1,n,z)
On obtient :
z/(z-1)
On a en effet :
1 + z1 + z12 + z13 +
1
z4
+ .. =
Pinf
1
n=0 z n
On tape :
1
1 z1
z
(z1)
ztrans(x)
On obtient :
x/(x^2-2*x+1)
On tape :
ztrans(n,n,z)
On obtient :
z/(z^2-2*z+1)
Pinf 1
1
z1 =
zn
Pn=1
inf
n
1
1
0
= ( (z1) ) = n=1 z n1
(z1)2
P
inf n
z
Donc (z1)
2 =
n=1 z n
On a en effet :
6.57.2
573
si an = invztrans(Rz , z, n) on a
Rz =
inf
X
an
n=0
zn
On tape :
invztrans(x/(x-1))
On obtient :
1
On tape :
invztrans(z/(z-1),z,n)
On obtient :
1
On a en effet :
z
(z1)
1
1 z1
=1+
1
z
1
z2
1
z3
1
z4
+ .. =
Pinf
1
n=0 z n
On tape :
invztrans(x/(x-1)^2)
On obtient :
x
On tape :
invztrans(z/(z-1)^2,z,n)
On obtient :
n
6.58
Autres fonctions
6.58.1
574
epsilon2zero((1e-13+x)*100000)
On obtient (avec epsilon=1e-10) :
(0+x)*100000
On tape :
epsilon2zero(0.001+x)
On obtient (avec epsilon=0.0001) :
0.001+x
6.58.2
6.58.3
6.58.4
575
6.58.5
576
6.58.6
6.58.7
Chapitre 7
7.1.1
mean calcule la moyenne numrique des lments dune liste (ou de chaque colonne dune matrice).
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
mean(A)
On obtient :
11/2
En effet (0+1+...+11)=66 et 66/12=11/2
On tape :
mean([[1,2],[3,4]])
On obtient :
[2,3]
En effet (1+3)/2=2 et (2+4)/2=3.
mean calcule la moyenne numrique des lments dune liste (respectivement de
chaque colonne dune matrice) pondre par une liste (respectivement matrice) de
mme taille donne comme deuxime argument.
On tape :
577
578
On obtient :
23/3
En effet : 1*1+2*2+..11*11=23*12*11/6=23*2*11 et 1+2+..11=66 donc :
mean(A,A)=23*2*11/66=23/3
On tape :
mean([[1,2],[3,4]],[[1,2],[3,4]])
On obtient :
[5/2,10/3]
En effet : (1*1+3*3)/(1+3)=5/2 et (2*2+4*4)/(2+4)=10/3
7.1.2
stddev calcule lcart-type numrique des lments dune liste (ou de chaque
colonne dune matrice).
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
stddev(A)
On obtient :
sqrt(143/12)
On tape :
stddev([[1,2],[3,4]])
On obtient :
[1,1]
stddev calcule lcart-type numrique des lments dune liste pondre par une
autre liste donne comme deuxime argument.
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
stddev(A,A)
On obtient :
sqrt(65/9)
7.1.3
579
580
7.1.4
La variance : variance
7.1.5
La mdiane : median
7.1.6
581
quartiles renvoie la matrice colonne forme par : le minimum, le premier quartile, la mdiane, le troisime quartile et le maximum des lments dune liste.
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
quartiles(A)
On obtient :
[[0.0],[2.0],[5.0],[8.0],[11.0]]
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
quartiles(A,A)
On obtient :
[1,6,8,10,11]
7.1.7
582
7.1.8
7.1.9
583
7.1.10
584
7.1.11
accumulate_head_tail permet de regrouper les premiers termes et les derniers termes dune liste en les remplacant par leur somme.
Les paramtres sont la liste, le nombre de termes que lon regroupe au dbut de la
liste et le nombre de termes lon regroupe en fin de la liste.
On tape :
accumulate_head_tail([0,1,1,0,2,2,3,3,4,3,1,1],4,2)
On obtient :
[2,2,2,3,3,4,3,2]
7.1.12
7.1.13
histogram trace lhistogramme des donnes de data, on peut prciser une liste
deffectifs, ou un nombre nc de classes ou le mimimum classmin des classes et la
largeur classsize des classes.
histogram permet de visualiser la fonction densit des frquences : on met en
abscisse les classes et en ordonne la densit des frquences (si on a des valeurs
discrtes elles sont considres comme tant le centre de la classe). Lhistogramme
est donc un graphique en escalier dans lequel les frquences des diffrentes classes
sont reprsentes par les aires des diffrents rectangles situs sous les diffrents
paliers.
On rappelle que, si leffectif de la classe [aj1 ; aj ] est nj , la frquence de la classe
[aj1 ; aj ] est fj = nj /N (si N est leffectif total) et la densit de frquence de la
classe [aj1 ; aj ] est fj /(aj aj1 ).
On tape :
histogram([[1.5..1.65,50],[1.65..1.7,20],[1.7..1.8,30]])
La fentre graphique souvre automatiquement et on obtient lhistogramme de la
srie [[1.5..1.65,50],[1.65..1.7,20],[1.7..1.8,30]], condition davoir dfini correctement la configuration du graphique.
585
Largument de histogram peut aussi tre une liste de valeurs discrtes, dans
ce cas, les classes commencent une valeur (class_min) et sont toutes de mme
largeur (class_size) soit dfinies par dfaut ( 0 et 1, valeurs modifiables dans
la configuration graphique) ou passes en second et troisime arguments.
On tape :
histogram([0,1,2,1,1,2,1,2,3,3])
alors class_min=0 et class_size=1 et les valeurs 0,1,2,3 ne sont donc pas
centres.
Mais si on tape :
histogram([0,1,2,1,1,2,1,2,3,3],-0.5,1)
alors class_min=-0.5 et class_size=1 et les valeurs 0,1,2,3 sont donc
centres.
et cela renvoie la mme chose que :
histogram([[0,1],[1,4],[2,3],[3,2]])
On tape :
histogram(seq(rand(1000),k,0,100),0,100)
Ici on a choisi class_min=0 et class_size=100.
7.1.14
586
[[1,0.13],[2,0.13],[3,0.18],[4,0.13],[5,0.19],[6,0.24]]
On tape :
frequences([(rand(6)+1)$(k=1..1000)])
On obtient par exemple :
[[1,0.19],[2,0.155],[3,0.167],[4,0.156],[5,0.183],[6,0.149]]
On tape :
frequences([(rand(6)+1)$(k=1..10000)])
On obtient par exemple :
[[1,0.1648],[2,0.1703],[3,0.1667],[4,0.1671],[5,0.1727],[6,0.1584]]]
7.1.15
587
588
On tape :
L:=[(rand(6)+1)$(k=1..100)]
CL1:=classes(L)
On obtient :
[[1.0..2.0,15],[2.0..3.0,22],[3.0..4.0,23],[4.0..5.0,17],
[5.0..6.0,8],[6.0..7.0,15]]
Ou on tape :
L:=[(rand(6)+1)$(k=1..100)]
CL2:=classes(L,0.5,1)
On obtient :
[[0.5..1.5,15],[1.5..2.5,22],[2.5..3.5,23],[3.5..4.5,17],
[4.5..5.5,8],[5.5..6.5,15]]
On tape :
cumulated_frequencies(CL1)
On obtient :
le graphe des frquences cumules de CL1 allant de 1 7
Ou on tape :
cumulated_frequencies(CL2)
On obtient :
le graphe des frquences cumules de CL2 allant de 0.5
6.5 et sera donc dcal par rapport au prcdent
7.1.16
diagramme_batons([["France",6],["Allemagne",12],["Suisse",5]])
La fentre graphique souvre automatiquement et on obtient le dessin de 3 rectangles de mme largeur et de hauteur respective 6,12,5. On peut faire plusieurs
diagrammes en batons sur le mme graphique.
On tape :
diagramme_batons([[2,"xyz","abc"],["A",2,5],["B",5,6],["C",7,7]])
On obtient :
7.1.17
589
7.2
590
7.2.1
La covariance : covariance
591
662/121
- si les couples a[j], b[k] ont pour effectif N [j, k] (j = 0..p 1, k = 0..q 1),
covariance a pour argument deux listes a, b de longueurs respectives p et q et
une matrice N de p lignes et q colonnes ou encore,
afin de pouvoir crire les donnes de faon plaisante dans le tableur, covariance
peut aussi avoir deux arguments, une matrice M et -1.
M est alors un tableau deux entres gal :
a\b
b[0]
...
b[q 1]
a[0]
N [0, 0]
...
N [0, q 1]
M =
...
...
...
...
a[p 1] N [p 1, 0] ... N [p 1, q 1]
covariance(a,b,N) ou covariance(M,-1) calcule la covariance numrique des couples a[j], b[k] pondrs par Nj,k .
On tape :
covariance([1,2,3,4],[1,4,9,16],[[3,0,0,0],
[0,1,0,0],[0,0,5,0],[0,0,0,2]])
On obtient :
662/121
On tape :
covariance([[b\a,1,2,3,4],[1,3,0,0,0],
[4,0,1,0,0],[9,0,0,5,0],[16,0,0,0,2]],-1)
On obtient :
662/121
7.2.2
La corrlation : correlation
592
On obtient :
100/(4*sqrt(645))
On tape (on a A:=[0,1,2,3,4,5,6,7,8,9,10,11]) :
correlation(A,A^2)
On obtient :
18876/(572*sqrt(1173))
Quand les effectifs sont diffrents de 1 :
- si les couples a[j], b[j] ont pour effectif n[j] (j = 0..p 1), correlation
a pour argument trois listes a, b, n de mme longueur p, ou une matrice de trois
colonnes a, b, n et de p lignes [a[j], b[j], n[j]].
correlation calcule la corrlation numrique des deux premires listes qui
sont pondres par la liste donne comme dernier argument ou calcule la corrlation numrique des deux colonnes de cette matrice qui sont pondres par la
troisime colonne.
On tape :
correlation([1,2,3,4],[1,4,9,16],[3,1,5,2])
Ou on tape :
correlation([[1,1,3],[2,4,1],[3,9,5],[4,16,2]])
On obtient :
662/(180*sqrt(14))
- si les couples a[j], b[k] ont pour effectif N [j, k] (j = 0..p 1, k = 0..q 1),
correlation a pour argument deux listes a, b de longueurs respectives p et q et
une matrice N de p lignes et q colonnes ou encore,
afin de pouvoir crire les donnes de faon plaisante dans le tableur, correlation
peut aussi avoir pour argument, une matrice M et -1.
M est alors un tableau deux entres gal :
a\b
b[0]
...
b[q 1]
a[0]
N [0, 0]
...
N [0, q 1]
M =
...
...
...
...
a[p 1] N [p 1, 0] ... N [p 1, q 1]
correlation(a,b,N) ou correlation(M,-1) calcule la corrlation numrique des couples a[j], b[k] pondrs par Nj,k .
On tape :
correlation([1,2,3,4],[1,4,9,16],[[3,0,0,0],[0,1,0,0],
[0,0,5,0],[0,0,0,2]])
On obtient :
593
662/(180*sqrt(14))
On tape :
correlation([["b\a",1,2,3,4],[1,3,0,0,0],
[4,0,1,0,0],[9,0,0,5,0],[16,0,0,0,2]],-1)
On obtient :
662/(180*sqrt(14))
7.2.3
594
On obtient :
[662/121,662/(180*sqrt(14))]
On tape :
covariance_correlation([["b\a",1,2,3,4],[1,3,0,0,0],
[4,0,1,0,0],[9,0,0,5,0],[16,0,0,0,2]],-1)
On obtient :
[662/121,662/(180*sqrt(14))]
7.2.4
7.2.5
polygonplot a pour arguments deux listes ou une matrice ayant deux colonnes.
polygonplot permet de visualiser les segments de droites reliant les diffrents
points du nuage de points dfinis par largument et ordonns selon les abscisses
croissantes. Si vous voulez que les points soient relis dans lordre donns il faut
utiliser listplot
On tape :
polygonplot([[0,0],[1,1],[2,4],[3,9],[4,16]])
Ou on tape car les points seront ordonns selon les abscisses croissantes :
polygonplot([[2,4],[0,0],[3,9],[1,1],[4,16]])
Ou on tape :
polygonplot([0,1,2,3,4],[0,1,4,9,16])
La fentre graphique souvre automatiquement et on obtient le dessin des 4 segments reliant les 5 points ((0,0),...(4,16)), condition davoir dfini correctement
la configuration du graphique (menu Cfg).
7.2.6
595
listplot ou plotlist a pour argument une liste l ou une matrice ayant deux
colonnes.
listplot ou plotlist permet de visualiser les segments reliant le nuage de
points ayant pour abscisse [0,1,2...n] et pour ordonne l ou pour coordonnes une ligne de la matrice. listplot ou plotlist relie par des segments de
droites, les diffrents points du nuage, mais sans rordonner les points contrairement polygonplot qui rordonne les points selon leur abscisse puis les relie.
On tape :
listplot([0,1,4,9,16])
Ou on tape :
listplot([[0,0],[1,1],[2,4],[3,9],[4,16]])
La fentre graphique souvre automatiquement et on obtient condition davoir
dfini correctement la configuration du graphique (menu Cfg) :
le dessin des 5 points ((0,0),(1,1),...(4,16)) relis
par 4 segments
On tape si A est une matrice ayant 5 lignes et 2 colonnes :
A:=[[0,0],[1,1],[5,4],[3,9],[4,16]]
listplot(A[0..4,0..1])
La fentre graphique souvre automatiquement et on obtient :
les 5 points relis par 4 segments
Bien voir la diffrence entre :
listplot([[0,0],[1,1],[5,4],[3,9],[4,16]])
polygonplot([[0,0],[1,1],[5,4],[3,9],[4,16]])
Attention
listplot([0,1,2,3,4],[0,1,4,9,16]) ou
listplot([[0,1,2,3,4],[0,1,4,9,16]]) nest pas valide !
7.2.7
596
polygonscatterplot([[0,0],[1,1],[2,4],[3,9],[4,16]])
Ou on tape :
polygonscatterplot([0,1,2,3,4],[0,1,4,9,16])
La fentre graphique souvre automatiquement et on obtient le dessin des 5 points
((0,0),...(4,16)) relis par 4 segments, condition davoir dfini correctement la
configuration du graphique (menu Cfg).
7.2.8
tant donn une matrice 2 lignes donnant les coordonnes de points : apres
avoir ordonn les abcisses de ces points, ces points dfinissent une ligne polygonale. On veut avoir les coordonnes des points de cette ligne pour des points dfinis
de maniere rgulire.
linear_interpolate a 4 arguments, une matrice A 2 lignes donnant les coordonnes des points dune ligne polygonale, la valeur minimum des x (xmin), la
valeur maximum des x (xmax) et le pas (xstep).
linear_interpolate renvoie les coordonnes des points de la ligne polygonale pour x variant de xmin xmax avec un pas gal xstep.
Remarque on doit avoir xmin et xmax dans lintervalle [min(A[0]);max(A[0])].
On tape :
linear_interpolate([[1,2,6,9],[3,4,6,12]],1,9,1)
On obtient :
[[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0],[3.0,4.0,4.5,5.0,5.5,6.0,8.0,10
On tape :
linear_interpolate([[1,2,6,9],[3,4,6,12]],2,7,1)
On obtient :
[[2.0,3.0,4.0,5.0,6.0,7.0],[4.0,4.5,5.0,5.5,6.0,8.0]]
On tape :
linear_interpolate([[1,2,9,6],[3,4,6,12]],1,9,1)
On obtient :
[[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0],[3.0,4.0,6.0,8.0,10.0,12.0,10.0
7.2.9
597
Pour approcher les donnes par la droite des moindres carrs ayant pour quation y = mx + b, on utilise linear_regression qui renvoie le couple (m, b).
Si les donnes sont xi , yi avec i = 1..n, on a :
)
m = cov(X,Y
(X)2
et b = Y mX
car la somme des carrs des distances di = |yi mxi bi | est minimale pour ces
valeurs et ce minimum (qui est donc lerreur quadratique moyenne verticale) vaut
cov(X,Y
(1 2 )(Y )2 o r est le coefficient de corrlation ( = (X)(Y
) ).
linear_regression a les mmes arguments que covariance.
On tape :
linear_regression([[0,0],[1,1],[2,4],[3,9],[4,16]])
Ou on tape :
linear_regression([0,1,2,3,4],[0,1,4,9,16])
On obtient :
4,-2
cest donc la fonction linaire dquation y = 4x 2 qui approche au mieux les
donnes.
On tape :
X:=[0,1,2,3,4,5,6,7,8,9,10]
Y:=[7.3,9.53,12.47,16.3,21.24,27.73,36.22,
47.31,61.78,80.68,105]
Z:=log(Y)
linear_regression(X,Z)
On obtient :
0.266729219953,1.98904252589
cest donc la fonction linaire dquation z = ln(y) = 0.267x + 1.99 qui approche
au mieux les donnes.
7.2.10
598
On obtient :
Le graphe de la droite dquation y = 331 x/70 22/5
car cest la fonction linaire dquation y = 331 x/70 22/5 qui approche au
mieux les donnes. Remarque On remarquera que lquation de la courbe represente ainsi que la valeur du coefficient de corrlation des donnes sont crits en
bleu.
Si on veut avoir lquation et/ou le coefficient de corrlation sur le dessin il faut
rajouter comme dernier argument, loption equation et/ou correlation.
7.2.11
7.2.12
599
exponential_regression_plot([0,1,2,3,4,5,6,7,8,9,10],[7.3,
9.53,12.47,16.3,21.24,27.73,36.22,47.31,61.78,80.68,105])
On obtient :
Le graphe de la fonction expopnentielle dquation
y = 7.30853268031 (1.30568684451)x
car cest la fonction expopnentielle dquation :
y = 7.30853268031 (1.30568684451)x qui approche au mieux les donnes. Remarque On remarquera que lquation de la courbe represente ainsi que la valeur
du coefficient de corrlation de X, ln(Y ) (si les donnes sont X, Y )) sont crits en
bleu.
Si on veut avoir lquation et/ou le coefficient de corrlation sur le dessin il faut
rajouter comme dernier argument, loption equation et/ou correlation.
7.2.13
evalf(logarithmic_regression([[1,1],[2,4],[3,9],[4,16]]))
Ou on tape :
evalf(logarithmic_regression([1,2,3,4],[1,4,9,16]))
On obtient :
10.1506450002,-0.564824055818
cest donc la fonction logarithmique dquation y = 10.15 ln(x) 0.565 qui approche au mieux les donnes.
On tape :
X:=[1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8]
Y:=[1.6,2.15,2.65,3.12,3.56,3.99,4.4,4.8,5.18,
5.58,5.92,6.27,6.62,7.06,7.3]
600
On obtient :
2.83870854646,0.843078064152
cest donc la fonction logarithmique dquation y = 0.84 ln(x) + 2.84 qui approche au mieux les donnes .
On vrifie en tapant :
linear_regression(ln(X),Y)
On obtient :
2.83870854646,0.843078064152
et le coefficient de corrlation est :
correlation(ln(X),Y)
On obtient :
0.977939822434
On peut aussi taper pour chercher une meilleur approximation :
logarithmic_regression(X,log(Y))
On obtient :
0.732351031846,0.467599676658
cest donc la fonction logarithmique dquation z = ln(y) = 0.73 ln(x) + 0.47 qui
approche au mieux les donnes.
On vrifie en tapant :
linear_regression(ln(X),ln(Y))
On obtient :
0.732351031846,0.467599676658
et le coefficient de corrlation est :
correlation(ln(X),ln(Y))
On obtient :
0.999969474543
7.2.14
601
logarithmic_regression_plot([[1.0,1],[2,4],[3,9],[4,16]])
On obtient :
Le graphe de la fonction logarithme dquation
y = 10.1506450002 ln(x) 0.564824055818
car cest la fonction logarithme dquation :
y = 10.1506450002 ln(x) 0.564824055818
qui approche au mieux les donnes.
Remarque On remarquera que lquation de la courbe represente ainsi que la
valeur du coefficient de corrlation de ln(X), ln(Y ) (si les donnes sont X, Y ))
sont crits en bleu.
Si on veut avoir lquation et/ou le coefficient de corrlation sur le dessin il faut
rajouter comme dernier argument, loption equation et/ou correlation.
7.2.15
Pour approcher les donnes par une fonction polynmiale de degr n dquation y = a0 xn + .. + an , on utilise, en mettant le degr n comme dernier paramtre,
polynomial_regression qui renvoie la liste [an , ..a0 ].
polynomial_regression a les mmes premiers arguments que covariance,
le dernier argument tant le degr du polynme renvoy.
On tape :
polynomial_regression([[1,1],[2,4],[3,9],[4,16]],3)
Ou on tape :
polynomial_regression([1,2,3,4],[1,4,9,16],3)
On obtient :
[0,1,0,0]
cest donc la fonction polynomiale dquation y = 0 x3 + x2 + 0 x + 0 = x2
qui approche au mieux les donnes. Remarque On remarquera que lquation de
la courbe represente ainsi que la valeur du coefficient de corrlation des donnes
sont crits en bleu.
Si on veut avoir lquation et/ou le coefficient de corrlation sur le dessin il faut
rajouter comme dernier argument, loption equation et/ou correlation.
602
7.2.16
Pour approcher les donnes par le grahe dune fonction polynmiale de degr
n dquation y = a0 xn +..+an , on utilise polynomial_regression_plot.
polynomial_regression_plot a les mmes premiers arguments que covariance,
le dernier argument tant le degr du polynme renvoy.
On tape :
polynomial_regression_plot([[1.0,1],[2,4],[3,9],[4,16]],3)
On obtient :
Le graphe de la fonction polynmiale de degr n
dquation y = x2
car cest la fonction polynmiale dquation y = 1 x2 qui approche au mieux les
donnes.
7.2.17
Pour approcher les donnes par une fonction puissance dquation y = bxm ,
on utilise power_regression qui renvoie le couple (m, b).
power_regression a les mmes arguments que covariance.
On tape :
evalf(power_regression([[1,1],[2,4],[3,9],[4,16]]))
Ou on tape :
evalf(power_regression([1,2,3,4],[1,4,9,16]))
On obtient :
(2.0,1.0)
donc y = x2 est la fonction puissance qui approche au mieux les donnes.
On tape :
X:=[1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8]
Y:=[1.6,2.15,2.65,3.12,3.56,3.99,4.4,4.8,5.18,
5.58,5.92,6.27,6.62,7.06,7.3]
power_regression(X,Y)
On obtient :
0.732351031846,1.59615829535
cest donc la fonction puissance dquation y = 1.6 x0.73 qui approche au mieux
les donnes.
On vrifie en tapant :
603
linear_regression(ln(X),ln(Y))
On obtient :
0.732351031846,0.467599676658
On a bien :
e^0.467599676658=1.59615829535
donc
ln(y) = ln(1.59615829535) + ln(x) 0.732351031846
ln(y) = 0.467599676659+ln(x)0.732351031846. et le coefficient de corrlation
est :
correlation(ln(X),ln(Y))
On obtient :
0.999969474543
7.2.18
Pour approcher les donnes par le graphe dune fonction puissance dquation
y = bxm , on utilise power_regression_plot.
power_regression_plot a les mmes arguments que covariance.
On tape :
power_regression_plot([[1.0,1],[2,4],[3,9],[4,16]])
On obtient :
Le graphe de la fonction puissance dquation y = 1 x2
car cest la fonction puissance dquation y = 1 x2 qui approche au mieux les
donnes. Remarque On remarquera que lquation de la courbe represente ainsi
que la valeur du coefficient de corrlation des donnes sont crits en bleu.
Si on veut avoir lquation et/ou le coefficient de corrlation sur le dessin il faut
rajouter comme dernier argument, loption equation et/ou correlation.
7.2.19
Les courbes logistiques sont des courbes dont lquation y = y(x) sont solutions dune quation diffrentielle de la forme :
y 0 /y = a y + b et y0 = y(x0 ) avec a < 0 et b > 0.
Les solutions sont de la forme : y(x) = C/(1 + exp((x x0 k) avec
C = b/a, = b et y0 = (b/a)/(1 + exp(b k) soit
k = 1/b (ln(((a y0 + b)/(a y0)))) Pour vrifier, on peut taper :
normal(desolve(y/y=a*y+b)
On obtient :
604
[(-b*exp(b*x-b*x0+ln(y0/(a*y0+b))))/(a*exp(b*x-b*x0+ln(y0/(a*y0+b)))-1
On a donc : c0 = x0 ln(y0 /(a y0 + b))/b Donc, en multipliant le numrateur et
dnominateur de y(x) par exp(b c_0 b x) on a :
y(x) = (b/(exp(b c_0 b x) a exp((b c_0 b x)) 1) soit y(x) =
b/(a exp(b (x c0 ))) = (b/(a (1 exp(b (x c0 ))/a))
On a 1/a = exp(ln(a)) car a < 0 donc y(x) = (b/a) (1/(1 + exp(b
(x c0 ) ln(a))) qui est bien la forme annonce.
Lorsque on connait les valeurs de f 0 en x = x0 , x0 +1....x0 +n, on cherche une
fonction logistique y(x) tel que y 0 (x) approche au mieux les diffrentes valeurs de
f 0 (x).
logistic_regression a comme paramtres :
une liste L qui contient les valeurs de y 0 pour x = x0 , x0 + 1....x0 + n,
la valeur de x0 de x0
la valeur y0 de y(x0 ) lorsquon la connait sinon Xcas arrive lestimer...
logistic_regression(L,x0,y0 renvoie les fonctions y(x) et y(x), la
constante C, y1M et xM avec y1M est la valeur y(xM) qui est le maximum de y 0
obtenu en x = xM , et enfin le coefficient de correlation linaire R de Y = y 0 /y en
fonction de y avec la droite Y = a y + b.
partir de la liste L, Xcas calcule la liste Ly en utilisant la formule y(t + 1)
y(t) = y 0 (t), donc, on a Ly=[y0,y0+y0,y0+y0+y1,....]. Puis Xcas
fait une rgression linaire de L/Ly en fonction de Ly pour avoir les valeurs de
a et b (y 0 /y = a y + b et y0 = y(x0 )) puis touve la solution de cette quation
diffrentielle On tape :
logistic_regression([0.0,1.0,2.0,3.0,4.0],0,1)
On obtient avec crit en bleu la signification des valeurs renvoyes :
[(-17.77)/(1+exp(-0.496893925384*x+2.82232341488+3.14159265359*i)),
(-2.48542227469)/(1+cosh(-0.496893925384*x+2.82232341488+3.14159265359
-17.77,-1.24271113735,5.67993141131+6.32246138079*i,
0.307024935856]
On tape :
evalf(logistic_regression([1,2,4,6,8,7,5],0,2))
Ou on tape :
logistic_regression(evalf([1,2,4,6,8,7,5]),0,2.0))
On obtient :
605
[64.8358166583/(1.0+exp(-0.551746244591*x+2.95837880348)),
14.4915280084/(1.0+cosh(-0.551746244591*x+2.95837880348)),
64.8358166583,7.24576400418,5.36184674112,-0.81176431297]
Pour retouver la valeur -0.81176431297 du coefficient de corrlation, on tape :
L:=[1,2,4,6,8,7,5];
y0:=2.0;
Ly:=makelist(y0,1,size(L))+cumSum(L)
On obtient : [3,5,9,15,23,30,35]
puis
correlation(L/Ly,Ly) qui renvoie
-0.81176431297
7.2.20
7.3
7.3.1
606
7.3.2
607
608
On obtient :
0.391549611697
Pour avoir, au hasard et de faon quiprobable, plusieurs nombres alatoires dcimaux compris dans lintervalle [1; 2[, on tape :
r:=rand(1..2)
puis il suffit de taper r().
On tape :
r()
On obtient :
1.14160255529
Tirage alatoire dentiers quirpartis sur [0, .., n[ : rand(n) alea(n) hasard(n)
Si n est un entier relatif rand(n) ou hasard(n) renvoie au hasard, et de
faon quiprobable, un entier de [0, 1, .., n[ (ou de ]n, ..1, 0] si n est negatif).
On tape :
rand(2)
Ou on tape :
alea(2)
Ou on tape :
hasard(2)
ou
hasard 2
On obtient :
1
ou on obtient :
0
On tape :
rand(-2)
Ou on tape :
hasard(-2)
On obtient :
-1
609
ou on obtient :
0
On tape pour avoir un entier alatoire entre 6 et 10, bornes comprises :
6+rand(11-6)
Ou on tape :
6+hasard(11-6)
On obtient par exemple :
8
7.3.3
610
7.3.4
7.3.5
randmultinomial(P) renvoie un index ou randmultinomial(P,K) renvoie un lment de la liste K, alatoirement distribu selon la loi multinomiale de
probabilits donne par la liste P.
On tape :
randmultinomial([1/2,1/3,1/6]
On obtient par exemple :
1
Ce qui correspond lindice de lobjet obtenu avec la probabilit 1/3.
On tape :
randmultinomial([1/2,1/3,1/6],["R","V","B"])
On obtient par exemple :
"R"
7.3.6
611
7.3.7
612
7.3.8
7.3.9
613
[0.798440033104,0.911647357512,0.197551369201]]
deux entiers n,p et une fonction alatoire de Xcas quil faut quoter, dans
ce cas ranm renvoie une matrice de n lignes et p colonnes dont les lments
sont pris au hasard selon la fonction donne en troisime argument.
Les fonctions donnes en troisime argument qui doivent tre quoter, peuvent
tre :
rand(n)
binomial(n,p) ou binomial,n,p ourandbinomial(n,p)
multinomial(P,K) ou multinomial,P,K ou randmultinomial(P,K)
poisson() ou poisson, ou randpoisson()
normald(,) ou normald,, ou randnorm(,)
exp(a) ou exp,a ou randexp(a)
fisher(n,m) ou fisher,n,m ou randfisher(n,m)
On tape :
ranm(3,2,rand(3))
ou
ranm(3,2,3)
On obtient par exemple :
[[2,1],[0,0],[1,0]]
On tape :
ranm(1,2,randnorm(0,1))
On obtient par exemple :
[[1.37439065645,-1.33195982697]]
7.4
7.4.1
614
7.4.2
7.4.3
7.4.4
615
La loi binomiale ngative est une distribution de probabilit discrte. Elle dpend
de 2 paramtres : un entier n (le nombre de succs attendus) et un rel p de ]0, 1[
(la probabilit dun succs).
On la note N egBin(n, p).
Elle permet de dcrire la situation suivante : on fait une suite de tirages indpendants (avec pour chaque tirage, la probabilit p davoir un succs) jusqu obtenir
n succs. La variable alatoire reprsentant le nombre dchecs quil a fallut avant
davoir n succs, suit alors une loi binomiale ngative.
Cette loi est aussi connue sous le nom de loi de Pascal en lhonneur de Blaise Pascal et de loi de Polya, en lhonneur de George Plya.
negbinomial(n,p,k)=comb(n+k 1, k)pn (1p)k pour k = 0, 1, 2.. La
loi se gnralise pour deux paramtres r et p, o r peut prendre des valeurs relles
strictement positives. On a alors :
(r + k) r k
negbinomial(r,p)=
p q
k! (r)
Remarque
Si on dfinit comb(n,k) pour n < 0 par comb(n,k)=n*(n-1)*..*(n-k-1)/k!,
alors Si X N egBin(n, p) (n N et p [0; 1]) alors Proba(X = k) = pn (p 1)k comb(n, k)
ce qui justifie le nom de loi binomiale ngative et qui facilite le calcul de lesprance (gale n(1 p)/p) et de la variance (gale n(1 p)/p2 ).
On tape :
negbinomial(10,12,0.4)
On obtient :
0.0670901607617
On tape :
negbinomial(4,2,0.5)
On obtient :
0.15625
On tape :
negbinomial(1,2,0.4)
On obtient 0.62 0.4 soit :
0.144
7.4.5
Lorsquune variable alatoire X suit une loi binomiale ngative N egBin(n, p), on
a:
negbinomial_cdf(n,p,x)=P roba(X x)=
negbinomial(n,0,p)+...+negbinomial(n,floor(x),p).
negbinomial_cdf(n,p,x,y)=P roba(x X y)=
negbinomial(n,ceil(x),p)+...+negbinomial(n,floor(y),p).
On tape :
616
On obtient :
0.34375
On peut vrifier que :
negbinomial(4,0,0.5)+negbinomial(4,1,0.5)+negbinomial(4,2,0.5)
0.34375
On tape :
negbinomial_cdf(2,0.3,1)
On obtient :
0.216
On tape :
negbinomial_cdf(2,0.3,3)
On obtient :
0.47178
7.4.6
Lorsquune variable alatoire X suit une loi binomiale ngative N egBin(n, p),
lorsquon a negbinomial_icdf(n,p,x)=h cest que
P roba(X h) = x=negbinomial_cdf(n,p,h).
On tape :
negbinomial_icdf(4,0.5,0.9)
On obtient :
8
On tape :
negbinomial_icdf(2,0.3,0.95)
On obtient :
12
Les programmes naifs pour calculer les fonctiond prcdentes
617
negbino(n,p,k):=comb(-n,k)*p^n*(p-1)^k;
negbin(n,p,k):=comb(n+k-1,k)*p^n*(1-p)^k;
negbi(n,p,k):=(n+k-1)!/k!/(n-1)!*p^n*(1-p)^k;
negbino_cdf(n,p,x):=sum(negbi(n,p,k),k=0..floor(x));
negbino_icdf(n,p,x):={
local k:=0;
tantque negbino_cd(n,p,k)<x faire
k:=k+1;
ftantque;
return k;
}:;
7.4.7
618
7.4.8
7.4.9
Lorsquune variable alatoire X suit une loi de Poisson de paramtre mu, cest
dire de moyenne mu et dcart-type mu, on a :
P roba(X x)=poisson_cdf( mu,x) avec X P(mu). et
P roba(x1 X x2)=poisson_cdf(mu,x1,x2)=poisson_cdf(mu,x1)+...+poisson_c
cest dire :
poisson_cdf(mu,x1,x2)=poisson_cdf(mu,x2)-poisson_cdf(mu,x1-1)
poisson_cdf(mu,x) est la fonction de rpartition de la loi de Poisson de paramtre mu, On tape :
poisson_cdf(10.0,3)
On obtient :
0.0103360506759
On tape :
poisson_cdf(10.0,3,10)
On obtient :
0.572703699517
7.4.10
Lorsquune variable alatoire X suit une loi de Poisson de paramtre mu, cest
dire de moyenne mu et dcart-type mu, on a :
poisson_icdf(mu,t)= h quivaut
P roba(X h) =t= poisson_cdf(mu,h) avec X P(mu).
poisson_icdf(mu,t) est linverse de la fonction de rpartition de la loi de
Poisson de paramtre mu, On tape :
poisson_icdf(10.0,0.975)
On obtient :
0.125110035721
7.4.11
619
7.4.12
Lorsquune variable alatoire X suit une loi normale centre rduite, on a : P roba(X
x)= normal_cdf(x) et
P roba(x X y)= normal_cdf(x,y) et
Lorsquune variable alatoire X suit une loi normale de moyenne et dcart-type
, on a :
P roba(X x)= normal_cdf(, ,x).
P roba(x X y)= normal_cdf(, ,x,y).
On tape :
normal_cdf(1.96)
On obtient :
0.975002104852
On tape :
normal_cdf(0,1.96)
On obtient :
0.475002104852
620
7.4.13
Lorsquune variable alatoire X suit une loi normale centre rduite, si on a normal_icdf(x)=h
cest que lon a :
P roba(X h)=x=normal_cdf(h).
Lorsquune variable alatoire X suit une loi normale de moyenne et dcart-type
, si on a normal_icdf(, ,x)=h cest que lon a :
P roba(X h)=x=normal_cdf(, ,h).
On tape :
normal_icdf(0.975)
On obtient :
1.95996398454
On tape :
normal_icdf(1,2,0.495)
On obtient :
0.974933060984
On tape :
normal_icdf(1,2,normal_cdf(1,2,0.975))
On obtient :
0.975
On tape :
normal_cdf(1,2,normal_icdf(1,2,0.495))
On obtient :
0.495
7.4.14
621
Lorsquune variable alatoire X suit une loi normale centre rduite, on a : P roba(X >
x)= UTPN(x).
Lorsquune variable alatoire X suit une loi normale de moyenne et de variance
v, on a : P roba(X > x) = UTPN(,v,x).
On tape :
UTPN(1.96)
On obtient :
0.0249978951482
On tape :
UTPN(1,4,1.96)
On obtient :
0.315613696516
Attention
Les paramtres de UTPN sont la moyenne de X, la variance de X, et la valeur x,
alors que, pour normal_cdf les paramtres sont la moyenne de X, lcart-type
de X et la valeur x.
On tape :
UTPN(1.96)+normal_cdf(1.96)
On obtient :
1
On tape :
UTPN(1,4,1.96)+normal_cdf(1,2,1.96)
On obtient :
1
7.4.15
622
On tape :
evalf(student(2,3))
On obtient :
0.0274101222343
7.4.16
Lorsquune variable alatoire X suit une loi de Student ayant n degrs de libert, on a :
P roba(X x)= student_cdf(n,x).
P roba(x X y)= student_cdf(n,x,y).
On tape :
student_cdf(5,2)
On obtient :
0.949030260585
On tape :
student_cdf(5,-2)
On obtient :
0.0509697394149
On tape :
student_cdf(5,-2,2)
On obtient :
0.89806052117
car 0.949030260585 0.0509697394149 = 0.89806052117
7.4.17
Lorsquune variable alatoire X suit une loi de Student ayant n degrs de libert,
si on a student_icdf(n,x)=h cest que :
P roba(X h)=x=student_cdf(n,h).
On tape :
student_icdf(5,0.95)
On obtient :
2.01504837333
7.4.18
623
Lorsquune variable alatoire X suit une loi de Student ayant n degrs de libert,
on a : P roba(X > x)= UTPT(n,x).
On tape :
UTPT(5,2)
On obtient :
0.0509697394149
7.4.19
7.4.20
624
7.4.21
7.4.22
7.4.23
625
8/27
On tape :
fisher(4,2,1)
On obtient :
8/27
7.4.24
7.4.25
Lorsquune variable alatoire X suit une loi de Fisher-Sndcor ayant comme degrs de libert n1, n2, si on a :
fisher_icdf(n1,n2,x)=h cest que :
P roba(X h)=x=fisher_cdf(n1,n2,h).
On tape :
fisher_icdf(5,3,0.95)
Ou on tape :
snedecor_icdf(5,3,0.95)
On obtient :
9.01345516752
626
On tape :
1/fisher_icdf(3,5,0.05)
On obtient :
9.01345516752
Remarque :
fisher_icdf(n1,n2,p)=1/fisher_icdf(n2,n1,1-p)
7.4.26
Lorsquune variable alatoire X suit une loi de Fisher-Sndcor ayant comme degrs de libert n1, n2, on a : P roba(X > x)= UTPF(n1,n2,x).
On tape :
UTPF(5,3,9)
On obtient :
0.050101072968
7.4.27
7.4.28
627
gammad_cdf(2,1,0.53181160839)
On obtient :
0.1
On tape :
gammad_cdf(2,1,1.67834699002)
On obtient :
0.500000000001
7.4.29
7.4.30
628
7.4.31
Lorsquune variable alatoire X valeur dans [0,1] suit une loi beta de paramtre
a et b, on a :
P roba(X x)= betad_cdf(a,b,x) avec x [0, 1].
P roba(x X y)=betad_cdf(a,b,x,y) avec x [0, 1] et y [0, 1].
On a :
(a, b, x) (a + b)
betad_cdf(a,b,x) est gale
et
(a) (b)
betad_cdf(a,b,x,y) est gale :
(a + b) ((a, b, y) (a, b, x))
(b) (a)
On rappelle que lon a :
Beta(a,b) est gale int(t^(a-1)*(1-t)^(b-1),t=0..1) ,
Beta(a,b,p) est gale int(t^(a-1)*(1-t)^(b-1),t=0..p) ,
Beta(a,b,p,1) est gale =Beta(a,b,p)/Beta(a,b)
On tape :
betad_cdf(2,3,0.2)
On obtient :
0.1808
On tape :
betad_cdf(2,3,0.9)
On obtient :
0.9963
7.4.32
7.4.33
629
7.4.34
Lorsquune variable alatoire X valeur dans N suit une loi gomtrique de paramtre p (0 < p < 1), on a :
P roba(X x)= geometric_cdf(p,x) avec x N .
P roba(x X y)=geometric_cdf(r,x,y) avec x N et y N .
On a :
geometric_cdf(p,x) est gale 1 (1 p)x et
geometric_cdf(p,x,y) est gale :
(1 p)x1 (1 p)y
On tape :
geometric_cdf(0.2,3)
On obtient :
0.488
On tape :
geometric_cdf(0.2,5)
On obtient :
0.67232
On tape :
geometric_cdf(0.2,3,5)
On obtient :
0.18432
On tape :
630
On obtient :
0.5
On tape :
geometric_cdf(0.5,5)
On obtient :
0.96875
On tape :
geometric_cdf(0.5,1,5)
On obtient :
0.46875
7.4.35
Lorsquune variable alatoire X suit une loi gomtrique de paramtre p (0 < p <
1), si on a geometric_icdf(p,x)=h avec x [0, 1] cest que lon a :
P roba(X h)=x=geometric_cdf(p,h).
On tape :
geometric_icdf(0.2,0.488)
On obtient :
3
On tape :
geometric_icdf(0.5,0.5)
On obtient :
1
7.4.36
631
Ou on tape :
cauchyd(0,1,0.3)
On obtient :
0.292027418517
On tape :
cauchyd(2,1,3)
On obtient :
1/(2*pi)
On tape :
cauchy(2.2,1.5,0.8)
On obtient :
0.113412073462
7.4.37
Lorsquune variable alatoire X valeur dans R suit une loi de Cauchy de paramtre a et b, on a :
P roba(X x)= cauchy_cdf(a,b,x) avec x R.
P roba(x X y)=cauchy_cdf(a,b,x,y) avec x R et y R.
On a :
1 1
xa
cauchy_cdf(a,b,x) est gale + atan(
) et
2
b
cauchy_cdf(a,b,x,y) est gale :
1
ya
xa
(atan(
) atan(
))
b
b
On tape :
cauchy_cdf(2,3,1.4)
On obtient :
0.437167041811
On tape :
cauchy_cdf(2,3,-1.9)
On obtient :
0.20871440016
On tape :
cauchy_cdf(2,3,-1.9,1.4)
On obtient :
0.228452641651
632
7.4.38
7.4.39
7.4.40
Lorsquune variable alatoire X valeur dans [a, b] suit une loi uniforme de paramtre a et b, on a :
P roba(X x)=uniform_cdf(a,b,x) avec x [a, b].
P roba(x X y)=uniform_cdf(a,b,x,y) avec x [0, 1] et y [0, 1].
On a :
xa
et
uniform_cdf(a,b,x) est gale :
ba
yx
uniform_cdf(a,b,x,y) est gale :
ba
On tape :
633
uniform_cdf(2,4,3.2)
On obtient :
0.6
On tape :
uniform_cdf(2,3,2.5)
On obtient :
0.5
7.4.41
7.4.42
634
7.4.43
7.4.44
7.4.45
635
On tape :
weibull(2,1,3)
Ou on tape :
weibull(2,1,0,3)
On obtient :
6/exp(9)
On tape :
weibull(2.2,1.5,0.8)
On tape :
weibull(2.2,1.5,0.0,0.8)
On tape :
weibull(2.2,1.5,0.4,1.2)
On obtient :
0.536773868051
7.4.46
Lorsquune variable alatoire X valeur dans R+ suit une loi de Weibull de paramtres rels k, strictement positifs et positif ou nul (par dfaut = 0), on a :
P roba(X x)= weibull_cdf(k,lambda,theta,x) avec x R+ .
P roba(x X y)=weibull_cdf(k,lambda,theta,x,y) avec x R+
et y R+ .
On a :
x k
weibull_cdf(k,lambda,theta,x) est gale 1 exp((
) ) et
On tape :
weibull_cdf(2,3,5)
Ou on tape :
weibull_cdf(2,3,0,5)
636
On obtient :
1-exp(-25/9)
On tape :
weibull_cdf(2,3,1.9)
On obtient :
0.330424340391
On tape :
weibull_cdf(2.2,1.5,0.4,1.9)
On obtient :
0.632120558829
On tape :
weibull_cdf(2.2,1.5,0.4,1.2)
On obtient :
0.221853318885
On tape :
weibull_cdf(2.2,1.5,0.4,1.2,1.9)
On obtient :
0.410267239944
7.4.47
7.4.48
637
+
X
(1)k1 exp(k 2 x2 )
k=1
On tape :
kolmogorovd(1.36)
On obtient :
0.950514123245
7.4.49
7.4.50
mgf a comme paramtres le nom dune loi de probabilit (parmi les lois : normale,
binomiale, Poisson, beta, gamma) et les paramtres de cette loi.
mgf renvoie la fonction gnratrice des moments de cette loi de probabilit.
On tape :
mgf(normald,1,0)
On obtient :
exp(t)
On tape :
638
On obtient :
exp(5*(exp(t)-1))
On tape :
mgf(binomial,n,p)
On obtient :
(1-p+p*exp(t))^n
7.4.51
cdf a comme paramtre le nom dune loi de probabilit suivi des paramtres de
cette loi.
cdf renvoie la distribution cumule pour cette loi de probabilit. On tape :
cdf(binomial,10,0.5,4)
On obtient :
0.376953125
On tape :
cdf(normald,0.0,1.0,2.0)
On obtient :
0.977249868052
On tape :
cdf(betad,2,3,0.9963)
On obtient :
0.99999979795
7.4.52
cdf a comme paramtre le nom dune loi de probabilit suivi des paramtres de
cette loi.
icdf renvoie la distribution cumule inverse pour cette loi de probabilit.
On tape :
icdf(binomial,10,0.5,0.6)
On obtient :
5
On tape :
639
icdf(normald,0.0,0.5,0.975)
On obtient :
0.97998199227
On tape :
icdf(betad,2,3,0.9963)
On obtient :
0.9
7.4.53
7.4.54
640
7.5
7.5.1
7.5.2
normalt
641
7.5.3 studentt
studentt a pour arguments :
1. la liste [ns, ne] o ns est le nombre de succs lorsquon fait ne essais, ou la
liste [m, t] o m est la moyenne et t la taille de lchantillon, ou la liste des
donnes de lchantillon,
2. la proportion de succs ou la moyenne de la population ou une liste de donnes dun chantillon tmoin,
3. lcart-type (cet argument est optionnel si des donnes sont fournies, il est
dduit des donnes),
4. lhypothse alternative H1 != ou < ou >,
5. le niveau de confiance, cet argument est optionnel (valeur par dfaut 0.05)
studentt ralise le test Z dhypothses pour une loi de student. On utilise de
prfrence le test studentt plutt que normalt lorsque la taille de lchantillon
est petite.
studentt renvoie 0 ou 1 et affiche un rsum du test.
On tape :
642
On obtient :
0
avec en vert le rsum du test :
*** TEST RESULT 0 ***
Summary T-Test null hypothesis mu1=mu2, alt. hyp. mu1 !=mu2.
Test returns 0 if probability to observe data is less than 0.1
(null hyp. mu1=mu2 rejected with less than alpha probability error)
Test returns 1 otherwise (can not reject null hypothesis)
Data mean mu1=10, population mean mu2=0.5, degrees of freedom 20
alpha level 0.1, multiplier*stddev/sqrt(sample size)= 1.32534*0.02/4.47214
Le test a chou, il y a donc moins dune chance sur 10 que le nombre de succs
soit de 10 pour 20 essais avec une proportion attendue de 0.5 et un cart-type de
0.02, on rejette lhypothse H0.
On tape :
studentt([0.48,20],0.5,0.1,<)
On obtient :
1
avec en vert le rsum du test :
*** TEST RESULT 1 ***
Summary T-Test null hypothesis mu1=mu2, alt. hyp. mu1<mu2.
Test returns 0 if probability to observe data is less than 0.05
(null hyp. mu1=mu2 rejected with less than alpha probability error)
Test returns 1 otherwise (can not reject null hypothesis)
Data mean mu1=0.48, population mean mu2=0.5, degrees of freedom 20
alpha level 0.05, multiplier*stddev/sqrt(sample size)= 1.72472*0.1/4.47214. Ici le
test russit, on ne peut pas exclure (au seuil de confiance 0.05) lobservation dune
proportion de 0.48 avec 20 essais pour une proportion thorique de 0.5 et un carttype de 0.1
7.5.4
chisquaret
643
chisquaret([57,54])
On obtient :
0.0810810810811
avec en vert le rsum du test :
On suppose que les donnes sont des effectifs de classes, adquation la distribution uniforme.
Adquation dun chantillon une distribution discrte Rsultat du test du Chi2
0.0810810810811.
On rejette ladquation si suprieur chisquare_icdf(1,0.95) qui vaut
3.84145882069 or chisquare_icdf(1,1-alpha) si alpha !=5%.
On tape :
chisquaret([1,1,1,1,1,0,0,1,0,0,1,1,1,0,1,1,0,1,1,0,0,0,0],[.4,.6])
On obtient :
0.115942028986
avec en vert le rsum du test :
Adquation dun chantillon une distribution discrte
Rsultat du test du Chi2 0.115942028986,
On rejette ladquation si suprieur chisquare_icdf(1,0.95) qui vaut
3.84145882069 or chisquare_icdf(1,1-alpha) si alpha !=5%.
On tape :
chisquaret(ranv(1000,binomial,10,.5),binomial)
On obtient :
?
On tape :
chisquaret(ranv(1000,binomial,10,.5),binomial,11,.5)
On obtient :
?
On rgle dans la configuration graphique les valeurs de class_min et de class_dim
-2 et 0.25 et on tape :
L:=ranv(1000,normald,0,.2)
chisquaret(L,normald)
Ou on tape :
chisquaret(L,normald,classes,-2,.25)
On obtient par exemple :
644
645
646
7.5.5
kolmogorovt
7.5.6
Des exemples
647
j=1
les effectifs observs et les effectifs thoriques : plus D2 est proche de zro,
plus la distribution de lchantillon est conforme la distribution thorique.
On calcule la valeur d2 de D2 on tape :
648
2. Exercice
Sur un registre dtat civil, on a relev 552 naissances dont 289 garons.
a/ Estimer la frquence p de naissance dun garon.
b/ Donner un intervalle de confiance pour cette estimation.
On tape :
?
On obtient :
?
3. Exercice
Dans un hpital sur un chantillon de 458 malades admis pendant un trimestre il y a eu 141 dcs. Estimer le pourcentage de dcs par un intervalle
de confiance au seuil de 0.01.
On tape :
?
On obtient :
?
4. Exercice : comparaison de deux moyennes
Pour une mme preuve, voici les notes obtenues dans une classe de terminale du lyce A.
6,10,14,17,9,6,4,12,9,10,10,11,12,18,10,9,11,8,7,10.
et les notes obtenues dans une classe de terminale du lyce B.
2,10,14,13,9,6,1,12,9,10,10,10,12,15,19,9,11,8,9,10
1/ Analyser les rsultats de chaque groupe.
2/ Peut-on considrer que les 2 groupes sont issus dune mme population ?
5. Exercice : comparaison de deux moyennes
Deux entreprises A et B livrent des pices dans des paquets de 100 pices.
On note X1 (resp X2 ) la variable alatoire gale au nombre de pices dfectueuses par paquet provenant de A (resp B).
On note X 1 (resp X 2 ) la variable alatoire gale au nombre moyen de pices
649
650
Chapitre 8
8.1.2
652
Attention Les variables locales ne sont pas des variables formelles et doivent toujours tre affectes dans le corps du programme : on ne dfinira donc pas, les variables formelles, avec local.
Si on veut quune variable dclare avec local soit formelle (par ex a), il faudra
mettre dans le corps du programme soit purge(a) soit assume(a,symbol).
Exemple
kk(a):={
local x,c;
c:=4*a;
return solve((x-c)^2-a=0,x);
}:;
f(a):={
local x,c;
c:=4*a;
assume(x,symbol);
return solve((x-c)^2-a=0,x);
}:;
g(a):={
local c;
c:=4*a;
return solve((x-c)^2-a=0,x);
}:;
On tape :
kk(1),f(1),g(1)
On obtient :
list[],list[3,5],list[3,5] Il ne faut pas tenir compte du message renvoy pas Xcas lors de la compilation :
"Attention : x, declare(s) comme variable(s) globale(s) en compilant g" car dans
solve la variable x est toujours symbolique.
Remarque on peut initialiser les variables locales en mme temps que leur
dclaration condition de mettre des parenthses, par exemple :
local (q:=1),(r:=0),s;
Attention Il est important de dclarer les variables locales car une variable
globale est value avant lexecution de la fonction qui sen sert lorsque cette fonction est appele par une autre fonction...on risque donc davoir des ennuis si une
fonction qui utilise une variable globale est appele par une autre fonction, par
exemple :
truc(a,b):={
if (b!=0) {
r:=irem(a,b);
} else {
r:=b;
}
return r;
};
8.1.3
Un programme a la mme forme quune fonction mais ne renvoie pas de valeurs, mais un programme peut afficher des rsultats ou faire des dessins : dans ce
cas toutes les instructions daffichage (afficher ou Disp;) se feront en bleu
dans lcran intermdiaire situ avant la rponse et les instructions de dessins se
feront dans lcran DispG. En particulier les dessins rcursifs ne seront visibles
que dans lcran DispG.
654
8.1.4
Un script est une suite dinstructions que lon met dans un fichier (chaque instuction se termine par ;).
8.2
8.3
La squence dinstructions
8.4
8.4.1
comment a comme argument une chaine de caractre (il faut mettre les ") alors
que // na pas besion des " mais doit se terminer par un retour la ligne : cela
veut veut dire que largument de comment ou ce qui se trouve entre // et le retour
la ligne nest pas pris en compte par le programme et que cest un commentaire.
On tape le programme dans un diteur de programmes puis on le valide
avec le bouton OK :
f(x):={comment("f:R->R^2")
return [x+1,x-1];}
ou :
f(x):={//f:R->R^2
return [x+1,x-1];}
655
On obtient :
la dfinition commente de la fonction f(x)=[x+1,x-1]
8.4.2
656
On tape :
InputStr(a)
ou :
InputStr("reponse=",a)
On obtient :
une fentre o on peut entrer la valeur de a
On tape :
12 dans cette fentre puis OK
puis :
a+3
On obtient :
123
car a est la chane de catractres "12" et le "+" concatne les deux chanes "12"
et "3".
8.4.3
getKey est une fonction qui na pas dargument et qui renvoie le code ASCII
de la touche presse dans lcran xterm de la fentre du terminal ou 0 si aucune
touche nest presse dans cet cran .
On tape :
testkey():={
local a;
while (1==1) {
a:=getKey();
if (a!=0) break;
}
return a;
}
puis :
testkey()
puis :
A
On obtient :
65
8.4.4
657
type est une fonction qui a un argument et qui renvoie le type de cet argument par
exemple :
DOM_FLOAT,DOM_INT,DOM_COMPLEX,..,DOM_IDENT,DOM_LIST,
DOM_SYMBOLIC,DOM_RAT,..DOM_SYMBOLIC,DOM_STRING.
Il y a 20 types diffrents qui sont reprsents par un entier entre 1 et 20.
type permet de tester une erreur dentre.
On tape :
type(3.14)
On obtient :
DOM_FLOAT
On tape :
type(3.14)+0
On obtient :
1
On tape :
type(3)
On obtient :
DOM_INT
On tape :
type(3)+0
On obtient :
2
On tape :
type(3% 5)
On obtient :
15
Remarque : utilisation de type pour les graphes
voir aussi 3
Si le graphe dpend dune fonction utilisateur, il faut que la fonction soit dfinie
mme lorsque le(s) paramtre(s) a (ont) une valeur formelle, ce qui peut se faire en
testant le type du paramtre, comme dans lexemple suivant, f est dfinie en testant
du type du paramtre par :
658
f(x):= {
if (type(x)==DOM_IDENT) return f(x);
while(x>0){ x--; }
return x;
}:;
Ainsi f(x) renvoie f(x) et f(3.1) renvoie -0.9.
ou bien
g(x):= {
if (type(x)!=DOM_LIST) return g(x);
if (type(x)==DOM_IDENT) return g(x);
while(x[0]>0){x[0]:=x[0]-1; }
return x;
}:;
Ainsi g(x) renvoie g(x), g([x,y,z]) renvoie g([x,y,z]) et g([1.1,2,3])
renvoie [-0.9,2,3].
Par exemple si G:=plotfunc(g(x), le test permet dutiliser le graphe G de g
dans des commandes comme translation(1+i,G)...
8.4.5
subtype est une fonction qui a un argument et qui renvoie 1 si cet argument est
une squence et 0 sinon.
On tape :
subtype(3,1,4)
On obtient :
1
On tape :
subtype[3,1,4]
On obtient :
0
8.4.6
getType est une fonction qui a un argument et qui renvoie le type de cet argument
par exemple :
STR,EXPR,VAR,NONE,PIC,LIST,MAT,FUNC,NUM....
getType ne renvoie pas la mme chose que type, cest pour des raisons de
compatibilit.
On tape :
getType(3.14)
659
On obtient :
NUM
On tape :
getType(x)
On obtient :
VAR
On tape :
getType(x+2)
On obtient :
EXPR
8.4.7
compare est une fonction qui a deux arguments et qui renvoie 1 si ses arguments
ont des types diffrents ou ou si ses arguments sont de mme type et sont mis dans
lordre croissant, et qui renvoie 0 sinon.
On tape :
compare(1,2)
On obtient :
1
On tape :
compare(2,1)
On obtient :
0
On tape :
compare("3","a")
On obtient :
1
On tape :
compare("a",3)
On obtient :
0
On tape :
660
On obtient :
1
On tape :
compare("a",3)
On obtient :
0
En effet on a : type(3)=DOM_INT=2 et type("a")=DOM_STRING=12
8.4.8
8.4.9
ClrIO na pas dargument, il efface toutes les sorties faites dans le niveau o
il a t tap.
On tape :
a:=12
puis :
print("a=",a)
On obtient :
"a=",12 scrit en bleu et la rponse est 1
On tape :
print("a=",a);ClrIO()
On obtient :
(1,1) comme rponse
8.4.10
661
8.4.11
662
8.4.12
:= => =< sont des oprateurs infixs qui permettent de stocker une valeur dans
une variable, mais leurs arguments de => et de := =< ne sont pas dans le mme
ordre !
De plus := et =< nont pas le mme effet lorsque le premier argument est un
lment dune liste (ou matrice) contenu dans une variable. En effet, =< modifie
llment dune liste (ou matrice) par rfrence (voir 8.4.14)
=> est la version infixe de sto.
=> stocke le premier argument dans la variable donne comme deuxime
argument.
On tape :
4=>a
Ou on tape :
sto(4,a)
On obtient :
4 et la variable a contient 4
:= et =< ont comme arguments, un nom de variable et la valeur stocker.
On tape :
a:=4
Ou on tape :
a=<4)
On obtient :
4 et la variable a contient 4
On tape :
A:=[0,1,2,3,4]
B:=A
puis par exemple pour modifier A[3], on tape :
A[3]=<33
puis
A,B
On obtient :
[0,1,2,33,4],[0,1,2,33,4]
Les variables A et B contiennent toutes les deux la liste [0,1,2,33,4],
en effet :
A:=[0,1,2,3,4] fait pointer A sur la liste [0,1,2,3,4], puis
B:=A fait pointer B sur A donc sur la liste [0,1,2,3,4],
A[3]=<33 modifie la liste pointe par A donc modifie la liste [0,1,2,3,4]
en la liste [0,1,2,33,4] et donc B est modifi. Il en serait de mme si on
avait mis B[3]=<33 au lieu de A[3]=<33, les variables A et B contiendraient toutes les deux la liste [0,1,2,33,4].
Remarque
On peut faire plusieurs affectations la fois en utilisant les squences ou les listes.
On tape :
[a,b,c]:=[1,2,3]
On obtient :
[1,2,3]
663
8.4.13
copy permet de cloner une liste, un vecteur ou une matrice, en gnral pour le
stocker dans une variable.
copy a un argument, la liste (vecteur ou matrice) cloner.
A:= copy(B) recopie la liste (vecteur, matrice) B dans A.
On tape :
B:=copy([[4,5],[2,6]])
ou :
A:=[[4,5],[2,6]];B:=copy(A)
Puis on tape :
A,B
On obtient :
[[4,5],[2,6]],[[4,5],[2,6]]
Quand doit-on utiliser copy ?
copy est surtout utile pour des listes ou des matrices qui seront par la suite modifies par rfrence avec =<.
On tape :
A:=[0,1,2,3,4]
B:=copy(A)
Puis, si on tape :
664
On obtient :
[0,1,2,33,4],[0,1,2,3,4]
Puis si on tape :
B[3]=<55
A,B
On obtient :
[0,1,2,33,4],[0,1,2,55,4]
8.4.14
Attention, := et =< ne sont pas quivalents car =< modifie llment dune
liste ou matrice par rfrence.
Laffectation =< ne diffre de := que si on modifie un lment dune liste (ou
matrice) contenue dans une variable, par exemple si A contient la liste [0,1,2,3,4]
i.e. si on a tap A:=[0,1,2,3,4] et que lon veut modifier la valeur de A[3]
et changer 3 en 33, on peut crire dans ce cas, A[3]:=33 ou A[3] =< 33
mais ces deux instructions sont diffrentes. En effet A pointe vers une liste car
A:=[0,1,2,3,4], et A[3] =< 33 modifie cette liste en la liste [0,1,2,33,4],
ainsi toutes les variables de Xcas qui pointent vers cette liste seront modifies.
Alors quavec A[3]:=33 la liste est duplique, la copie est modifie et A pointe
vers la copie. Il faut donc utiliser =< avec prcautions car tous les objets pointant
sur cette liste (ou matrice) seront modifis.
On tape :
A:=[0,1,2,3,4]
B:=A
A[3]=<33
A,B
ou :
A:=[0,1,2,3,4]
B:=A
B[3]=<33
A,B
On obtient :
[0,1,2,33,4],[0,1,2,33,4]
En effet la liste [0,1,2,3,4] a t modifie par linstruction A[3]=<33
(ou par B[3]=<33) en la liste [0,1,2,33,4]. Les listes A et B pointent
sur cette liste donc A et B sont modifies toutes les deux.
On tape :
A:=[0,1,2,3,4]
665
B:=A
A[3]:=33
A,B
On obtient :
[0,1,2,33,4],[0,1,2,3,4]
car A[3]:=33 fait une copie de la liste [0,1,2,3,4] et modifie cette
copie en [0,1,2,33,4] puis A pointe sur cette copie et cela ne modifie
pas B. On tape :
A:=[0,1,2,3,4]
B:=A
B[3]:=33
A,B
On obtient :
[0,1,2,3,4],[0,1,2,33,4]
car B[3]:=33 fait une copie de la liste [0,1,2,3,4] et modifie cette
copie en [0,1,2,33,4] puis B pointe sur cette copie et cela ne modifie
pas A.
On tape :
A:=[0,1,2,3,4]
B:=copy(A)
Puis, si on tape :
A[3]=<33
A,B
On obtient :
[0,1,2,33,4],[0,1,2,3,4]
On tape :
A:=[0,1,2,3,4]
B:=copy(A)
B[3]=<33
A,B
On obtient :
[0,1,2,3,4],[0,1,2,33,4]
En effet B pointe sur la copie de A, donc une modifiucation par rfrence de
A[3] (respB[3]) ne modifie pas B (resp A).
8.4.15
=< est surtout utile quand on fait beaucoup de modifications dans une liste ou
matrice de grande taille, par exemple dans un programme. Mais attention, il faudra
utiliser copy lors de linitialisation des variables listes ou matrices qui seront modifies avec =< pour que les modifications se fassent sur la copie.
Voir aussi 2.5.3 et 8.4.14.
Attention
Dans un programme si on met :
local a;
a:=[0,1,2,3,4];
...
a[3] =< 33;
666
Cela modifie le programme lui-mme et la ligne a:=[0,1,2,3,4]; est remplace par a:=[0,1,2,33,4]; dans le programme compil.
Donc dans un programme il faut crire :
local a;
a:=copy([0,1,2,3,4]);
...
a[3] =< 33;
ou
local a,c;
c:=[0,1,2,3,4];
a:=copy(c);
...
a[3] =< 33;
pour que ce soit la copie de [0,1,2,3,4] qui soit modifie et non la liste
[0,1,2,3,4] elle-mme.
Remarque
On peut aussi utiliser les commandes makelist, seq ou $, par exemple :
a:=makelist(n,n,0,4); ou
a:=[n$(n=0..4)] ; puis
a[3] =< 33; car makelist(n,n,0,4) ou [n$(n=0..4)] est une liste
qui va se crer chaque excution du programme.
Exemple
On veut crire un programme qui renvoie les nombres entiers infrieurs ou gaux
n et dont la somme des chiffres (en base 10) vaut 5. On tape :
somme5(n):={
local L,j,k;
L:=seq(0,0);
k:=0;
for(j:=0;j<=n;j++){
if (sum(convert(j,base,10))==5){
L[k]=<j;
k:=k+1;
}
}
return L;
}:;
On tape :
somme5(50)
On obtient :
5,14,23,32,41,50
667
668
8.4.16
sto (ou Store) permet de stocker une valeur dans une variable.
sto (ou Store) a deux arguments, la valeur stocker et un nom de variable.
Attention
La variable doit tre purge avant lutilisation de sto (ou Store).
On tape :
sto(3,a)
ou :
Store(3,a)
On obtient :
3 et la variable a contient 3
Remarque
On peut faire plusieurs affectations la fois en utilisant les squences ou les listes.
On tape :
sto([1,2,3],[a1,a2,a3])
ou :
Store([1,2,3],[a1,a2,a3])
On obtient :
[1,2,3] et a1 contient 1, a2 contient 2, a3 contient 3
8.4.17
669
670
8.4.18
671
On tape :
maxi(a,b):={if (a>b) {return a;} else {return b;}}
puis :
maxi(2,3)
On obtient :
3
On tape :
maxi(a,b):={if a>b then return a; else return b;end}
puis :
maxi(2,3)
On obtient :
3
On tape :
maxi(a,b):={si a>b alors retourne a; sinon retourne
b;fsi}
puis :
maxi(2,3)
On obtient :
3
8.4.19
672
8.4.20
673
opere(a,b,c):={
switch(c) {
case 1 : {a:=a+b;break;}
case 2 : {a:=a-b;break;}
case 3 : {a:=a*b;break;}
default : {a:=a^b;}
}
return a;
}
puis :
opere(2,3,1)
On obtient :
5
On tape :
opere(2,3,2)
On obtient :
-1
8.4.21
for et pour se sert dune variable dincrmentation par exemple j (doit tre dclare comme variable locale).
Premire syntaxe
On prcise entre des parenthses et en les sparant par un point virgule, la valeur
de dpart, la condition darrt et la faon dont on incrmente la variable dincrmentation, puis on met un bloc dinstructions :
for permet de faire plusieurs fois un bloc dinstructions selon la valeur de la variable dincrmentation.
for (j:=j1;j<=j2;j:=j+3) {<instructions> }
Par exemple :
S:=0;for (j:=3;j<20;j:=j+3) {S:=S+j;}
Deuxime syntaxe
On commence par for, puis, on prcise avec les mots from, to et step, la valeur de dpart, la condition darrt et la fa on dont on incrmente cette variable
dincrmentation, puis on met les instructions effectuer entre do et end_for :
for j from j1 to j2 step p do <instructions> end_for;
Ou on utilise sa traduction. On commence par pour, puis, on prcise avec les mots
de, jusque et pas, la valeur de dpart, la condition darrt et la faon dont on
incrmente cette variable dincrmentation, puis on met les instructions effectuer
entre faire et fpour :
pour j de j1 jusque j2 pas p faire <instructions> fpour;
Par exemple :
S:=0;for j from 3 to 20 step 3 do S:=S+j; end_for;
674
8.4.22
675
La fonction : seq
seq nest pas une instruction mais une fonction qui permet de renvoyer la liste
constitue par les diffrentes valeurs du premier argument lorsque le deuxime argument varie selon les valeurs des arguments suivants : valeur de dpart, valeur
darrive, pas (pas=1 par dfaut).
seq(f(k),k,1,3)=[f(1),f(2),f(3)]
seq(f(k),k,1,5,2)=[f(1),f(3),f(5)]
La fonction seq est utile pour tracer une suite de points dans les crans de gomtrie.
Exemple
On veut reprsenter les 10 premiers termes de la suite :
un = (1 + n1 )n = f (n) par les points n + i f (n).
On ouvre un cran de gomrie et on tape :
f(n):=(1+1/n)^n
seq(point(k+i*f(k)),k,1,10)
On obtient :
On voit les points dans cet cran de gomrie
Si on tape :
for (k:=1;k<11;k++) {point(k+i*f(k));}
On obtient :
les points sont seulement dans lcran DispG quon
ouvre avec Cfg->Montrer->DispG ou avec DispG()
Mais si on ouvre un cran de gomrie et si on tape :
L:=[];for (k:=1;k<11;k++)
{L:=append(L,point(k+i*f(k)));}:;L;
On obtient :
On voit les points dans cet cran de gomrie
On peut aussi utiliser la syntaxe comme avec Maple, seq(2^k,k=0..8),
en ajoutant ventuellement un pas seq(2^k,k=0..8,1)
8.4.23
676
repeat
saisir("Entrez a>1",a);
until a>4;
Ou on tape :
repeter
saisir("Entrez a>4",a);
jusqua a>1;
Cela aura pour effet de redemander la valeur de a jusqu ce quelle soit strictement
suprieur 4.
8.4.24
677
ou
somantque(0.2)
On obtient :
137/60
Remarque
On peut aussi crire un while avec un for :
while (<condition>)<instructions> est quivalent :
for (;<condition>;)<instructions>
On aurait donc pu crire :
somwhilefor(eps):={
local s,j;
s:=0;
j:=1;
for (;1/j>=eps;){
s:=s+1/j;
j:=j+1;
}
return s;
}
ou encore
somforwhile(eps):={
local s,j;
s:=0;
for (j:=1;1/j>=eps;j++){
s:=s+1/j;
}
return s;
}
On tape :
somwhile(0.1);somforwhile(0.1);somwhilefor(0.1)
On obtient :
7129/2520,7129/2520,7129/2520
8.4.25
label permet de reprer une instruction dans un programme par un nom de variable.
goto permet de modifier lordre dexcution des instructions, en excutant les instructions du programme partir dune instruction repre par un label.
label a comme arguments, une suite de caractres : par exemple label(truc)
ou label(1).
goto a comme arguments un nom de label : par exemple goto(truc) ou goto(1).
On tape :
678
essai(eps):={
local s,j;
s:=0;
j:=0;
label(truc);
j:=j+1;
s:=s+1/j;
if (1/j>=eps) goto(truc);
print(s);
return 0;
}
puis :
essai(0.2)
On obtient :
s:137/60 crit en bleu, puis 0 comme rponse
8.5
8.5.1
read a comme argument le nom dun fichier (fichier cre par write ou par la
sauvegarde dun diteur et dans lequel on a crit, par exemple, plusieurs fonctions
ou instructions).
read renvoie la liste des valeurs stockes dans le fichier.
On tape :
a:=3.14; b:=456;write("titi",a,b);
puis :
read("titi")
On obtient :
[3.14,456] et les variables a et b sont affectes par
3.14 et 456
Attention
Si a et b existent leurs valeurs seront remplaces sans pravis par les valeurs stockes dans le fichier :
le principe de read est que lutilisateur met dans un fichier par exemple des programmes ou des grosses variables, donc il sait ce quil y a dedans, et lors dun
read les instructions sont excutes et seules les reponses sont affiches.
8.5.2
679
8.5.3
680
puis :
testfprint("toto")
On obtient :
la cration dun fichier "toto" dans lequel il y a
12345678910
8.5.4
8.5.5
681
expr permet dutiliser une chane de chiffres ne commenant pas par un zro
comme un nombre entier crit en base 10 ou une chane de chiffres comportant un
point comme un nombre dcimal crit en base 10.
On tape :
expr("123")+1
On obtient :
124
On tape :
expr("45.67")+2.12
On obtient :
47.79
expr permet dutiliser une chane de chiffres ne comportant pas de 8, ni de 9, et
commenant par un zro comme un nombre entier crit en base 8.
On tape :
expr("0123")
On obtient :
83
En effet 1 82 + 2 8 + 3 = 83
Remarque :
Si on tape expr("018") on obtient le nombre dcimale 18.0.
expr permet dutiliser une chane contenant des chiffres et les lettres a,b,c,d,e,f,
et commenant par 0x comme un nombre entier crit en base 16.
On tape :
expr("0x12f")
On obtient :
303
En effet 1 162 + 2 16 + 15 = 303 Voir aussi 6.5.16
8.5.6
682
On obtient :
La variable c contient 1
On tape :
a:="ifactor(54)";expr(a)
ou :
expr("ifactor(54)")
On obtient :
2*3^3
8.5.7
string value une expression et renvoie sa valeur sous la forme dune chane de
caractres.
On peut aussi utiliser la concatnation de lexpression avec une chane vide.
On tape :
string(ifactor(6))
Ou on tape :
ifactor(6)+""
Ou on tape :
""+ifactor(6)
On obtient :
"2*3"
On tape :
string(quote(ifactor(6)))
On obtient :
"ifactor(6)"
683
8.6
8.6.1
args ou args(NULL) renvoie la liste des arguments dune fonction sous forme
dune liste : llment dindice 0 est la fonction, les suivants sont les arguments
passs la fonction. Cela permet de travailler avec des fonctions ayant un nombre
darguments non fix a lavance.
Remarque on ne peut pas mettre args() mais args ou args(NULL) (NULL
est obligatoire) on peut aussi utiliser (args)[0] pour dsigner la fonction, (args)[1]
pour dsigner le nom du premier argument... mais il ne faut pas oublier les parenthses autour de args !
On tape :
testargs():={ local y; y:=args; return y[1];}
testargs(12,5)
On obtient :
12
On tape :
somme():={
local s,a;
a:=args;
s:=0;
for (k:=1;k<size(a);k++){
s:=s+a[k];
}
return s;
}
puis :
somme(1,2,3,4)
On obtient :
10
8.6.2
684
r:=irem(a,b);
a:=b;
b:=r;
}
return a;
}
puis on tape :
testbreak(4,0)
On obtient :
4 car il y a eu linterruption de la boucle while
quand b==0
8.6.3
8.6.4
8.7. LE DEBUGGEUR
8.6.5
685
8.6.6
8.7
8.7.1
Le debuggeur
Ouvrir le dbuggeur : debug
686
pgcd(a,b):={
local r;
while(b!=0) {
r:=irem(a,b);
a:=b;
b:=r;
}
return a;
}
Puis si on veut observer les variables a et b, on clique sur watch : watch sinscrit
dans la ligne eval et on complte cette ligne en watch(a) puis enter, puis on
clique sur watch et on complte watch en watch(b) puis enter.
Ensuite on clique sur sst, et on voit chaque tape (la ligne qui est excute est
en surbrillance) les valeurs de a et b dans la zone situe en dessous de la barre des
boutons.
8.7.2
watch a comme argument le nom des variables que lon dsire surveiller.
On tape par exemple :
watch(a,b)
On obtient :
lvolution de a et de b lors du droulement du
programme
8.7.3
rmwatch a comme argument le nom des variables que lon ne dsire plus surveiller.
On tape par exemple :
rmwatch(a,b)
On obtient :
lvolution de a et de b lors du droulement du
programmenest plus visible
8.7.4
8.7. LE DEBUGGEUR
8.7.5
687
8.7.6
8.7.7
8.7.8
688
8.7.9
8.7.10
Pause est une instruction qui permet de suspendre lexcution dun programme.
Pause na pas dargument ou a comme argument le temps de pause en secondes :
on ne met pas de parenthses, on crit :
Pause; ou Pause n;
Lorsque Pause na pas dargument (ne pas mettre de parenthses), une fentre
8.7. LE DEBUGGEUR
689
On obtient :
8.7.11
WAIT est une instruction qui permet de suspendre lexcution dun programme.
WAIT a comme argument le temps de pause en secondes.
On tape : a:=21;b:=5 puis,
print(a);WAIT(3);print(b);
On obtient :
21 scrit en bleu, un arrt de 3 secondes, puis 5
scrit en bleu et on a (1,0,1) comme rponse
8.7.12
690
On obtient :
"lerreur est + Bad Argument Value"
On tape :
essai([[3,4]])
On obtient :
[[4,6]]
8.7.13
throw ou error ou ERROR permet de gnrer une erreur en provoquant laffichage dune erreur.
On tape :
f(x):={
if (type(x)!=DOM_INT)
throw(erreur);
else
return x;
}
puis
f(1.2)
On obtient :
"erreur Error: Bad Argument Value"
puis
f(12)
On obtient :
12
On peut capter lerreur grace cette fonction f que lon utilise dans la fonction g
suivante :
g(x):={
try { f(x); } catch (err){ x:=0; }
return x;
}
puis
g(1.2)
On obtient :
0
puis
g(12)
On obtient :
12
La fonction g(x) renvoie, x si x est un entier, et 0 sinon.
Chapitre 9
Gnralits
Toutes les commandes graphiques faites dans une ligne dentre auront en rponse louverture dun cran graphique.
Les dessins de la gomtrie 2-d se font en gnral dans un cran de gomtrie
2-d qui est un cran graphique interactif muni dun diteur de commandes et dune
barre de menus (on ouvre un cran de gomtrie 2-d avec Alt+g).
Les dessins faits dans un cran de gomtrie 2-d sont interactifs : on peut
dfinir des points et des segments avec la souris et modifier une figure en faisant
bouger un de ses points avec la souris.
9.2
9.2.1
692
Remarque
erase nefface pas un cran de gomtrie, en effet on na pas besoin deffacer un
cran de gomtrie car soit on change ses commandes dentre, soit on ouvre un
autre cran de gomtrie pour faire une nouvelle figure.
9.2.2
9.2.3
693
vecteur_unitaire_Oy_2d(),legende(i,"v",vert,quadrant2)
On obtient :
Le vecteur unitaire de laxe des y de cran de
gomtrie 2-d avec v crit en vert
9.2.4
9.2.5
Lorsque les axes sont dessins, les points ayant pour coordonnes des multiples
de TX et de TY sont dessins.
Pour effacer ces points, en gardant les axes il suffit de mettre 0 dans TX et/ou dans
TY : on dfinit TX et TY avec la configuration graphique.
9.2.6
694
9.2.7
9.2.8
695
papier_quadrille(1,pi/3,sqrt(3)/2,x=-2..3,y=-1..2)
On obtient :
Le reseau form par des losanges dangle /3 dans le
rectangle [2, 3] [1, 2]
9.2.9
9.2.10
696
9.3
9.3.1
Les attributs des objets graphiques peuvent tre dfinis par des commandes ou
avec des paramtres optionnels qui sont soit globaux soit locaux.
Certains arguments optionnels, comme titre, labels, sont globaux, ils sont
mis au dbut dune ligne de commandes ayant comme dernire instruction une instruction graphique et sont applicables toutes les instructions graphiques de cette
ligne de commandes. Par exemple :
titre="A et son conjugu B";A:=point(1+i);B:=point(1-i).
Ils sont dscrits ci-aprs.
Certains noms comme affichage, couleur, legende peuvent tre des
noms de commandes ou des noms de paramtres optionnels :
Les commandes sappliquent lobjet graphique mis comme argument ou,
sil ny a pas darguments, modifient les attributs par dfaut qui seront utiliss pour les instructions graphiques qui suivent.
On tape :
couleur(rouge)
On obtient :
1 et toutes les commandes graphiques sans
paramtre optionnel de couleur seront dessines en
rouge
On tape :
couleur(triangle(-1-i,1,1+i),bleu)
On obtient :
le triangle(-1-i,1,1+i) est dessin en bleu
Il y a deux sortes dattributs : les attributs globaux qui sont partags par
toutes les commandes graphiques affiches dans un mme cran graphique
et les attributs individuels.
On tape (attribut individuel) :
triangle(0,1,1+i,couleur=bleu)
On obtient :
le triangle(0,1,1+i) dessin en bleu
On tape (attribut global) :
titre="medianes";triangle(-1-i,1,1+i);
mediane(-1-i,1,1+i); mediane(1,-1-i,1+i);
mediane(1+i,1,-1-i)
On obtient :
le titre "medianes" pour le triangle(0,1,1+i) et
ses mdianes
9.3.2
Les attributs des objets graphiques peuvent tre dfinis par des commandes qui
sont :
legend ou legende,
display ou affichage ou color ou couleur
697
9.3.3
Les attributs des objets graphiques peuvent aussi se dfinir partir de paramtres optionnels. Ils sont de la forme nom_de_lattribut=valeur1+valeur2+....
Il y a deux sortes de paramtres optionnels :
les paramtres optionnels globaux sont mis au dbut dune ligne de commandes ayant comme dernire instruction une instruction graphique et sont
applicables toutes les instructions graphiques de cette ligne de commandes,
les paramtres optionnels locaux sont passs en paramtre dune commande
graphique.
La liste des attributs et leurs valeurs possibles sont :
display=filled ou affichage=rempli pour dessiner des figures
pleines (est utilis seulement comme attribut local),
axes=1 ou axes=true et axes=0 ou axes= false montre ou cache
les axes. Cela est utilis seulement comme attribut global et suivi dune commande graphique,
couleur=0...couleur=255 ou color=0...color=255 pour dessiner
avec la couleur indique (est utilis seulement comme attribut local),
couleur= une valeur entire entr 256 et 256+7*16+14 pour dessiner avec
une couleur de larc en ciel,
epaisseur=1... epaisseur=7 ou thickness=1... pour faire des traits
plus ou moins pais. epaisseur est un attribut pour compatibilit Maple
(est utilis seulement comme attribut local),
nstep=400 permet de spcifier le nombre de points dchantillonage de la
fonction reprsenter en 3-d (est utilis seulement comme attribut local),
tstep=0.3 permet de donner le saut dchantillonnage dun paramtre de
trac paramtrique en gnral t, par exemple
plotparam(sin(3*t)+i*cos(3*t),t=0..2*pi/3,tstep=0.01)
(est utilis seulement comme attribut local),
ustep=0.3 permet de donner le saut dchantillonnage de la premire
variable dun trac paramtrique 2-d, en gnral u, (est utilis seulement
698
699
droite(y=x,style=point,affichage=vert+line_width_2)
est identique :
droite(y=x,affichage=vert+ligne_tiret_point+
line_width_2),
titre="..." ou title="..." permet de mettre un titre la fentre
graphique (est utilis seulement comme attribut global).
gl_texture= peut tre un attribut local ou global.
gl_texture="nom_fichier_image" permet de mettre une image
sur un objet graphique 3-d ou sur un rectangle 2-d si il est utilis comme attribut local. Par exemple carre(i,1+i,gl_texture="image.jpg")
dessine limage contenue dans le fichier "image.jpg" dans le carr, et
gl_texture= permet de mettre un fond sur un graphique 2-d si il est utilis comme attribut global. Par exemple gl_texture="image.jpg";
carre(i,1+i) dessine un carr avec comme fond dcran limage contenu
dans le fichier "image.jpg"
gl_x_axis_name="xname", gl_y_axis_name="yname",
gl_z_axis_name="" : utilis comme attribut global, dfinit individuellement les noms des axes x, y, z,
gl_x_axis_unit="xunit", gl_y_axis_unit="yunit",
gl_z_axis_unit="zunit" : utilis comme attribut global, dfinit individuellement les units des axes x, y, z,
gl_x_axis_color=n, gl_y_axis_color=n, gl_z_axis_color=n :
utilis comme attribut global, dfinit individuellement les couleurs des axes
x, y, z avec la couleur n,
gl_x=xmin..xmax, gl_y=ymin..ymax, gl_z=zmin..zmax : utilis comme attribut global, definit la configuration du graphique (pas compatible avec linteractivit),
gl_xtick=, gl_ytick=, gl_ztick= : utilis comme attribut global
met des marques sur les axes selon la valeur donne,
gl_shownames=true or false : utilis comme attribut global, montre
ou cache les noms des objets,
gl_rotation=[x,y,z] : utilis comme attribut global, definit laxe de
rotation pour les animations des scnes 3-d,
gl_quaternion=[x,y,z,t] : utilis comme attribut global definit le
quaternion pour la visualisation des scnes 3-d (pas compatible avec linteractivit),
dautres options d OpenGL pour configurer la lumire existent mais ne sont
pas dcrites ici.
Remarque
Les options dopengl sont utiliser avec une grande prudence car elles ne sont pas
compatibles avec linteractivit.
9.3.4
700
entires (en partant du coin en haut gauche et les y dirigs vers le bas).
le 2ime paramtre est la lgende (soit une chane de caractres, soit le nom
dune variable : dans ce cas legende affiche le contenu de la variable),
ventuellement un 3ime paramtre pour indiquer le quadrant dans lequel il
faut mettre la lgende et dont la valeur est :
quadrant1,quadrant2,quadrant3,quadrant4
(par dfaut cest quadrant1).
legende met la chane de caractres cet endroit donn. situ en haut gauche
et les y sont dirigs vers le bas).
On tape :
legende(1+i,"bonjour")
On obtient :
Le point 1+i et "bonjour" crit partir du point 1+i
dans le premier quadrant
On tape :
legende(1+i,"bonjour",quadrant4)
Ou on tape :
legende(1+i,quadrant4,"bonjour")
On obtient :
Le point 1+i et "bonjour" crit dans le quatrime
quadrant du point 1+i
On tape :
legende([30,20],"bonjour")
On obtient :
"bonjour" crit partir du point en pixels x=30 et
y=20
On tape :
legende([30,20],"bonjour",quadrant4)
On obtient :
"bonjour" crit partir du point en pixels x=30 et
y=20 dans le quatrime quadrant
Pour mettre une lgende un angle voir 9.17.5
Attention
Le nom legend (ou legende) peut servir de paramtre global pour mettre en
lgende le nom des units sur les axes. Dans ce cas, legende) est suivi de = puis
dun vecteur compos de 2 chaines qui sont le nom des units (on met une chaine
vide si on ne veut plus avoir lunit). Le nom legend (ou legende) peut aussi
701
servir de paramtre local qui sera le paramtre optionnel dune commande point
ou dune commande traant un polygone (triangle...polygone). Dans ce
cas, la lgende sinscrit au niveau du point ou au niveau du milieu du ct reliant le
dernier au premier sommet du polygone. Le nom du paramtre optionnel (ici unit).
Le nom legend ou legende) est suivi de = puis de la lgende (soit une chaine
de caractres, soit un nom de variable contenant une chaine de caractres) est le
paramtre que lon passe comme argument supplmentaire dans les commandes
graphiques.
On tape :
legende=["mn","kg"]
On obtient :
6mn 6mn selon laxe des x et 5kg 5kg selon laxe des
y
On tape :
point(1+i,legende="bonjour")
Ou on tape :
a:="bonjour";point(1+i,legende=a)
On obtient :
Le point 1+i et "bonjour" crit au point 1+i
On tape :
polygone(-1,-i,1,2*i,legende="P")
Ou on tape :
a:="P";polygone(-1,-i,1,2*i,legende=P)
On obtient :
Le polygone -1,-i,1,2*i et "P" crit au point -1/2+i
Remarque
Pour mettre une legende a un angle on utilise angle avec comme dernier paramtre une chaine vide (dans ce cas un petit arc dsignera langle) ou une chaine
que sera la legende (dans ce cas un petit arc et la chaine dsignera langle) par
exemple :
angle(0,1,1+i,"") ou angle(0,1,1+i,"a") trace langle et
angle(0,1,1+i,"")[0] ou angle(0,1,1+i,"a")[0] renvoie /4. Mais
Attention angle(0,1,1+i,"") ou angle(0,1,1+i,"a") renvoie une figure gomtrique i.e. le trac`e de langle. Donc si vous voulez que a dsigne la
valeur de langle et avoir aussi le dessin il faut taper par exemple :
a:=angle(0,1,1+i); et angle(0,1,1+i,"a")
702
9.3.5
affichage couleur peut avoir comme paramtre diffrentes valeurs, relies par +, permettant de grer les attributs des graphiques venir dune ligne de
commandes normale (la commande est alors globale) ou de grer les attributs dun
objet graphique ou dune lgende (la commande est alors locale).
Attention
affichage(0) remet laffichage par dfaut : couleur noire, figure non pleine,
les points ont des lgendes...
Pour ne pas afficher le nom de lobjet
hidden_name est une valeur de paramtre de la commande affichage qui
permet de ne pas afficher le nom de lobjet. On tape (ici la commande affichage
est locale au point A) :
affichage(A:=point(1+i),hidden_name);B:=point(-1);
D:=droite(A,B)
On obtient :
A est dessin sans son nom et B et la droite A,B sont
dessins avec leur nom
On tape (ici la commande affichage est locale) :
A:=point(1+i);B:=point(-1);affichage(D:=droite(A,B),hidden_name)
On obtient :
Les points A et B et leurs noms et la droite A,B
dessine sans son nom
Attention NE PAS mettre affichage(hidden_name) comme commande globale car aprs, aucun nom sera visible, et seule la commande affichage(0)
remettra laffichage par dfaut.
Mettre de la couleur
Un entier entre 0 et 255 (ou un nom de couleur) reprsente une couleur de la palette
des couleurs que lon peut voir avec le bouton des couleurs de lcran de gomtrie
et, un entier entre 256 et 381 reprsente les couleurs de larc en ciel. Pour voir les
couleurs de larc en ciel il suffit dexcuter le programme suivant :
arcenciel():={
local j,C;
C:=[];
for (j:=256;j<382;j++){
C:=append(C,carre(j,j+1,couleur=j+rempli));
}
C;
}
703
Pour voir larc en ciel, on tape a:=arcenciel():;, puis a pour voir toutes les
couleurs (le numro dune couleur est alors gal son abscisse) ou par exemple
a[300-256] pour voir la couleur de numro 300.
Autre mthode, on tape :
ciel():={ local j;
for (j:=0;j<126;j++)
carre(j,(j+1),affichage=rempli+256+j);} puis,
ClrGraph;ciel() et on ouvre la fentre DispG avec le menu Cfg sous menu
Montrer puis DispG. On regle cfg de cette fentre en prenant WX-=-1, WX+=127,
WY-=0 et WY+=1 et on voit ainsi les 126 couleurs de larc en ciel !
La commande couleur ou affichage avec comme paramtre un entier
entre 0 et 381 (ou un nom de couleur) permet de tracer un objet gomtrique avec
la couleur spcifie.
couleur ou affichage a un argument (resp deux arguments) : le nom de
la couleur ou lentier dsignant cette couleur (noir=0, rouge=1, vert=2, jaune=3,
bleu=4) (resp lobjet gomtrique ou une lgende et le nom de la couleur ou le
numro de la couleur).
Attention
Le nom couleur ou affichage ou display ou color peut aussi servir de paramtre optionnel dune commande graphique. Dans ce cas, le nom du paramtre
optionnel (ici couleur ou affichage ou color) est suivi de = puis de la
valeur de lentier dsignant la couleur, est le paramtre que lon passe comme argument supplmentaire dans les commandes graphiques.
On tape :
couleur(segment(0,1+i),rouge)
Ou on tape :
segment(0,1+i,couleur=rouge)
On obtient :
Le segment(0,1+i) est dessin en rouge
On tape :
couleur(point(1+i),2)
Ou on tape :
point(1+i, couleur=2)
On obtient :
Le point 1+i apparait avec une croix (x) verte
On tape :
affichage(rouge)
On obtient :
704
On tape :
couleur(legende(1+i,"AA"),rouge)
Ou on tape :
legende(1+i,"AA",couleur=rouge)
On obtient :
Le point(1+i) dessin en rouge a comme lgende rouge
AA
Pour dessiner une figure pleine
rempli ou filled est une valeur de paramtre de la commande affichage
qui permet d e dessiner une figure pleine. On tape (ici la commande affichage
est globale) :
affichage(rempli);carre(0,1+i);triangle(-1,0,-i);
On obtient :
le carre(0,1+i) plein et le triangle(-1,0,-i) plein
Les diffrents affichages de points
couleur ou affichage peut avoir comme argument la forme de la reprsentation des points 2-d laffichage. Ces formes peuvent avoir des traits plus ou
moins pais selon la valeur de n de point_width_n.
La reprsentation des points 3-d a comme forme un carr (cest point_carre)
plus ou moins gros selon la valeur de n de point_width_n.
Les diffrentes options sont :
point_losange ou rhombus_point pour reprsenter un point par un
petit losange (3),
point_carre ou square_point pour reprsenter un point par un petit
carr (2),
point_croix ou cross_point pour reprsenter un point par une croix
() cest la reprsentation par dfaut,
point_etoile ou star_point pour reprsenter un point par une toile
(*),
point_plus ou plus_point pour reprsenter un point par le signe plus
(+),
point_point pour reprsenter un point par un point ().
point_triangle ou triangle_point pour reprsenter un point par
un triangle (4),
point_invisible ou invisible_point pour ne pas reprsenter un
point.
705
706
9.4
9.5
9.6
Laffectation dun objet gomtrique dans une variable permet de dfinir cet objet
gomtrique et de le tracer avec une lgende ayant comme nom, le nom de la
variable.
Si on veut donner cet objet gomtrique un nom diffrent de celui de la variable,
on peut dfinir lobjet gomtrique 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 dfini mais nest pas trac.
puis on tape :
legende(B,"Bien")
Ou on tape :
point(affixe(B),legende="Bien")
On obtient :
708
9.7
9.7.1
9.7.2
709
readrgb peut lire un fichier contenant une image. Ce fichier peut tre un fichier
.jpg ou .png ou .gif.
readrgb renvoie [[nombre_canaux,largeur,hauteur],rouge,vert,transparence,bleu]
o rouge,vert,transparence,bleu sont des matrices.
On tape :
a:=readrgb("image.jpg")
On obtient :
une liste de 5 lments qui sont [4,20,10] suivi de 4
matrices de dimension 20,10 qui indiquent o sont
situ les couleurs rouge,vert,transparence,bleu]
9.7.3
writergb permet de stocker une image lue avec readrgb dans un fichier de
suffixe .png.
ou
de crer une image et de la stocker dans un fichier de suffixe .png. On peut crer
cette image avec des niveaux de gris ou des niveaux des diffrentes couleurs.
On possde une variable (par exemple a) contenant une image lue avec
readrgb.
writergb a deux arguments : le nom du fichier dans lequel on veut stocker
la nouvelle image et une liste contenant a[0] (liste contenant le nombre de
canaux et les dimensions de la matrice des pixels de cette image), puis les
couleurs de cette image qui sont les matrices a[1] pour la couleur rouge,
a[2] pour la couleur verte, a[3] pour la transparence et a[4] pour la
couleur bleu.
La transparence permet de superposer plusieurs images : sa valeur va de 0
255 (si la transparence vaut 0 cest un cache !).
On tape :
a:=readrgb("image.jpg")
Puis on tape :
writergb("imagevrb.png",[a[0],a[2],a[1],a[3],a[4]])
Puis on tape :
gimp "imagevrb.png"
On obtient :
limage de dpart dans laquelle le rouge est
devenu vert et le vert est devenu rouge
Essayer de crer une image :
writergb("essai.png",[[4,2,2],[[255,0],[0,0]],
[[0,255],[0,0]],[[255,125],[255,255]],
[[0,0],[255,0]]])
vous obtenez (avec un vert attenu du au 125 de la 3ime matrice) :
710
x0
0.5
1.5
2
0
0.5
1.5
ou encore essayer :
writergb("image1.png",[[4,2,3],[[255,0,255],[0,255,0]],
[[0,0,255],[0,0,0]],[[255,125,125],[255,255,255]],
[[0,0,0],[255,255,0]]])
On peut aussi crer et stocker des images, au format PNG avec une version
simplifie de la syntaxe : pas dargument correspondant au nombre de canaux et aux dimensions de la matrice des pixels de cette image ni de matrice
correspondant la transparence.
writergb a alors deux ou quatre arguments : le nom du fichier dans lequel on veut stocker la nouvelle image et la matrice des niveaux de gris des
pixels, ou 3 matrices (du rouge, du vert et du bleu) donnant la couleur RGB
des pixels.
Par exemple :
writergb("image.png",[[255,0],[0,255]])
cre et affiche une image 2x2 pixels au format PNG en 256 niveaux de gris
(0 noir, 255 blanc)
writergb("image.png",[[255,0],[0,0]],[[0,255],[0,0]],
[[0,0],[255,0]])
cre et affiche une image 2x2 pixels au format PNG en RGBA avec 256 niveaux pour chaque couleur (rouge, bleu, vert). Ici la premire ligne rouge,vert
et la deuxime ligne est bleu,noir. Essayez :
writergb("essai.png",[[4,300,300],makemat(0,300,300),
makemat(0,300,300), makemat(255,300,300),
makemat(0,300,300)+idn(300)*255])
9.8
711
9.9
9.9.1
2=abs(1+i),
cercle(1,point(1+i)) renvoie le cercle de diamtre le point daffixe 1 et le
point daffixe (1+i)
9.9.2
712
reprsentant ses coordonnes rectangulaires (pour dfinir un point par ses coordonnes polaires il faut utiliser polar_point ou point_polaire.
Attention
Si a,b est un couple de 2 nombres complexes dont 1 nest pas rel, K:=point(a,b)
renvoie 2 points de mme nom (ici K) lun daffixe a, lautre daffixe b.
Lorsque a,b est un couple de 2 nombres rels, A:=point(a,b) renvoie et dessine le point ayant pour affixe a+ib.
point renvoie et dessine le point ayant pour affixe son argument. Ce point aura
la forme choisie par la commande affichage : par dfaut il aura la forme dune
croix et il aura la forme dun point si on a tap affichage(point_point).
On tape :
point(1+i)
On obtient :
Le point daffixe 1+i est trac avec une croix
On tape :
A:=point(-2,1)
On obtient :
Le point daffixe -2+i est trac avec une croix et est
not A
On tape :
point(-2,i)
On obtient :
Les 2 points daffixe -2 et i sont tracs avec une
croix
Remarque Lorquon fait une affectation par exemple A:=point(-2+i) cela a
pour effet de stocker le point(-2+i) dans la variable A, douvrir un cran graphique si on nest pas dans un niveau de gomtrie et de dessiner le point avec une
croix et de lui mettre comme lgende le nom qui est situ gauche de := ici A.
Si on fait plusieurs affectations avec un seul signe := par exemple :
A,B:=point(-2+i),point(2+i) la variable A contient le point(-2+i),
la variable B contient point(-2+i) mais les deux points auront le mme nom :
A,B et on ne pourra pas deplacer ces points en mode pointeur. Pour viter cela
on doit taper sur des niveaux spars :
L:=point(-2+i),point(2+i):;A:=L[0];B:=L[1]
Autre exemple
LL:=point(-2,i):;C:=LL[0];D:=LL[1] dfinit le point C daffixe -2 et
le point D daffixe i (car laffixe de D nest pas rel !).
9.9.3
713
9.9.4
9.9.5
714
On obtient :
Le point daffixe 1/2+i/2 est trac avec une croix et
est not A
On tape :
B:=inter_unique(cercle(0,1),droite(-1,i))
On obtient :
Le point daffixe i est trac avec une croix et est
not B
On tape :
B1:=inter_unique(cercle(0,1),droite(-1,i),[i])
On obtient :
Le point daffixe -1 est trac avec une croix et est
not B1
On tape :
B2:=inter_unique(cercle(0,1),droite(-1,1+2*i),1+2*i)
On obtient :
Le point daffixe i est trac avec une croix et est
not B2
On tape :
C:=inter_unique(cercle(1,sqrt(2)),cercle(0,1))
On obtient :
Le point daffixe i est trac avec une croix et est
not C
On tape :
C1:=inter_unique(cercle(1,sqrt(2)),cercle(0,1),[i])
On obtient :
Le point daffixe -i est trac avec une croix et est
not C1
On tape :
C2:=inter_unique(cercle(1,sqrt(2)),cercle(0,1),i/2)
On obtient :
Le point daffixe i est trac avec une croix et est
not C2
9.9.6
715
716
9.9.7
9.9.8
9.9.9
717
9.9.10
lorsque
j 6= 0.
j
j
P j
Si j = 0, barycentre ou barycenter renvoie une erreur.
On tape :
barycentre([1+i,1],[1-i,1])
Ou on tape :
barycentre([point(1,1),1],[point(1,-1),1])
Ou on tape :
barycentre([[1+i,1],[1-i,1]])
Ou on tape :
barycentre([[point(1,1),1],[point(1,-1),1]])
On obtient :
Le point daffixe 1 est trac avec une croix
On tape :
barycentre([[1+i,1],[1-i,1],[1+4*i,2]])
Ou on tape :
barycentre([[point(1,1),1],[point(1,-1),1],[point(1+4*i),2]])
Ou on tape :
barycentre([[1+i,1-i,1+4i],[1,1,2]])
Ou on tape :
barycentre([[point(1,1),point(1,-1),point(1,4)],[1,1,2]])
On obtient :
Le point daffixe 1+2i est trac avec une croix
718
9.9.11
9.9.12
Attention
Si on tape :
T:=triangle_equilateral(0,2,C):;sommets(T[0])
On obtient :
les points
[pnt(0,0),pnt(2,0),pnt((2*(sqrt(3)*(i)+1))/2,0)] sont
tracs avec une croix
9.9.13
719
9.9.14
720
721
9.10
9.10.1
Voir aussi : 3.10.1 et10.5.1 pour la gomtrie 3-d et 9.17.12 pour avoir la valeur de la pente dune droite.
droite, en gomtrie plane, a comme argument deux points (ou deux nombres
complexes reprsentant laffixe de ces points) ou une liste de deux points (ou de
deux complexes) ou a comme argument un point et pente=m ou a comme argument un point et son vecteur directeur [u1,u2] ou encore une quation de droite
de la forme a*x+by+c=0.
droite renvoie et trace la droite dfinie par les deux arguments.
On tape :
droite(0,1+i)
On obtient :
La droite dquation y=x est trace
On tape :
droite(1+i,pente=1)
On obtient :
La droite dquation y=x est trace
On tape :
droite(1+i,[3,3])
On obtient :
La droite dquation y=x est trace
On tape :
droite(y-x=0)
On obtient :
La droite dquation y=x est trace
Remarque : lorientation de la droite
Voir aussi : 10.5.2 pour la gomtrie 3-d.
droite dfinit une droite oriente :
Lorsque la droite est donne par deux points, son orientation est dfinie par
lordre des points donns en argument. Par exemple droite(A,B) dfinit
722
Lorsque cest une quation qui dfinit la droite on crit lquation sous
la forme :"membre_de_gauche-membre_de_droite=0" pour avoir une quation de la droite de la forme a*x+by+c=0 et alors le vecteur orientant
la droite est [b,-a] ou encore son orientation est dfinie par le produit
vectoriel 3-d de son vecteur normal (de cote 0) et de [0,0,1]. Par exemple
droite(y=2*x) est oriente par [1,2] car son quation est -2*x+y=0
et cross([-2,1,0],[0,0,1])=[1,2,0].
Lorsque la droite est donne par un point A et sa pente m, son orientation
9.10.2
9.10.3
723
segment(-1,i)
On obtient :
Le segment -1, i
9.10.4
Le segment : Line
9.10.5
724
Ou on tape :
vecteur(-1+i,V)
Ou on tape :
vecteur([-1,1],V)
On tape :
point([-1,1],coordonnees(V))
On obtient :
Le trac du vecteur dorigine -1+i et dextrmit 2*i
On tape :
D:=point([-1,1]+coordonnees(V))
On obtient :
D le point(2*i)
Remarque
En calcul formel, on travaille sur la liste des coordonnes des vecteurs que lon
obtient avec la commande coordonnees (cf 9.16.4).
9.10.6
9.10.7
9.10.8
725
Voir aussi : 10.6.3 pour la gomtrie 3-d et 3.10.5 pour les tangentes un
graphe.
tangent peut avoir comme arguments :
- un objet gomtrique G et un point A ou,
- un point A dfini par element dont les paramtres sont, un objet gomtrique
G et un rel reprsentant la valeur du paramtre de lquation paramtrique de G.
tangent renvoie une liste de droites et dessine ces droites qui sont les tangentes
cet objet gomtrique G et qui passent par le point A.
On tape :
tangent(cercle(0,1),point(1+i))
On obtient :
La droite dquation x=1 et la droite dquation y=1
On tape :
tangent(element(cercle(0,1),1))
On obtient :
La tangente au cercle de centre 0 et de rayon 1, au
point daffixe exp(i)
On tape :
tangent(circle(i,1+i),point((1+i*sqrt(3))*2))
On obtient :
9.10.9
mediane a comme argument 3 points (ou 3 nombres complexes reprsentant laffixe de ces points ou encore une liste de 3 points ou de 3 complexes).
mediane renvoie et dessine la droite passant par le premier argument et par le
milieu du segment dfini par les deux autres arguments.
On tape :
mediane(0,1,i)
On obtient :
La droite dquation y=x est trace
726
9.10.10
hauteur a comme argument 3 points (ou 3 nombres complexes reprsentant laffixe de ces points ou encore une liste de 3 points ou de 3 complexes).
hauteur renvoie et dessine la droite qui passe par le premier argument et qui est
perpendiculaire la droite dfinie par les deux autres arguments.
On tape :
hauteur(0,1,i)
On obtient :
La droite dquation y=x
9.10.11
9.10.12
bissectrice a comme argument 3 points (ou 3 nombres complexes reprsentant laffixe de ces points ou encore une liste de 3 points ou de 3 complexes).
bissectrice renvoie et dessine une droite qui est la bissectrice de langle de
sommet le premier argument et dfini par le deux autres arguments.
On tape :
bissectrice(0,1,i)
On obtient :
La droite dquation y=x
9.10.13
727
exbissectrice a comme argument 3 points (ou 3 nombres complexes reprsentant laffixe de ces points ou encore une liste de 3 points ou de 3 complexes).
exbissectrice renvoie et dessine une droite qui est la bissectrice extrieure de
langle de sommet le premier argument et dfini par le deux autres arguments.
On tape :
exbissectrice(0,1,i)
On obtient :
La droite dquation y=-x
9.11
Les triangles
9.11.1
Gnralits
Xcas permet de tracer des triangles quelconques, isocles, rectangles, quilatraux avec les commandes : triangle, triangle_isocele, triangle_rectangle,
triangle_equilateral.
Ces commandes ont comme arguments ce quil faut pour dfinir le triangle (au
moins 2 sommets) et ventuellement comme dernier argument le nom dune variable. Ce nom de variable servira dfinir et tracer le troisime sommet avec sa
lgende.
Attention
Ces commandes soit renvoient et tracent le triangle demand, soit renvoient une
liste compose du triangle demand et du sommet demand et tracent ce triangle
et son troisime sommet avec sa lgende.
9.11.2
728
9.11.3
9.11.4
729
On obtient :
Le triangle rectangle de sommets i, -i, -4+i
si il a quatre arguments, le dernier argument est le nom dune variable qui
servira dfinir le troisime sommet.
On tape :
triangle_rectangle(i,-i,2,D)
On obtient :
Le triangle rectangle de sommets i, -i, 4+i
On tape :
normal(affixe(D))
On obtient :
4+i
9.11.5
9.12
Les quadrilatres
730
9.12.1
Gnralits
Xcas permet de tracer des quadrilatres quelconques, des carrs, des losanges,
des rectangles, des paralllogrammes avec les commandes : quadrilatere,
carre, losange, rectangle, parallelogramme.
Ces commandes ont comme arguments ce quil faut pour dfinir le quadrilatre
(au moins 2 sommets) et ventuellement comme dernier argument le nom dune
ou deux variables. Ces noms de variables serviront dfinir et tracer les derniers
sommets avec leur lgende.
Attention
Ces commandes soit renvoient et tracent le quadrilatre demand, soit renvoient
une liste compose du quadrilatre demand et du ou des sommets demands et
tracent ce quadrilatre avec une lgende pour son troisime ou pour son troisime
et son quatrime sommet.
9.12.2
9.12.3
731
9.12.4
Le rectangle : rectangle
732
9.12.5
733
1+i
9.12.6
9.13
Les polygones
9.13.1
734
On obtient :
3/2+i*sqrt(3)/2
On tape :
affixe(D)
On obtient :
1+i*sqrt(3)
On tape :
affixe(E)
On obtient :
i*sqrt(3)
On tape :
affixe(F)
On obtient :
-1/2+i*sqrt(3)/2
9.13.2
9.13.3
735
9.13.4
2i
3
, .., e
5i
3
9.13.5
2i
3
, .., e
5i
3
736
9.14
Les cercles
9.14.1
737
ci-dessus) et les deux arguments suivants sont les angles au centre des points
qui dlimitent larc et les deux derniers arguments sont des noms de variables
qui contiendront les points qui dlimitent larc. Le troisime et le quatrime
argument sont les mesures des angles au centre des points qui dlimitent
larc, ces angles sont mesurs en radians (ou en degrs) partir de laxe
dfini par les deux premiers arguments si le deuxime argument est un point
(dfinition du cercle par son diamtre) ou de laxe dfini par son centre C
et le point A = C + r si le deuxime argument est un complexe gal r
(dfinition du cercle par son centre et un complexe dont le module est gal
au rayon).
Le cinquime et le sixime argument ne sont pas obligatoires et servent
dfinir les extrmits de larc.
On tape :
cercle(-1,1,0,pi/4,A,B)
On obtient si on a coch radian dans la configuration du cas (bouton
donnant la ligne dtat) :
2
Larc AB (A=point(0) et B=point( 1+ 2+i
)) du
2
cercle de centre -1 et de rayon 1 est trac
En effet langle est compt partir de laxe (-1,0) et donc langle 0 est le
point(0).
On tape :
cercle(-1,i,0,pi/4,A,B)
On obtient si on a coch radian dans la configuration du cas (bouton
donnant la ligne dtat) :
2
Larc AB (A=point(-1+i) et B=point( 1 2+i
)) du
2
cercle de centre -1 et de rayon 1 est trac
En effet, langle est compt partir de laxe (-1,i-1) et donc langle 0 est le
point daffixe i-1.
On tape :
cercle(-1, point(i),0,pi/4,A,B)
On obtient :
2)
Larc AB (A=point(i) et B=point( 1+i(1+
)) du
2
cercle de diamtre -1,i
En effet, langle est compt partir de laxe (-1,i) et donc langle 0 est le
point daffixe i.
9.14.2
738
9.14.3
9.14.4
739
9.14.5
9.14.6
9.14.7
2 et d =
10 donc d2 r2 = 8
740
9.14.8
Laxe radical de deux cercles C1 et C2 est le lieu des points qui ont mme
puissance par rapport C1 et C2 .
On tape :
axe_radical(cercle(0,1+i),cercle(1,1+i)))
On obtient :
Le trac de la droite x=1/2
En effet : la droite x=1/2 est la mdiatrice du segment [0 ;1]
9.15
Les coniques
9.15.1
Lellipse : ellipse
9.15.2
741
9.15.3
742
On tape :
parabole(0,i)
On obtient :
La parabole de foyer 0 et de sommet i
On tape :
parabole(0,1)
On obtient :
La parabole de sommet 0 et dquation y = x2
On tape :
parabole(x^2-y-1)
ou on tape :
parabole(-i,1)
ou on tape :
parabole(i,-i)
On obtient :
La parabole de sommet -i et de foyers i
9.16
Les mesures
9.16.1
affixe est une fonction ayant comme argument un point ou un vecteur ou les
coordonnes dun point ou dun vecteur 2-d.
affixe renvoie laffixe du point ou du vecteur :
- si le point A a pour coordonnes cartsiennes (xA , yA ), affixe(A) renvoie
xA + i yA ,
- si le point B a pour coordonnes cartsiennes (xB , yB ), affixe(A-B) ou
affixe(vecteur(B,A)) renvoie xA xB + i (yA yB ) (car A-B dsigne
743
i
On tape :
affixe(point(i)-point(1+2*i))
On obtient :
-1-i
9.16.2
744
9.16.3
9.16.4
745
746
Ou on tape :
coordonnees(vecteur(point(i),vecteur(1+2*i)))
On obtient :
[1,2]
On tape :
coordonnees(point(i),vecteur(1+2*i))
On obtient :
[1,2]
On tape :
d:=droite(-1+i,1+2*i)
Ou on tape
d:=droite(point(-1,1),point(1,2))
Puis,
coordonnees(d)
On obtient :
[-1+i,1+2*i]
On tape :
d:=droite(y=(1/2*x+3/2))
On obtient :
[(3*i)/2,1+2*i]
On tape :
d:=droite(x-2*y+3=0)
On obtient :
[(3*i)/2,(-4+i)/2]
Attention
coordonnees peut aussi avoir comme argument une squence ou une liste de
points. coordonnees renvoie alors la squence ou la liste des listes des coordonnes de ces points, par exemple coordonnees(i,1+2*i) ou coordonnees(point(i),point(
renvoie la squence :
[0,1],[1,2]
et
coordonnees([i,1+2*i]) ou coordonnees([point(i),point(1+2*i)])
renvoie la matrice :
[[0,1],[1,2]] donc
coordonnees([1,2]) renvoie la matrice :
[[1,0],[2,0]] car [1,2] est considr comme la liste de 2 points daffixe 1
et 2.
9.16.5
747
rectangular_coordinates ou coordonnees_rectangulaires renvoie la liste de labscisse et de lordonne dun point donn par la liste de ses
coordonnes polaires.
On tape :
coordonnees_rectangulaires(2,pi/4)
Ou on tape :
coordonnees_rectangulaires(polar_point(2,pi/4))
On obtient :
[2/(sqrt(2)),2/(sqrt(2))]
9.16.6
polar_coordinates ou coordonnees_polaires renvoie la liste du module et de largument de laffixe dun point (en 2D) ou dun nombre complexe ou
de la liste de coordonnes rectangulaires.
On tape :
coordonnees_polaires(1+i)
Ou on tape :
coordonnees_polaires(point(1+i))
Ou on tape :
coordonnees_polaires([1,1])
On obtient :
[sqrt(2),pi/4]
9.16.7
748
9.16.8
9.17
Les mesures
9.17.1
749
9.17.2
La longueur dun segment et distance entre les deux objets gomtriques : distance longueur
750
On tape :
longueur(cercle(0,1),droite(-2,1+3i))
On obtient :
sqrt(2)-1
Attention Lorsque le calcul de longueur utilise des paramtres, il faut tre en mode
rel. Par exemple :
assume(a=[4,0,5,0.1])};
A:=point(0);
B:=point(a);
simplify(longueur(B,A))
simplify(longueur(A,B))
en mode complexe on a :
simplify(longueur(B,A)) renvoie a mais
simplify(longueur(A,B)) renvoie -a.
en mode rel on a :
simplify(longueur(B,A)) et simplify(longueur(A,B)) renvoie c.
9.17.3
751
752
9.17.4
9.17.5
753
9.17.6
angleat ou angleen (resp angleatraw ou angleenbrut) sont des commandes qui permettent laffichage avec lgende (resp sans lgende) de la valeur
dun angle dsign en cliquant (on cliqueson sommet puis ses 2 cts et enfin la
position de la laffichage). Ces commandes sont obtenues lorsquon utilse, dans
un niveau de gomtrie 2d ou 3d, le bouton Mode->Mesures->angleen ou
Mode->Mesures->angleenbrut. Dans ce cas il faut que tous les objets dsigns par la souris soient dj nomms, sauf les points qui seront alors dfinis par
les diffrents clicks de la souris.
On peut nammoins taper ces commandes dans une ligne de commande.
angleat ou angleen a comme argument quatre points (ou 3 points et 1 nombre
complexe qui est laffixe dun point).
Attention Il faut que les 3 premiers points aient un nom.
angleat ou angleen renvoie le 4-ime point, calcule la mesure (en radians ou
en degrs) de langle orient de sommet le premier argument, le deuxime argument se trouve sur le premier cot de langle et le troisime argument se trouve sur
le deuxime cot et cette mesure est affiche, prcde dune lgende, lendroit
du 4-ime point.
Ainsi anglen(A,B,C,D) dsigne la mesure de langle en radians (ou en degrs)
de (AB, AC) et cette messue sera affiche, pcde de A=, lendroit du point
D.
On tape :
A:=point(-1);B:=point(1+i);C:=point(i);
segment(A,B);segment(A,C);
754
9.17.7
plotarea(polygone(point(1),point((1+i)*1/2),point(1+i)))
On obtient :
le polygone rempli avec -1/4 affich au point(1)
On tape :
plotarea(polygone(point(1),point(1+i),point((1+i)*1/2)))
On obtient :
le polygone rempli avec 1/4 affich au point(1)
Remarque Si on ne voit pas laffichage, on tape par exemple :
755
plotarea(polygone(point(0),point(1),point(1+i),point((1+i)/2),point(i)))
On obtient :
le polygone rempli, mais ne laffichage au point(0)
est cach
On tape alors :
plotarea(polygone(point(0),point(1),point(1+i),point((1+i)/2),point(i)),affic
On obtient :
le polygone rempli, avec 3/4 affich au au point(0)
On peut aussi taper, pour navoir que la valeur :
plotarea(polygone(point(0),point(1),point(1+i),point((1+i)/2),point(i)))[3]
On obtient :
3/4
9.17.8
aire calcule laire dun cercle ou dun polygone toil par rapport son premier
sommet.
On tape :
aire(triangle(0,1,i))
On obtient :
1/2
On tape :
aire(carre(0,2))
On obtient :
4
9.17.9
areaat ou aireen et areaatraw ou aireenbrut sont des commandes obtenues lorsquon utilse, dans un niveau de gomtrie 2d ou 3d, le bouton Mode->Mesures->aireen
ou Mode->Mesures->airenbrut. Dans ce cas il faut que tous les objets dsigns par la souris soient dj nomms.
On peut nammoins taper ces commandes dans une ligne de commande.
756
areaat ou aireen et areaatraw ou aireenbrut ont comme arguments un cercle ou un polygone toil par rapport son premier sommet et 1 point
(ou 1 nombre complexe qui est laffixe dun point).
areaat ou aireen renvoie le point, calcule laire du cercle ou polygone toil
par rapport son premier sommet et affiche cette aire lendroit du point avec une
lgende. Attention Il faut que le cercle ou le polygone ait un nom.
areaatraw ou aireenbrut renvoie le point, calcule laire du cercle ou du polygone toil par rapport son premier sommet et affiche cette aire lendroit du
point.
On tape :
t:=triangle(0,1,i)
aireen(t,(1+i)/2)
On obtient :
1/2 scrit au point(1+i)/2 avec la lgende
On tape :
aireenbrut(triangle(0,1,i),(1+i)/2)
On obtient :
1/2 scrit au point(1+i)/2
On tape :
cc:=cercle(0,2)
aireen(cc,2.2)
On obtient :
4*pi scrit au point(2.2) avec une lgende
On tape :
aireenbrut(cercle(0,2),2.2)
On obtient :
4*pi scrit au point(2.2)
On tape :
c:=carre(0,2)
aireen(c,2.2)
On obtient :
4 scrit au point(2.2) avec une lgende
On tape :
757
aireenbrut(carre(0,2),2.2)
On obtient :
4 scrit au point(2.2)
On tape :
h:=hexagone(0,1)
aireen(h,1.2)
On obtient :
3*sqrt(3)/2 scrit au point(1.2) avec une lgende
On tape :
aireenbrut(hexagone(0,1),1.2)
On obtient :
3*sqrt(3)/2 scrit au point(1.2)
9.17.10
758
9.17.11
759
cc:=cercle(0,2)
perimetreen(cc,2.2)
On obtient :
4*pi scrit au point(2.2) avec une lgende
On tape :
perimetreenbrut(cercle(0,2),2.2)
On obtient :
4*pi scrit au point(2.2)
On tape :
h:=hexagone(0,1)
perimetreen(h,1.2)
On obtient :
6 scrit au point(1.2) avec une lgende
On tape :
perimetreenbrut(hexagone(0,1),1.2)
On obtient :
6 scrit au point(1.2)
9.17.12
slope pente est soit une commande soit un attribut de la commande droite
pour cela voir 9.10.1
Lorsque slope pente est une commande son argument est une droite ou un
segment ou deux points ou deux nombres complexes.
slope pente renvoie la pente de la droite dfinie par le segment ou par les 2
points ou leurs affixes.
On tape :
pente(droite(1,2i))
Ou on tape :
pente(segment(1,2i))
Ou on tape :
pente(point(1),point(2i))
Ou on tape :
760
On obtient :
-2
On tape :
pente(droite(2y-x=3))
On obtient :
1/2
On tape :
pente(tangente(plotfunc(sin(x)),pi/4))
Ou on tape :
pente(droite_tangente(sin(x),pi/4))
On obtient :
(sqrt(2))/2
9.17.13
761
penteenbrut(droite(1,2i),i)
Ou on tape :
penteenbrut(segment(1,2i),i)
On obtient :
-2 scrit au point(i)
On tape :
d1:=droite(2y-x=3),2*i)
penteen(d1,2*i)
On obtient :
"sd1=1/2 scrit au point(2*i) avec une lgende
On tape :
penteenbrut(droite(2y-x=3),2*i)
On obtient :
1/2 scrit au point(2*i)
On tape :
T:=tangente(plotfunc(sin(x)),pi/4)
slopeat(T,i)
On obtient :
"sT=(sqrt(2))/2" scrit au point(i)
On tape :
penteenbrut(tangente(plotfunc(sin(x)),pi/4),i)
Ou on tape :
penteenbrut(droite_tangente(sin(x),pi/4),i)
On obtient :
(sqrt(2))/2 scrit au point(i)
762
9.17.14
9.17.15
9.17.16
763
abs a comme argument un nombre complexe ou un vecteur dfini par deux points
(cest dire la diffrence de ces deux points).
abs renvoie le module du nombre complexe, ou la longueur du vecteur donn en
argument.
On tape :
abs(1+i)
Ou on tape :
abs(point(1+2*i)-point(i))
On obtient :
sqrt(2)
9.17.17
arg a comme argument un nombre complexe ou un vecteur dfini par deux points
(cest dire la diffrence de ces deux points).
arg renvoie largument du nombre complexe ou langle polaire du vecteur donn
en argument.
On tape :
arg(1+i)
On obtient :
pi/4
9.17.18
normalize divise le nombre complexe par son module pour avoir un nombre
complexe de module 1.
On tape :
normalize(3+4*i)
On obtient :
(3+4*i)/5
9.18
Les transformations
9.18.1
Gnralits
764
argument (les premiers arguments sont les paramtres servant dfinir la transformation et lobjet gomtrique transformer est mis comme dernier paramtre).
Lobjet gomtrique transformer peut tre de tout type comme point, droite,
cercle, polygone, courbe paramtre, graphe de fonctions etc... Par exemple si P
est lobjet gomtrique transformer on peut avoir :
P:=point(1+i) ou P:=droite(x=1) ou P:=plan(z=0) ou P:=cercle(point(1,1),1)
ou P:=plotfunc(x2-2) etc...
9.18.2
La translation : translation
9.18.3
765
766
9.18.4
La rotation : rotation
9.18.5
767
h(1+i)
On obtient :
Le point 2+i trac avec une croix (x) noire
Lorsque homothetie a trois arguments, homothetie dessine et renvoie le
transform du troisime argument dans lhomothtie de centre le premier argument et de rapport le deuxime argument.
On tape :
homothetie(i,2,1+i)
On obtient :
Le point 2+i trac avec une croix (x) noire
On tape :
homothetie(i,2,cercle(1+i,1))
On obtient :
Le cercle de centre 2+i et de rayon 2
Remarque
Lorsque la valeur du rapport de lhomothtie est un nombre complexe k non rel
homothetie(A,k) est la similitude de centre le point A, de rapport abs(k) et
dangle arg(k).
9.18.6
768
9.18.7
Linversion : inversion
769
inver(cercle(1+i,1/2))
On obtient :
Le cercle de centre 8/3+i et de rayon 4/3, il passe
par le point 4+i
Lorsque inversion a trois arguments, inversion dessine et renvoie le transform du troisime argument dans linversion de centre le premier argument et de
rapport le deuxime argument.
Si A1:=inversion(C,k,A) on a CA CA1 = k.
On tape :
inversion(i,2,cercle(1+i,1))
On obtient :
La droite verticale dquation x=1
On tape :
inversion(i,2,cercle(1+i,1/2))
On obtient :
Le cercle de centre 8/3+i et de rayon 4/3 (il passe
par le point 4+i)
9.18.8
770
9.19
Les proprits
9.19.1
9.19.2
771
9.19.3
9.19.4
772
On obtient :
1
On tape :
est_dans(point(2),polygone([1,2-i,3+i]))
On obtient :
1
On tape :
est_dans(point(1-i),triangle([1,2-i,3+i]))
On obtient :
0
9.19.5
9.19.6
773
9.19.7
774
On obtient :
2
On tape :
est_rectangle(1+i,-2+i,-2-i,1-i)
On obtient :
1
On tape :
R:=rectangle(-2-i,1-i,3,C,D);est_rectangle(R[0])
On obtient :
1
En effet R[0] dsigne un rectangle car R est une liste compose du rectangle et de
ses sommets C et D.
9.19.8
775
En effet K[0] dsigne un carr car K est une liste compose dun carr et de ses
sommets C et D.
Si on tape affixe(C,D), on obtient -1-i,1-i.
On tape :
est_carre(i,-1+i,-1-i,1-i)
On obtient :
0
9.19.9
En effet K[0] dsigne un losange car K est une liste compose dun losange et de
ses sommets C et D.
Si on tape normal(coordonnees(C,D)), on obtient [-sqrt(2)-1,-sqrt(2)+1],[-sqrt(2)+1,-sq
On tape :
est_losange(i,-1+i,-1-i,1-i)
On obtient :
0
776
9.19.10
Q:=quadrilatere(1+i,-1+i,-1-i,1-i);est_parallelogramme(Q)
On obtient :
4
Attention
On doit taper :
P:=parallelogramme(-1-i,1-i,i,D);est_parallelogramme(P[0])
Pour obtienir :
1
En effet cest P[0] qui dsigne un paralllogramme car P est une liste compose
dun paralllogramme et de son dernier sommet D.
Si on tape affixe(D)), on obtient -2+i.
9.19.11
777
9.19.12
9.19.13
778
On obtient :
1
On tape :
est_orthogonal(line(2,i), line(0,1+i))
On obtient :
0
On tape :
est_orthogonal(cercle(0,1+i),cercle(2,1+i))
On obtient :
1
On tape :
est_orthogonal(cercle(0,1),cercle(2,1))
On obtient :
0
9.19.14
779
On tape :
est_conjugue(cercle(0,1),droite(1+i,2),
droite((1+i)/2,0))
On obtient :
1
On tape :
est_conjugue(point(1+i),point(3+i),point(i),point(i+3/2))
On obtient :
1
On tape :
est_conjugue(droite(0,1+i),droite(2,3+i),
droite(3,4+i),droite(3/2,5/2+i))
On obtient :
1
9.19.15
780
9.19.16
9.19.17
9.20
9.20.1
781
point_div(point(i),point(2+i),3)
On obtient :
pnt(3+i,0) et le dessine de ce point
Remarque : 0 reprsente la couleur du point.
9.20.2
9.20.3
782
On obtient :
[pnt(0,0),pnt(2,0),pnt(3/2,0), pnt(3,0,"D")] et les 4
points sont dessins
Remarque : 0 reprsente la couleur du point.
On tape :
div_harmonique(droite(i,0),droite(i,1+i),
droite(i,3+2*(i)),D)
On obtient :
[pnt([[i,0],0]),pnt([[i,1+i],0]),
pnt([[i,3+2*i],0]),pnt([[i,-3+2*i],0,"D"])] et les 4
droites sont dessines
9.20.4
9.20.5
783
9.20.6
9.21
9.21.1
lieu permet de tracer le lieu dun point qui dpend dun autre point qui doit tre
dfini avec la fonction element et lieu permet aussi de tracer lenveloppe dune
droite qui dpend dun point qui doit tre dfini avec la fonction element (voir
aussi enveloppe pour lenveloppe dune famille de droites qui dpendent dun
paramtre 9.21.2).
lieu dun point.
lieu a 2 4 arguments.
Les deux premiers argument sont deux noms de variables :
le premier argument est le nom du point dont on veut connaitre le lieu et ce
point est fonction du deuxime argument,
le deuxime argument est le nom du point qui se dplace sur une courbe C
et qui doit tre dfini par element(C).
On peut prciser ventuellement en troisime argument lintervalle o se
trouve le paramtre t utilis pour le paramtrage de C lorsque le deuxime
argument dcrit C et en quatrime argument prciser la valeur de tstep.
Remarque
Pour connaitre le paramtrage de la courbe C on utilise la commande parameq(C).
784
785
la droite dquation x = 0 :
F:=point(1)
H:=element(droite(x=0))
d:=mediatrice(F,H)
lieu(d,H)
On obtient :
La parabole de foyer F et de directrice laxe des
y dont lquation est 2*x-y^2-1=0
enveloppe dune droite donne par une quation dpendant dun paramtre
(voir aussi la commande enveloppe 9.21.2),
Dans ce cas, il faut dire que la paramtre est laffixe dun point de la droite
y = 0.
Par exemple, enveloppe dune famille de droites dquation y + x tan(t)
2 sin(t) = 0 lorsque t R. (cf ??)
On tape :
H:=element(droite(y=0));
D:=droite(y+x*tan(affixe(M))-2*sin(affixe(M)))
lieu(D,H)
On obtient :
Lastroide dquation paramrique
2*cos(t)^3+2*i*sin(t)^3
Si on veut lenveloppe lorsque t = 0.., on tape :
lieu(D,H,t=0..pi)
On obtient :
La partie au dessus de y = 0 de lastroide
dquation paramrique 2*cos(t)^3+2*i*sin(t)^3
On peut aussi chercher lintersection de D et de E (voir leur dfinition cidessous) pour avoir lquation paramtrique du lieu.
D:=y+x*tan(t)-2*sin(t)
E:=diff(D,t)
M:=linsolve([D=0,E=0],[x,y])
P:=plotparam(affixe(M))
On obtient :
Lastroide dquation paramrique
2*cos(t)^3+2*i*sin(t)^3
en effet simplify(M) renvoie :
[2*cos(t)^3,2*sin(t)^3]
9.21.2
786
On obtient :
le dessin dune astrode
On tape :
enveloppe(v+u*tan(t)-3*sin(t),[u,v,t))
On obtient :
le dessin dune astrode
Remarque Si on a une famille de droites d qui dpendent dun paramtre a, on
peut utiliser soit enveloppe(equation(d,a)) soit la commande lieu (voir
9.21.1).
Voici un exemple simple : enveloppe de la tangente un cercle.
On tape :
c:=cercle(0,2):;
assume(a:=1);
A:=element(c,a);
d:=tangente(cercle(0,2),A);
Puis soit :
enveloppe(equation(d),a)
soit :
lieu(d,A)
9.21.3
Chapitre 10
Gnralits
Les graphes ou les dessins de la gomtrie 3-d se font dans un cran graphique
3-d qui souvre automatiquement en rponse dune commande graphique 3-d.
Les dessins de la gomtrie 3-d se font en gnral dans un cran de gomtrie
3-d qui est un cran graphique muni dun diteur de commandes et dune barre de
menus at que lon ouvre avec Alt+h.
Si on clique dans la fentre graphique avec la souris, en dehors du paralllpipde
servant la reprsentation, 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 laxe de vision (axe passant par lobservateur et de vecteur directeur la direction de la vise de lobjet) et le plan de vision (plan perpendiculaire laxe de
vision dont lquation est inscrite en haut de lcran). Le plan de vision est matrialis par son intersection avec le paralllpipde servant la reprsentation, ces
droites dintersection sont dessine en pointill.
On peut aussi translater le plan de vision, le long de laxe de vision grce la molette de la souris : les plans successifs sont obtenus par une translation de vecteur
parallle laxe de vision.
On peut se servir dattributs pour faire une reprsentation graphique 3-d comme la
couleur, lpaisseur, les lignes en pointill pour cela voir 9.3. Mais, les points ont
toujours la forme dun carr et il faut mettre une epaisseur dau moins 3 si on veut
le voir (point_width=3).
On peut faire des dessins en perspective ou en repre orthonorm (en cochant
Proj_ortho dans la configuration graphique (bouton cfg)), les surfaces sont
transparentes ou non et peuvent tre claires par 8 spots que lon peut placer en
diffrents endroits reprs par leur coordonnes homognes (on configure ses spots
avec les boutons l0,l1..l7 situs dans la configuration graphique).
Ces dessins sont interactifs : on peut faire bouger, avec la souris, les points situs
dans le plan de vision, et aussi dplacer ces points, avec la molette de la souris, sur
une parallle laxe de vision .
noter que lon peut aussi faire un zoom-in ou un zoom-out laide des boutons in et out (voir 3.4).
Si dans la configuration du graphique, on coche hidden3d, la surface sera
trace sans dessiner les lignes qui sont caches et si on veut voir les lignes caches
on dcoche hiden3d (voir aussi 1.6.2).
787
788
10.2
Les angles dEuler sont utiliss pour modifier le repre de visualisation. Rappel Soient deux repres : lancien (Oxyz) et le nouveau (OXY Z).
Soit Ou lintersection du plan (OY, OZ) avec le plan (Ox, Oz) que lon oriente
arbitrairement.
Soient :
Ra la rotation daxe Oy et dangle a = (Oz, Ou) qui transforme Ox en Ov
et Oz en Ou,
Rb la rotation daxe Ou et dangle b = (Ov, OX) qui transforme Ov en
OX et Oy en Ow,
Rc la rotation daxe OX et dangle c = (Ou, OZ) qui transforme Ow en
OY et Ou en OZ.
On dfinit compltement la mise en place de (OXY Z) par rapport (Oxyz) en
donnant les angles a,b,c de (OXY Z) par rapport (Oxyz) et en effectuant la
composition de ces trois rotations : Rc@Rb@Ra.
Les angles dEuler sont :
a = (Oz, Ou),
b = (Ov, OX),
c = (Ou, OZ).
Les dessins de la gomtrie 3-d se font en choissisant comme repre Oxyz,
Ox horizontal dirig vers la droite, Oy vertical dirig vers le haut et laxe des z qui
pointe vers vous.
Les mesures en degr de a, b, c sont mises dans ry, rz, rx.
Selon lorientation 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 mme repre OXY Z,
Lorsque b est un angle droit, cest dire que laxe OX et laxe Oy ont le mme
support on na pas non plus unicit :
a, 90, c et a + c, 90, 0 mettent en place le mme repre OXY Z et
a, 90, c et a c, 90, 0 mettent en place le mme repre OXY Z.
On peut donc choisir, langle 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].
10.3
Les axes
10.3.1
789
Vous pouvez effacer les axes (resp les faire rapparaitre) en cochant (resp dcochant) Montrer les axes avec le bouton cfg de lcran de gomtrie.
Ces commandes nont pas de paramtre. On peut toutefois rajouter une lgende
avec la commande legende
On tape :
vecteur_unitaire_Ox_3d(),legende(point([1,0,0]),"i",vert)
On obtient :
Le vecteur unitaire de laxe des x de cran de
gomtrie 3-d avec i crit en vert
On tape :
vecteur_unitaire_Oy_3d(),legende(point([0,1,0]),"j",vert)
On obtient :
Le vecteur unitaire de laxe des y de cran de
gomtrie 3-d avec j crit en vert
On tape :
vecteur_unitaire_Oz_3d(),legende(point([0,0,1]),"k",vert)
On obtient :
Le vecteur unitaire de laxe des z de cran de
gomtrie 3-d avec k crit en vert
10.3.2
790
10.4
Les points
10.4.1
10.4.2
10.4.3
791
A:=inter_unique(plan(point(0,1,1),point(1,0,1),point(1,1,0)),droite(point(0,0
On tape :
coordonnees(A)
On obtient :
[2/3,2/3,2/3]
On tape :
B:=inter_unique(sphere(point(0,0,0),1),droite(point(0,0,0),point(1,1,1)))
coordonnees(B)
On obtient :
[1/(sqrt(3)),1/(sqrt(3)),1/(sqrt(3))]
On tape :
B1:=inter_unique(sphere(point(0,0,0),1),droite(point(0,0,0),point(1,1,1)),poi
coordonnees(B1)
On obtient :
[1/(sqrt(3)),1/(sqrt(3)),1/(sqrt(3))]
On tape :
B1:=inter_unique(sphere(point(0,0,0),1),droite(point(1,0,0),point(1,1,1)))
coordonnees(B1)
On obtient :
[1,0,0]
On tape :
B1:=inter_unique(sphere(point(0,0,0),1),droite(point(1,0,0),point(1,1,1)),[po
coordonnees(B1)
On obtient :
[1/3,2/3,2/3]
792
10.4.4
LA:=inter(plan(point(0,1,1),point(1,0,1),point(1,1,0)),droite(point(0,
coordonnees(LA)
On obtient :
[[2/3,2/3,2/3]]
On tape :
LB:=inter(sphere(point(0,0,0),1),droite(point(0,0,0),point(1,1,1)))
coordonnees(LB)
On obtient :
[[1/(sqrt(3)),1/(sqrt(3)),1/(sqrt(3))],[-(1/(sqrt(3))),-(1/(sqrt(3))),
On tape :
coordonnees(LB[0])
On obtient :
[1/(sqrt(3)),1/(sqrt(3))]
On tape :
coordonnees(LB[1])
On obtient :
[-(1/(sqrt(3))),-(1/(sqrt(3))),-(1/(sqrt(3)))]
On tape :
C:=inter(sphere(point(0,0,0),1),droite(point(0,0,0),point(1,1,1)),poin
coordonnees(C)
On obtient :
[1/(sqrt(3)),1/(sqrt(3)),1/(sqrt(3))]
On tape :
LB:=inter(sphere(point(0,0,0),1),plan(point(0,0,0),point(1,0,0),point(
On obtient :
un cercle
10.4.5
793
10.4.6
10.4.7
lorsque
j 6= 0.
j
P j
Si j = 0, barycentre ou barycenter renvoie une erreur.
On tape :
barycentre([point(1,4,0),1],[point(1,-2,0),1])
Ou on tape :
barycentre([[point(1,4,0),1],[point(1,-2,0),1]])
On obtient :
Le point (1,1,0) est trac
794
10.5
Les lignes
10.5.1
10.5.2
795
10.5.3
10.5.4
796
10.5.5
10.5.6
797
parallele(point(1,1,1),droite(point(0,0,0),point(0,0,1)))
On obtient :
La droite dquation x=1,y=1 est trace
On tape :
parallele(droite(point(1,0,0),point(0,1,0)),droite(point(0,0,0),point(0,0,1))
On obtient :
Le plan dquation x+y-1=0 est trac
On tape :
parallele(point(0,0,0),plan(point(1,0,0),point(0,1,0),point(0,0,1)))
On obtient :
Le plan dquation x+y+z=0 est trac
On tape :
parallele(point(1,1,1),droite(point(0,0,0),point(0,0,1)),droite(point(1,0,0),
On obtient :
Le plan dquation x+y=2 est trace
798
10.5.7
perpendiculaire(droite([0,0,0],[1,1,0]),plan(point(1,0,0),point(0,1,0)
On obtient :
Le plan dquation x=y
10.5.8
10.5.9
799
10.6
Les plans
10.6.1
plan a comme argument soit trois points, soit un point et une droite, soit son quation cartsienne.
plan(A,B,C) ou plan(A,droite(B,C)) (resp plan(a*x+b*y+c*z+d=0))
trace le plan ABC (resp le plan dquation a*x+b*y+c*z+d=0) dans lespace 3d.
On tape :
plan([0,0,5],[0,5,0],[5,0,0])
Ou on tape :
plan(x+y+z=5)
800
Ou on tape :
plan([0,0,5],droite([0,5,0],[5,0,0]))
On obtient :
Le plan dquation x+y+z=5
10.6.2
10.6.3
Voir aussi : 9.10.8 pour la gomtrie plane et 3.10.5 pour les tangentes un
graphe.
tangent a comme argument un objet gomtrique G et un point A de G.
tangent dessine le plan tangent G passant par A.
Lorsque G est un graphe, A peut tre soit un point de G, soit la liste des coordonnes
du projet sur x0y du point de contact.
On tape :
S:=sphere([0,0,0],3)
Puis on tape :
tangent(S,[2,2,1])
On obtient :
Le plan tangent la surface sphre S au point [2,2,1]
On tape :
G:=plotfunc(x^2+y^2,[x,y])
Puis on tape :
tangent(G,[2,2])
Ou on tape car [2,2] est le projet du point [2,2,8] qui se trouve sur le graphe
z = x2 + y 2 (8 = 22 + 22 ) :
tangent(G,point([2,2,8]))
On obtient :
Le plan tangent la surface z = x2 + y 2 au point [2,2,8]
10.6.4
801
10.6.5
On utilise la commande perpendiculaire pour avoir un plan perpendiculaire un plan ou pour avoir une droite perpendiculaire une droite (cf 10.5.7)
10.7
10.7.1
10.7.2
802
Puis on tape :
triangle_isocele(A,B,P)
Dans le plan ABP, le triangle isocle de sommets AB,
dangle (AB, AC) = (AB, AP )
triangle_isocele(A,B,[P,c]) renvoie et trace dans le plan ABP
orient par P (langle (AB, AP ) est positif) le triangle ABC isocle de sommet
A (AB = AC) et tel que langle (AB, AC) = c radians (ou degrs), sans dfinir
le point C).
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)
Puis on tape :
triangle_isocele(A,B,[P,3*pi/4])
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
Dans le plan ABP, le triangle isocle de sommets AB,
dangle (AB, AC) = 3 pi/4
- si il a quatre arguments, le dernier argument est le nom dune variable qui servira
dfinir le troisime sommet.
On tape :
triangle_isocele(A,B,[P,3*pi/4],C)
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
Dans le plan ABP, le triangle isocle de sommets AB,
dangle (AB, AC) = 3 pi/4
On tape :
simplify(coordonnees(C))
On obtient :
[(-3*sqrt(2)-3)/2,(-3*sqrt(2)-3)/2,(-3*sqrt(2)+6)/2]
10.7.3
803
804
10.7.4
805
On tape :
triangle_equilateral(A,B,Q,D)
On obtient :
Dans le demi-plan ABQ, le triangle quilatral de
sommets A et B
On tape :
simplify(coordonnees(D))
On obtient :
[(3*sqrt(6)+6)/4,(3*sqrt(6)+6)/4,(-3*sqrt(6)+3)/2]
10.8
10.8.1
806
On obtient :
Le carr de sommets A,B dans le demi-plan ABQ
- si il a cinq arguments, les 2 derniers paramtres sont le nom de deux variables qui
serviront dfinir les deux autres sommets. On tape :
carre(A,B,P,C,D)
On obtient :
Le carr de sommets A,B,C,D dans le demi-plan ABQ
On tape :
simplify(coordonnees(C))
On obtient :
[3-3*sqrt(1/2),3-3*sqrt(1/2),3*sqrt(2)+3]
On tape :
simplify(coordonnees(D))
On obtient :
[-3*sqrt(2),-3*sqrt(2),3*sqrt(2)]
10.8.2
807
10.8.3
808
Puis on tape :
rectangle(A,B,P)
On obtient :
Le rectangle de sommets
rectangle(A,B,[P,k]) renvoie et trace dans le plan ABP , le rectangle
ABCD tel que :
AD = |k| AB et (AB, AD) = (k/|k|) /2, mais sans dfinir les points C et
D.
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)
Puis on tape :
rectangle(A,B,[P,1/2])
On obtient :
Le rectangle de sommets
- si il a cinq arguments, les 2 derniers paramtres sont les noms de deux variables
qui serviront dfinir les 2 derniers sommets.
On tape :
rectangle(A,B,P,C,D)
On obtient :
Le rectangle de sommets
On tape :
simplify(coordonnees(C))
On obtient :
[(-sqrt(6)+6)/2,(-sqrt(6)+6)/2,sqrt(6)+3]
On tape :
simplify(coordonnees(D))
On obtient :
[(-(sqrt(6)))/2,(-(sqrt(6)))/2,sqrt(6)]
10.8.4
809
10.8.5
810
10.9
10.9.1
10.9.2
811
A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)
Puis on tape :
isopolygone(A,B,P,5)
On obtient :
Dans le demi-plan ABP, un pentagone de sommets A
et B
n<0
les 3 premiers arguments sont 3 points de lespace : le centre et un sommet
de lisopolygone et le troisime point qui dfinit le plan de lisopolygone et
lorientation du plan.
isopolygone(A,B,P,n) renvoie et trace lisopolygone indirect de centre
A et de sommet B et ayant n cts dans le plan ABP .
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)
Puis on tape :
isopolygone(A,B,P,-5)
On obtient :
Un pentagone de centre A et de sommet B non situ
dans le demi-plan ABP
10.9.3
812
10.9.4
10.10
10.11
10.11.1
813
10.11.2
10.11.3
814
10.12
Les mesures
10.12.1
10.12.2
10.12.3
10.12.4
Les coordonnes dun point, dun vecteur ou dune droite 3d : coordinates coordonnees
815
816
On obtient :
[[-1,1,0],[1,2,3]]
On tape :
d:=droite(x-2*y+3=0,6*x+3*y-5*z+3=0)
coordonnees(d)
On obtient :
[[-1,1,0],[9,6,15]]
Attention
coordonnees peut aussi avoir comme argument une squence ou une liste de
points. coordonnees renvoie alors la squence ou la liste des listes des coordonnes de ces points, par exemple :
coordonnees(point([0,1,2]),point([1,2,4]))
renvoie la squence :
[0,1,2],[1,2,4]
et
coordonnees([point([0,1,2]),point([1,2,4])])
renvoie la matrice :
[[0,1,2],[1,2,4]] mais
coordonnees([1,2,4])
renvoie la matrice :
[[1,0],[2,0],[4,0]]
car [1,2,4] est considr comme la liste de 3 points daffixe 1, 2 et 4.
10.12.5
10.12.6
817
10.12.7
818
10.12.8
10.12.9
819
10.13
Les proprits
10.13.1
10.13.2
820
On obtient :
1
On tape :
est_coplanaire(droite([0,0,0],[1,2,-3]),droite([1,1,-2],[2,1,-3]))
On obtient :
1
On tape :
est_coplanaire(droite([-1,2,0],[1,2,-3]),
droite([1,1,-2],[2,1,-3]))
On obtient :
0
10.13.3
10.13.4
821
822
10.13.5
10.13.6
823
On obtient :
1
On tape :
est_aligne([2,0,0],[0,2,0],[0,1,1])
On obtient :
0
10.13.7
10.13.8
824
10.13.9
10.13.10
825
1
On tape :
est_isocele([1,1,0],[-1,1,0],[-1,0,0])
On obtient :
0
10.13.11
10.13.12
826
10.13.13
K:=losange([0,0,0],[2,0,0],[[0,0,1],pi/4]);est_losange(K)
K est le losange ABCD de sommets [0,0,0],[2,0,0], [sqrt(2)+2,0,sqrt(2)],[sqrt(2),0,sqrt(2)],
il est situ dans le plan [0,0,0],[2,0,0],[0,0,1] et langle BAD vaut pi/4.
On obtient :
1
On tape :
est_losange([2,2,0],[-2,2,0],[-2,-1,0],[2,-1,0])
On obtient :
0
10.13.14
827
K:=parallelogramme([0,0,0],[2,0,0],[1,1,0]);est_parallelogramme(K)
K est le paralllogramme ABCD de sommets [0,0,0],[2,0,0],[3,1,0], [1,1,0]. On
tape :
est_parallelogramme([-1,0,0],[0,1,0],[2,0,0],[0,-1,0])
On obtient :
0
Attention
On doit taper :
K:=parallelogramme([0,0,0],[2,0,0],[1,1,0],D);
est_parallelogramme(K[0])
Pour obtenir :
1
car K est une liste compose dun paralllogramme et du point D.
10.14
Les transformations
10.14.1
Gnralits
828
argument (les premiers arguments sont les paramtres servant dfinir la transformation et lobjet gomtrique transformer est mis comme dernier paramtre).
Lobjet gomtrique transformer peut tre de tout type comme point, droite, plan,
polygone, polydre, cercle (en 3-d un cercle est considr comme une courbe paramtre), courbe paramtre, sphre, surface etc...
Par exemple si P est lobjet gomtrique transformer on peut avoir :
P:=point(1,1,1) ou P:=droite(z=0,x=1) ou P:=plan(z=0) ou P:=sphere(point(1,
ou P:=plotfunc(x2-y2,[x,y]) ou P:=demi_cone([0,0,0],[0,0,1],pi/6)
etc...
10.14.2
La translation : translation
10.14.3
829
830
On obtient :
Le point (3,0,-2) est trac
On tape :
symetrie(droite([1,1,0],[-1,-3,0]),point(-1,2,4))
On obtient :
Le point (3,0,-4) est trac
On tape :
sp:=symetrie(plan([1,1,0],[-1,-3,0],[1,1,1]),point(-1,2,3))
On obtient :
Le point (3,0,4) est trac
10.14.4
La rotation : rotation
Voir aussi : 9.18.4 pour la gomtrie plane et 10.5.2 pour dfinir un axe.
rotation, en gomtrie 3-d, a deux ou trois arguments.
Lorsque rotation a deux arguments ce sont : une droite oriente par lordre de
ses arguments ou par le produit vectoriel des normales orientes des plans qui la dfinissent (laxe de rotation) et un rel (la mesure de langle de rotation). rotation
est alors une fonction qui agit sur un objet gomtrique (point, droite etc...)
On tape :
r:=rotation(droite(point(0,0,0),point(1,1,1)),2*pi/3)
Puis :
r(point(0,0,1))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
Le point (1,0,0) est trac
Lorsque rotation a trois arguments, ce sont : une droite oriente par lordre de
ses arguments ou par le produit vectoriel des normales orientes des plans qui la
dfinissent (laxe de rotation), un rel (la mesure de langle de rotation) et lobjet
gomtrique transformer ; rotation dessine et renvoie alors le transform du
troisime argument dans la rotation daxe le premier argument et dangle de mesure
le deuxime argument.
On tape :
rotation(droite(point(0,0,0),point(1,1,1)),2*pi/3,
point(0,0,1))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
831
10.14.5
832
10.14.6
Voir aussi : 9.18.6 pour la gomtrie plane et 10.5.2 pour dfinir un axe.
similitude, en gomtrie 3-d, a trois ou quatre arguments : une droite oriente
par lordre de ses arguments ou par le produit vectoriel des normales orientes des
plans qui la dfinissent (laxe de rotation), un rel (la valeur du rapport k de la
similitude), un rel (la mesure a de langle de rotation en radians (ou degrs)) et
ventuellement lobjet gomtrique transformer.
Remarque : si le rapport k est ngatif, langle de la similitude est alors de mesure
a radians (ou degrs).
Lorsque similitude a trois arguments, cest une fonction qui agit sur un objet
gomtrique.
On tape :
s:=similitude(droite(point(0,0,0),point(1,1,1)),
2,2*pi/3)
Puis :
s(point(0,0,1))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
Le point (2,0,0) est trac
On tape :
s(sqhere(point(1,0,0),1))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
La sphre de centre (0,2,0) et de rayon 2
Lorsque similitude a quatre arguments, similitude dessine et renvoie le
transform du quatrime argument dans la similitude daxe le premier argument de
rapport le deuxime argument et dangle le troisime argument.
On tape :
similitude(droite(point(0,0,0),point(1,1,1)),
2,2*pi/3,point(0,0,1))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
Le point (2,0,0) est trac
On tape :
similitude(droite(point(0,0,0),point(1,1,1)),
2,2*pi/3,sqhere(point(1,0,0),1))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
La sphre de centre (0,2,0) et de rayon 2
10.14.7
833
Linversion : inversion
834
10.14.8
10.15
Les surfaces
10.15.1
Le cne : cone
835
10.15.2
10.15.3
10.15.4
La sphre : sphere
sphere a comme argument soit deux points (le diamtre de la sphre) soit un
point et un rel (son centre et son rayon).
sphere(A,B) (resp sphere(A,r)) trace la sphre de diamtre AB (resp centre
A et de rayon r) dans lespace 3-d.
On tape :
sphere([-2,0,0],[2,0,0])
836
Puis on tape :
sphere([0,0,0],2)
On obtient :
La sphre de centre lorigine et de rayon 2
10.15.5
10.15.6
10.16
Les solides
10.16.1
Le cube : cube
10.16.2
837
10.16.3
838
10.16.4
prisme a comme argument une liste de points [A,B,C,D...] dun mme plan
et un point A1.
prisme([A,B,C,D,..],A1) dessine un prisme de base le polygone A,B,C,D...
et de artes parallles AA1 (les faces sont des paralllogrammes).
On tape :
prisme([[0,0,0],[5,0,0],[0,5,0],[-5,5,0]],[0,0,5])
On obtient :
un prisme de base un paralllogramme et darrtes
verticales
10.16.5
10.16.6
faces(polyedre([0,0,0],[-2,0,0],[2,0,0],[0,2,0],[0,0,2]))[1]
On obtient :
Le dessin dune face et dans lhistorique on a
[[0,0,0],[-2,0,0],[2,0,0],[0,0,2]]
10.16.7
839
aretes(polyedre([0,0,0],[-2,0,0],[2,0,0],[0,2,0],[0,0,2]))[1]
On obtient :
le dessin du segment (-2,0,0),(2,0,0) et dans
lhistorique on a pnt(pnt[group[[-2,0,0],[2,0,0]],0])
10.17
10.17.1
: centered_tetrahedron tetraedre_centre
10.17.2
: centered_cube cube_centre
840
On obtient :
Le cube de centre [0,0,0], de sommet [3,3,3] et ayant
laxe det ayant comme sommet D [3,-3,3] et dont les
artes sont parallles aux axes
Remarques
Il existe (cf les exemples ci-dessus) 2 cubes ayant un sommet commun B,
mme centre A, et le mme plan de symtrie ABC.
En effet, si a est le ct du cube, on a AB = a 3. La donne de A et
de B dtermine donc entirement la sphre S inscrite dans le cube. Le plan
ABC coupe S selon un cercle
Cs et le cube selon un rectangle BDEF avec
normal(cube_centre([0,0,0],[3,3,3],[0,1,0])),0
car cest le dernier argument dune liste qui dtermine le mode daffichage :
ici 0 dit que lon affiche des expressions.
On obtient :
pnt(pnt[[[[3,3,3],[-1,-1,5],[-5,1,1],[-1,5,-1]],
[[3,3,3],[-1,5,-1],[1,1,-5],[5,-1,-1]],[[3,3,3],[-1,-1,5],[1,-5,1]
[5,-1,-1]],[[-1,-1,5],[-5,1,1],[-3,-3,-3],[1,-5,1]],[[-1,5,-1],
[-5,1,1],[-3,-3,-3],[1,1,-5]],[[5,-1,-1],[1,-5,1],[-3,-3,-3],
[1,1,-5]]],0]),0
On peut aussi taper
normal(coordonnees(sommets(cube_centre([0,0,0],[3,3,3],[0,1,0]))))
10.17.3
841
octaedre([0,0,0],[0,5,0],[0,0,1])
Ou on tape :
octaedre([0,0,0],[5,0,0],[0,0,1])
On obtient :
Loctadre de centre lorigine et de sommets situs
sur les axes +5 et -5.
10.17.4
10.17.5
842
10.18
10.18.1
Exercice 1
Soit SABCD une pyramide de sommet S dont la base ABCD est un paralllogramme de centre O.
Soient M et N les milieux respectifs de SA et SD.
Montrer que les plans OMN et SBC sont parallles.
Pour faire la figure, on tape :
// dessin exo1
A:=point(2,2,0);
B:=point(-2,2,0);
C:=point(-3,-2,0);
D:=point(1,-2,0);
S:=point(0,0,4);
polyedre(S,A,B,C,D);
M:=milieu(S,A);
N:=milieu(S,D);
O:=milieu(A,C);
P:=plan(O,M,N);
Q:=plan(S,B,C);
est_parallele(P,Q);
Pour faire la dmonstration avec Xcas, on tape :
// demo exo1
A:=point(a,b,c);
B:=point(d,e,f);
D:=point(u,v,w);
C:=B+(D-A);
//S:=isobarycentre(A,B,C,D)+t*cross(B-A,D-A);
S:=point(k,l,m);
M:=milieu(S,A);
N:=milieu(S,D);
O:=milieu(A,C);
P:=plan(O,M,N);
Q:=plan(S,B,C);
est_parallele(P,Q);
On obtient : 1
ce qui veut dire que les plans P et Q sont parallles.
La dmonstration gomtrique :
Soit R le milieu de AB.
On a :
M est le milieu de SA et N est le milieu de SD, donc MN est parallle AD et
2*MN=AD
M est le milieu de SA et R est le milieu de AB, donc MR est parallle SB et
2*MR=SB
843
overrightarrowAD = BC
On en dduit que MNOR est un paralllogramme dont le plan est parallle la face
SBC.
10.18.2
Exercice 2
Soit SABCD une pyramide de sommet S dont la base ABCD est un carr de
centre O et tel que SO est perpendiculaire au plan ABCD.
Le plan passant par C et perpendiculaire SA coupe SA, SB, SC respectivement en
M, N et P.
Montrer que NP est parallle BD.
Pour faire la figure, on tape :
//dessin exo2
A:=point(2,2,0);
B:=point(-2,2,0);
C:=point(-2,-2,0);
D:=point(2,-2,0);
S:=point(0,0,4);
polyedre(S,A,B,C,D);
Q:=perpendiculaire(C,droite(S,A));
M:=head(inter(Q,droite(S,A)));
N:=head(inter(Q,droite(S,B)));
P:=head(inter(Q,droite(S,D)));
d1:=droite(N,P);
d2:=droite(B,D);
est_parallele(d1,d2)
Pour faire la dmonstration avec Xcas, on peut taper en supposant que le plan du
carr est le plan Oxy :
// demo exo2
A:=point(a,b,0);
B:=point(c,f,0);
d:=affixe(rotation(a+i*b,pi/2,point(c+i*f)));
d1:=re(d);
d2:=im(d);
D:=point(d1,d2,0);
C:=normal(B+(D-A));
S:=point((c+d1)/2,(d+d2)/2,g);
Q:=perpendiculaire(C,droite(S,A));
M:=head(inter(Q,droite(S,A)));
844
N:=normal(head(inter(Q,droite(S,B))));
P:=normal(head(inter(Q,droite(S,D))));
est_parallele(droite(D,B),droite(N,P));
On obtient :
1
mais on peut simplifier les calculs, car on peut choisir les axes pour avoir A sur Ox,
on tape alors :
// demo exo2
A:=point(a,0,0);
B:=point(0,a,0);
C:=point(-a,0,0);
D:=point(0,-a,0);
S:=point(0,0,b);
Q:=perpendiculaire(C,droite(S,A));
M:=head(inter(Q,droite(S,A)));
N:=normal(head(inter(Q,droite(S,B))));
P:=normal(head(inter(Q,droite(S,D))));
est_parallele(droite(D,B),droite(N,P));
On obtient :
1
La dmonstration gomtrique :
Les triangles 0AS, 0BS et 0DS rectangles en 0 sont gaux puisque 0A=OB=0D
en tant que demi diagonale dun carr.
Donc les artes SA SB et SD sont gales ainsi que les triangles isocles SAB et SAD
(la pyramide est donc rgulire).
Les triangles MSN et MSP rectangles en M sont gaux (mme ct MS et leurs angles
S sont gaux), donc SN=SP.
Puisque SB=SD, on a donc :
SN
SP
=
SB
SD
ce qui montre daprs le thorme de Thals que NP est parallle BD.
10.18.3
Soit SABCD une pyramide de sommet S dont la base ABCD est un losange de
centre O et tel que SO est perpendiculaire au plan ABCD.
Le plan passant par C et perpendiculaire SA coupe SA, SB, SC respectivement en
M, N et P.
Montrer que NP est parallle BD.
Pour faire la dmonstration avec Xcas, on peut taper en supposant que le plan
du losange est le plan Oxy et que lepoint A est sur Ox, on tape alors puisque les
diagonales dun losange sont perpendiculaires en leur milieu :
// demo exo3
A:=point(a,0,0);
B:=point(0,b,0);
C:=point(-a,0,0);
845
D:=point(0,-b,0);
S:=point(0,0,c);
Q:=perpendiculaire(C,droite(S,A));
M:=head(inter(Q,droite(S,A)));
N:=normal(head(inter(Q,droite(S,B))));
P:=normal(head(inter(Q,droite(S,D))));
est_parallele(droite(D,B),droite(N,P));
On obtient :
1
La dmonstration gomtrique :
Les triangles 0BS et 0DS rectangles en 0 sont gaux puisque OB=0D en tant que
demi diagonale dun losange.
Donc les artes SB et SD sont gales ainsi les triangles SAB et SAD ont 3 cots
gaux ; ils sont donc gaux.
Les triangles MSN et MSP rectangles en M sont gaux (mme ct MS et leurs angles
S sont gaux), donc SN=SP.
Puisque SB=SD, on a donc :
SN
SP
=
SB
SD
ce qui montre daprs le thorme de Thals que NP est parallle BD.
846
Chapitre 11
11.2
#ifndef NO_NAMESPACE_GIAC
} // namespace giac
#endif // ndef NO_NAMESPACE_GIAC
849