• Aucun résultat trouvé

Travaux pratiques - Examen du 6 janvier 2020 (3h00)

N/A
N/A
Protected

Academic year: 2022

Partager "Travaux pratiques - Examen du 6 janvier 2020 (3h00)"

Copied!
4
0
0

Texte intégral

(1)

MACS2 TPs Langage C/EDP

Sup’Galilée Année 2019-2020

Travaux pratiques - Examen du 6 janvier 2020 (3h00)

Sans documents, sans calculatrice, sans portable, ...

Le barême est donné à titre indicatif

Voici trois fichiersheader,Vector.h,Matrix.hetSLAC.h, que vous pourrez utiliser lors de cet examen.Toute autre fonction utilisée devra être écrite. On supposera, sauf mention contraire, que les fichiers sources associésVector.c, Matrix.cetSLAC.csont donnés. Les types Vector et Matrix sont imposés et spécifiés respectivement dans les fichiers Vector.het Matrix.h.

Listing 1 – Vector.h (partiel)

1 typedef s t r u c t {

2 unsigned i n t dim ;

3 double ∗v a l ;

4 } Vector;

5

6 // A l l o c V e c t o r : A l l o c a t i o n d ’ un v e c t e u r de d i m e n s i o n N

7 void AllocVector(unsigned i n t N, Vector ∗pU ) ;

8 // FREEVector : D e s a l l o u e p r o p r e m e n t un v e c t e u r

9 void FREEVector(Vector ∗pV ) ;

10 // V e c t o r 2 c s t : met l e s c o m p o s a n t e s d ’ un v e c t e u r a c

11 void Vector2cst(Vector V,double c ) ;

12 // RandVector : V e c t e u r a l e a t o i r e , l o i u n i f o r m e [ a , b ] ( d e j a a l l o u e )

13 void RandVector(Vector U, double a , double b ) ;

14 // A l l o c R a n d V e c t o r : V e c t e u r a l e a t o i r e a v e c a l l o c a t i o n , l o i u n i f o r m e [ a , b ]

15 void AllocRandVector(i n t N, double a , double b ,Vector ∗pW) ;

16 // P r i n t V e c t o r : A f f i c h e un v e c t e u r

17 void PrintVector(Vector U,char ∗VarName ,unsigned i n t n ) ;

18 // S c a l a r P r o d : P r o d u i t s c a l a i r e de 2 v e c t e u r s

19 double ScalarProd(Vector U, Vector W) ;

20 // aUpbV : r e t o u r n e l e v e c t e u r a∗U+b∗V

21 Vector aUpbV(double a ,Vector U, double b , Vector V ) ;

22 // S c a l e V e c t o r : Transforme l e v e c t e u r U en a∗U

23 void ScaleVector(double a ,Vector U ) ;

24 // NormVector : C a l c u l l a norme p d ’ un v e c t e u r

25 double NormVector(Vector U, unsigned i n t p ) ;

26 // NormInfVector : C a l c u l l a norme I n f d ’ un v e c t e u r

27 double NormInfVector(Vector U ) ;

28 // f e v a l V e c t o r : r e t u r n s a V e c t o r V s u c h t h a t V[ i ]= f (U[ i ] )

29 Vector fevalVector(Vector U,double (∗p f ) (double) ) ;

30 // c o p y V e c t o r : Copie i n t e g r a l e d ’ un v e c t e u r a v e c d u p l i c a t i o n du t a b l e a u .

31 Vector copyVector(Vector U ) ;

Listing 2 – Matrix.h (partiel)

1 typedef s t r u c t {

2 unsigned i n t rows ;

3 unsigned i n t c o l s ;

4 double ∗∗v a l ;

5 } Matrix;

6

7 // A l l o c M a t r i x : A l l o c a t i o n c o n t i g u e d ’ une m a t r i c e N l i g n e s e t M c o l o n n e s

8 // a v e c i n i t i a l i s a t i o n a 0 de s e s c o m p o s a n t e s

9 void AllocMatrix(unsigned i n t N, unsigned i n t M, Matrix ∗pA ) ;

10 // FREEMatrix : D e s a l l o u e p r o p r e m e n t une m a t r i c e

11 void FREEMatrix(Matrix ∗pMat ) ;

12 // A l l o c R a n d M a t r i x : M a t r i c e a l e a t o i r e NxM, l o i u n i f o r m e [ a , b ]

13 Matrix AllocRandMatrix(unsigned i n t N, unsigned i n t M, double a , double b ) ;

14 // A l l o c R a n d L o w e r M a t r i x : M a t r i c e t r i . i n f . a l e a t o i r e , l o i u n i f o r m e [ a , b ]

15 Matrix AllocRandLowerMatrix(unsigned i n t N, double a , double b ) ;

16 // A l l o c R a n d L o w e r M a t r i x : M a t r i c e t r i . s u p . a l e a t o i r e , l o i u n i f o r m e [ a , b ]

17 Matrix AllocRandUpperMatrix(unsigned i n t N, double a , double b ) ;

(2)

18 // M a t r i x P r o d : r e t o u r n e l a M a t r i c e A∗B

19 Matrix MatrixProd(Matrix A, Matrix B ) ;

20 // MatrixSum : r e t o u r n e l a M a t r i c e a∗A+b∗B

21 Matrix MatrixSum(double a , Matrix A,double b , Matrix B ) ;

22 // P r i n t M a t r i x : A f f i c h e p a r t i e l l e m e n t une m a t r i c e A

23 void PrintMatrix(Matrix A,char ∗VarName ,unsigned i n t nr ,unsigned i n t nc ) ;

24 // I d e n t i t y M a t r i x : r e t o u r n e l a m a t r i c e i d e n t i t e e

25 Matrix IdentityMatrix(unsigned i n t N ) ;

26 // M a t r i x 2 c s t : Met l a m a t r i c e a c ( d e j a a l l o u e e )

27 void Matrix2cst(Matrix A, double c ) ;

28 // S c a l e M a t r i x : Transforme l a m a t r i c e A en a∗A

29 void ScaleMatrix(double a ,Matrix A ) ;

30 // T r a n s p o s e M a t r i x : R e t o u r n e l a m a t r i c e t r a n s p o s e e

31 Matrix TransposeMatrix(Matrix A ) ;

32 // AllocRandSPDMatrix : R e t o u r n e une m a t r i c e a l e a t o i r e s y m e t r i q u e d e f i n i e p o s i t i v e

33 Matrix AllocRandSPDMatrix(unsigned i n t N, Matrix ∗pB ) ;

34 // A l l o c R a n d T r i U p p e r M a t r i x : R e t o u r n e une m a t r i c e a l e a t o i r e t r i a n g u l a i r e s u p e r i e u r e

35 // s u i v a n t l a l o i u n i f o r m e s u r ( a , b )

36 Matrix AllocRandTriUpperMatrix(unsigned i n t N,double a , double b ) ;

37 // A l l o c R a n d T r i U p p e r M a t r i x : R e t o u r n e une m a t r i c e a l e a t o i r e t r i a n g u l a i r e i n f e r i e u r e

38 // s u i v a n t l a l o i u n i f o r m e s u r ( a , b )

39 Matrix AllocRandTriLowerMatrix(unsigned i n t N,double a , double b ) ;

40 // Norm1Matrix : r e t o u r n e | | A | | _1 ( norme 1 m a t r i c i e l l e )

41 double Norm1Matrix(Matrix A ) ;

42 // NormInfMatrix : r e t o u r n e | | A | | _\ i n f t y ( norme i n f i n i m a t r i c i e l l e )

43 double NormInfMatrix(Matrix A ) ;

44 // f e v a l M a t r i x : r e t o u r n e l a m a t r i c e B t e l qu e B [ i ] [ j ] <´ f (A[ i ] [ j ] )

45 Matrix fevalMatrix(Matrix A,double (∗p f ) (double) ) ;

46 // c o p y M a t r i x : Copie i n t e g r a l e d ’ une m a t r i c e a v e c d u p l i c a t i o n d e s t a b l e a u x .

47 Matrix copyMatrix(Matrix A ) ;

Listing 3 – SLAC.h (partiel)

1 #include " Vector . h "

2 #include " Matrix . h "

3

4 // MatVecProd : P r o d u i t M a t r i c e / V e c t e u r

5 Vector MatVecProd(Matrix A, Vector U ) ;

6 // S o l v e L o w e r : r e s o l u t i o n s y s t e m e t r i . i n f .

7 Vector SolveLower(Matrix L , Vector b ) ;

8 // S o l v e U p p e r : r e s o l u t i o n s y s t e m e t r i . s u p .

9 Vector SolveUpper(Matrix U, Vector b ) ;

10 // S o l v e G a u s s : r e s o l u t i o n s y s t e m e p a r Gauss

11 Vector SolveGauss(Matrix A, Vector b ) ;

12 // LU : f a c t o r i s a t i o n LU de A

13 void LU(Matrix A, Matrix ∗pL , Matrix ∗pU ) ;

14 // R e s o l u t i o n du s y s t e m e Ax=b ou L e t U s o n t l a f a c t . LU de A

15 Vector SolveLU(Matrix L , Matrix U, Vector b ) ;

Exercice 1

(5 points)

On cherche à résoudre par un schéma de type différences finies le problème suivant

´u2pxq `cpxqupxq “ fpxq, @xPsa;br (1)

u1paq ´2upaq “ waPR (2)

u1pbq `2upbq “ wbPR (3)

oùc:ra, bs ÝÑR`, f :ra, bs ÝÑR, wa etwb sont donnés.

Q. 1 Ecrire, en justifiant, un schéma d’ordre 2 associé au problème (1)-(2)-(3).

Q. 2 (C) Ecrire un programme en langage C permettant de résoudre le problème précédent avec des données judicieu- sement choisies (pour avoir une solution exacte).

Q. 3 (C) Ecrire un programme en langage C permettant de retrouver l’ordre de la méthode (sans graphisme).

2

(3)

Exercice 2

(4 points)

Dans cet exercice il vous est demandé d’écrire explicitement certaines fonctions dont les prototypes sont écrits dans les fichiersVector.h, Matrix.houSLAC.h.

Q. 1 (Matrix.h) (a) Ecrire la fonctionAllocMatrixdont le prototype est :

void AllocMatrix(unsigned intN,unsigned int M,Matrix∗pA);

Cette fonction devra allouer de manière contiguë un tableau deNˆM éléments correpondant à une matrice de dimensionN parM. Les éléments de ce tableau devront être mis à zéros.

(b) Rappelerprécisementla formule permettant de calculer le produit de deux matrices (avec ses hypothèses).

(c) Ecrire la fonctionMatrixProd dont le prototype est :

Matrix MatrixProd(MatrixA,MatrixB);

Cette fonction devra retourner, lorsque celà est possible, la matrice produitAB des deux matrices données en entrée.

Q. 2 (SLAC.h) (a) Rappelerprécisementla(es) formule(s) permettant de calculer le vecteur xxx solution du système triangulaire supérieurUxxx“bbb(avec ses hypothèses).

(b) Ecrire la fonctionSolveUpper dont le prototype est :

Vector SolveUpper(MatrixU, Vectorb);

Cette fonction resoud un système linéaire triangulaire supérieur.

(c) Ecrire un programme permettant de tester/valider cette fonction.

Exercice 3

(9 points)

On souhaite résoudre numériquement l’E.D.P. suivante Bu

Btpt, xq ´κB2u

Bx2pt, xq `cpxqBu

Bxpt, xq “fpt, xq, @pt, xq Pst0;t0`Tsˆsa;br, (1)

upt0, xq “u0pxq, @xP ra;bs, (2)

Bu

Bxpt, aq “vaptq, @tP rt0;t0`Ts, (3)

upt, bq “ubptq, @tPst0;t0`Ts. (4)

avecκą0, t0PR, T ą0,pa, bq PR2, aăb, c:ra, bs ÝÑR`.

On notetn, nP v0, Ntw etxi, iP v0, Nxw les discrétisations régulières des intervallesrt0;t0`Tset ra;bs avecNtpas de discrétisation en temps etNx pas de discrétisation en espace. On souhaite résoudre l’E.D.P. à l’aide des schémas numériques

un`1i ´uni

∆t ´κun`1i`1 ´2un`1i `un`1i´1

∆x2 `ci

un`1i`1 ´un`1i´1

2∆x “ fin`1. (5)

un`12 ´4un`11 `3un`10 “ ´2∆xvaptn`1q. (6) Q. 1 (a) Expliquer précisement comment le schéma (5) (ordre 1 en temps et ordre 2 en espace) a été obtenu à

partir de (1)et expliciter les valeursun`1i , fin`1, ci, ∆t et∆x.

(b) Expliquer précisement comment le schéma (6) (ordre2) a été obtenu à partir de (3).

(c) Donner une discrétisation (détaillée) du problème (1)à (4) en utilisant (entre autres) les schémas (5)et (6).

On noteUUUn les vecteurs de dimensionNx`1, de composantesUUUni “uni´1, @iP v1, Nx`1w.

Q. 2 (a) Comment initialiser le vecteurUUU0?

(b) En supposant le vecteurUUUn déjà calculé, montrer que le vecteurUUUn`1 est solution du système linéaire

AUUUn`1“bbbn (7) en explicitant la matriceAet le vecteurbbbn (préciser les dimensions).

3

(4)

Q. 3 (C) Ecrire la fonction AssembleMat1Dretournant la matriceMPMdpRq définie par

M“

¨

˚

˚

˚

˚

˚

˚

˚

˚

˚

˚

˚

˝

ν1 ν2 ν3 0 . . . 0 β1 α1 β1 0 . . . 0 0 . .. . .. . .. . .. ... ... . .. . .. . .. . .. . .. ... ... . .. . .. . .. . .. 0 0 . . . 0 βd´2 αd´2 βd´2 0 . . . 0 µ1 µ2 µ3

˛

(8)

oùαPRd´2, βPRd´2 µPR3 etνPR3 sont donnés.

Q. 4 (C) On se donnea“ ´2, b“2, T “10, fpt, xq “x2cosptq, u0pxq “10, cpxq “2`sinpxq, κ“1, vaptq “sinptq,

ubptq “

$

’&

’%

10`25t, sită“2, 60, sitP r2; 8r, 60´25pt´8q, sitP r8; 10s.

Ecrire un programme complet en langage C permettant de résoudre le problème (1) à (4)en utilisant les schémas (5) et (6).

Exercice 4

(2 points)

Ecrire un programme permettant de remplir un tableau de int à double entrées (acces aux éléments avec [ i ][ j ]) avec des0 et des1.Le programme devra

‚ demander le nombre de lignesnet de colonnes du tableaum,

‚ remplir le tableau,

‚ afficher tableau.

Il vous est demandé d’user de fonctions avec pertinence. Un code sans fonction autre que la fonction main sera moins bien noté.

L’allocation sera dynamique et le(s) tableau(x) de int sera(ont) initialisé(s) à 0(sans utiliser de boucle).

Voici les caractéristiques du tableau rempli :

‚ l’élémentr0srm´1sest égal à1 (en haut à gauche dans l’affichage ci-dessous),

‚ le tableau ne contient que des1 et des0,

‚ les élémentsvoisinssont distincts. Lesvoisins de l’élément [ i ][ j ] sont, quand ils existent, [ i´1][j ] , [ i+1][j ] , [ i ][ j´1] et [ i ][ j+1].

Deux exemples d’affichage sont donnés ci-dessous :

8 lignes et10colonnes 9 lignes et15colonnes 0 1 0 1 0 1 0 1 0 1

1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0

1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

4

Références

Documents relatifs

Les notions d’enthalpie et de capacités thermiques isobares permettent l’analyse et l’utilisation des mesures ainsi réalisées ce qui conduit à la détermination des

On introduit dans une ampoule à décanter 5 mL du solvant extracteur choisi et le mélange [eau + huile essentielle], on agite puis on laisse décanter1. a- Que signifie « laisser

Le choix des 80 entreprises s'effectue sans remise et la variable compte le nombre de succès (entreprises qui exportent). Sa loi est donc hypergéométrique, mais on ne connait pas

Une fois le soluté dissous, ce soluté n’existe plus dans la solution ; ce sont les ions du cristal disloqué qui sont effectivement présents dans la solution?. On peut calculer

Ecrire une fonction qui écrit, avec leur numéro de ligne et de colonne, seulement ceux des éléments d’une matrice de corrélation qui ont une valeur absolue supérieure à 0.6.

Cet exercice porte sur un procédé connu sous le nom de moyennisation

Après extraction des membranes cellulaire à partir d’un tissu biologique, on isole un composé lipidique L. Ce composé traité à la phospholipase D libère un trialcool et un

Zoé achète un sachet de billes contenant des billes rouges et des billes vertes. Ces billes sont petites ou grosses. a) Calcule le nombre de