La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 Programmation sous Matlab Invite, fichiers *.m, répertoire, aide Fenêtre de commande : >> invitation à entrer des : - commandes, cad des instructions.

Présentations similaires


Présentation au sujet: "1 Programmation sous Matlab Invite, fichiers *.m, répertoire, aide Fenêtre de commande : >> invitation à entrer des : - commandes, cad des instructions."— Transcription de la présentation:

1 1 Programmation sous Matlab Invite, fichiers *.m, répertoire, aide Fenêtre de commande : >> invitation à entrer des : - commandes, cad des instructions - noms de fonctions avec leurs arguments dentrée et de sortie - noms de programmes Les fonctions (y=f(x))et les programmes (suite de commandes) sont des fichiers avec une extension ***.m. Ne pas utiliser des caractères exotiques: accents, tirets, chiffres en première position,... Créer ou éditer un fichier => cliquer File/New/M-file ou File/Open dans le coin supérieur gauche du menu principal, trouver/selectionner/charger le fichier en double-cliquant sur son nom et/ou commencer à léditer dans la fenêtre Editor. Si le chemin du fichier à executer nest pas dans le Current Directory ni listé dans le MATLAB search path, le fichier ne sera pas reconnu par Matlab. Dans ce cas changer de répertoire courant en cliquant sur la petite icône :

2 2 Programmation sous Matlab Espace de travail, création de matrices, « ; » -Matlab mémorise toutes les variables utilisées lors dune session à moins que la commande clear ait été utilisée. - Matlab manipule entre autres variables des matrices. Par exemple pour entrer : Taper les commandes suivantes et entrer: % les point-virgules entre les crochets mettent en colonne % le point virgule en fin de commande, annule laffichage

3 3 Programmation sous Matlab Input, format daffichage - La commande input permet dentrer des données via le clavier. exemple: Laffichage ne présente pas la valeur stockée en mémoire. Utiliser la commande format pour augmenter le nombre de décimales affichées ou changer la nature de la représentation: % décimal avec 14 digits % notation scientifique long % codage hexadécimal % retour au format court (format par défaut) - La commande fprintf permet des affichages plus controlés...

4 4 Programmation sous Matlab Plot, décorations >> temp=[25, 12; 20, 9; 22, 10; 16, 9; 14, 5]; >> plot(temp) >> title('the highest/lowest temperature of these days') >> ylabel('degrees[°C]'), xlabel('day') >> days=[11, 12, 14, 16, 17]; >> plot(days, temp) >> plot(days,temp(:, 1), 'b*', days, temp(:, 2), 'ro') % décorations,...

5 5 Programmation sous Matlab Fonctions à 1 entrée et 1sortie fonction R R : fonction R 2 R 2 : function y = f49(x) y(1) = x(1)*x(1) + 4*x(2)*x(2) - 5; y(2) = 2*x(1)*x(1) - 2*x(1) - 3*x(2) - 2.5; y = y(:); end function y = f1(x) y = 1./ (1 + 8 * x.^2); end >> f1(1) % valeur renvoyée pour x=1 ans = >> f1([0, 1]) % valeur renvoyée pour le % vecteur [0, 1] ans = >> f49([2; 3]) % valeur renvoyée pour x=[2; 3] ans = >> f49(1) ??? Attempted to access x(2); index out of bounds because numel(x)=1. Error in ==> f49 at 2 y(1) = x(1)*x(1) + 4*x(2)*x(2) - 5; Fichiers à écrire dans léditeur et à sauver

6 6 Programmation sous Matlab Fonctions à entrées et sorties multiples function y = f49(x1, x2) y(1) = x1*x1 + 4*x2*x2 - 5; y(2) = 2*x1*x1 - 2*x1 - 3*x ; y = y(:); end function [y1, y2] = f49(x1, x2) y1= x1*x1 + 4*x2*x2 - 5; y2 = 2*x1*x1 - 2*x1 - 3*x ; end >> f49(2, 3) % valeur renvoyée pour x1=2 % et x2=3 ans = >> f49(2, 3) % valeur renvoyée pour x1=2 et x2=3 ans = >> [u, v] = f49(2, 3) u = 35 v =

7 >> f49 x2) [x1*x1 + 4*x2*x2 - 5; 2*x1*x1 - 2*x1 - 3*x ]; >> f49(1, 2) ans = >> a = 1; b = 2; c = 3; % passage de paramétres >> parabole a*x.^2 + b*x + c; >> ezplot(parabole, [-5, 5]) Programmation sous Matlab Fonctions « anonymes » fonction R R : >> f1 1./(1 + 8*x.^2); % création de la «poignée de fonction» f1 (EN: handle) >> f1(1/sqrt(8)) ans = fonction R 2 R 2 :

8 8 Programmation sous Matlab Polyval, indexation des matrices - Pour calculer rapidement les valeurs dune fonction polynomiale, on la définit simplement par ses coefficients rangés par ordre décroissant: >> p = [ ]; % fonction polynomiale p(x) = 1x 3 + 0x 2 3x + 2 >> polyval (p, [ ]) ans = Manipulation de matrices: >> A = [1 2 3; 4 5 6], B = [3; -2; 1] >> A = [A; 7 8 9] % [..]=concaténation A = >> B = [B, [1, 0, -1]] % le prime transpose (ligne => colonne) B = >> A(3,3) = 0 A= >> A(2:3, 1:2) % lignes 2 à 3 et colonne 1 à 2 ans = >> A(2, :) % 2 ieme ligne, toutes les colonnes ans = 4 5 6

9 9 Programmation sous Matlab Création de vecteurs, taille >> t = 0 : 0.1 : 2% de zéro à 2 par pas de 0.1 t = [ ] >> t = 0:2% par défaut le pas est +1 t = >> t = 0 : -1 : -6% pas négatif t = [ ] >> D = zeros(4, 1); D(2) = 2; D(4) = 3% prédéfinir un vecteur vertical nul D = >> D(5) ??? Index exceeds matrix dimensions. >> D(0) = 1; ??? Index into matrix is negative or zero. >> D(1.2) ??? Subscript indices must either be real positive integers.. >> length(D) ans = 4 >> [M,N] = size(D) M = 4 N = 1

10 10 Programmation sous Matlab Opérations avec les matrices Marices

11 11 Programmation sous Matlab Génération rapide, transformations >> Z = zeros(2,3) Z= >> E = ones(2, 2) E = >> I = eye(2) % retourne la matrice identité 2X2 I = >> B = fliplr(A) %flip left-right B = >> C = reshape(A, 3, 2) C = >> D = flipud(A) %flip up-down D =

12 12 Programmation sous Matlab Nombres aléatoires - rand(m,n) retourne une matrice mXn de nombres aléatoires uniformément distribués. - randn(m,n) retourne une matrice mXn de nombres aléatoires normalement distribués. >> u_noise = rand(1000, 1) >> subplot(221), hist(u_noise, 20) >> u_noise1 = 2*u_noise-1 >> subplot(222), hist(u_noise1, 20) >> n_noise = randn(1000, 1) >> subplot(223), hist(n_noise, 20) >> n_noise1 = n_noise/2+1 >> subplot(224), hist(n_noise1, 20)

13 13 Programmation sous Matlab If, floor, switch, while, for % exemple 1 t= input(t = ') if t > 0 sgnt = 1; else sgnt = -1; end % exemple 2 point = input('point= ') % note sur 100 switch floor(point/10) % floor(x): arrondi à lentier < ou = à x case 9, grade = A case 8, grade = B case 7, grade = C case 6, grade = D otherwise grade = F end % exemple 4 point = [76, 85, 91, -1, 65, 87]; for n = 1:length(point) if point(n) >= 80, pf(n, :) = 'pass'; elseif point(n) >= 0, pf(n, :) = 'fail'; else % point(n)< 0 pf(n, :) = '????'; display('Quelque chose ne va pas...') end pf Quelque chose ne va pas... pf = fail pass ???? fail pass x = x = x = % exemple 3 continuer=true; while continuer x=rand pause(0.2) if x>0.8, continuer=false; end end

14 14 Matlab utilise 2 types de fichiers de données. Le premier est en format binaire (***.mat), peut contenir plusieurs variables, ne peut pas être utilisé par dautres programmes. Le second est en format ASCII (***.dat), ne peut contenir quune variable mais peut être lu par dautres programmes. >> save mesdata A B C % sauve les variables A, B et C dans le fichier mesdata.mat Utiliser la commande load mesdata pour recharger les variables A, B et C. >> save fileB B –ascii % sauve les valeurs de B dans le fichier fileB.dat Programmation sous Matlab Fichiers *.mat et *.dat, load, save Nom de fichier Nom de la variable format Nom de fichier Nom des variables

15 Le développement de Taylor au 1 ier ordre sans reste, constitue lalgorithme dEuler pour intégrer une fonction connue g(x). Soit g(t)=sinc(t) la fonction à intégrer et G(t) son intégrale supposée inconnue. a) Montrer quon a lapproximation G(t+h) = G(t) + h*sinc(t). c) Représenter sinc(t) (fonction native dans Matlab) sur le domaine discret t [-1, 1] avec 100 points (length(t) = 100) et en utilisant la fonction linspace. d) On donne la condition initiale: G(t=-1) = 0. Déduire de a) et b), un algorithme pour calculer G(t) sur [-1, 1]. Réaliser lalgorithme dans un programme. Représenter G(t) sur le même graphe que c). Si vous avez des difficultés, permutez les lignes de code suivantes dans le bon ordre et ajouter une boucle for..end: b) Donner lexpression de G n = G(t+n*h) en fonction de G n-1 = G(t+(n-1)h) sous une forme similaire à celle donnée en a). Programmation sous Matlab Exercice: quadrature de la fonction sinc h = t(2)-t(1); plot(t, G, 'r') t = linspace(-1, 1, N); plot(t, sinc(t), '.') G(1) = 0; G(i) = G(i-1) + h*sinc(t(i-1)); hold on N=100;

16 Programmation sous Matlab Exercice: dérivée numérique Ecrire une fonction df = derive(f, x) qui calcule la dérivée numérique df de la fonction f sur le domaine x. La dérivée sera estimée en utilisant une différence finie centrée. Lincrément sera x = max(x)/1000. En effet, si x est fixé à une faible valeur arbitraire, par exemple et que les valeurs de x sont grandes, disons de lordre de 10 10, on a f(x) = f(x ) car lordinateur ne distingue pas 2 nombres de lordre de grandeur de x et ne différant que dune quantité inférieure à une certaine valeur appelée « epsillon ». Cela rend impossible le calcul de la différence finie. La définition choisie pour x donnerait : x = 10 7 >> epsillon. Effectuer un test du genre: >> x = -10 : 0.01 : 10; >> >> plot(x, f(x), x, derive(f, x)) >> grid on

17 17 Programmation sous Matlab Exercice: NaN, sum, prod Représenter la fonction sinc - Exécuter ce programme: x = [-100:100]*pi/25; y = sin(x)./x; plot(x, y) axis([-15,15, -0.4, 1.2]) - Quelle différence avec celui-ci: x = [-4*pi : 0.1 : +4*pi]; y = sin(x)./x; plot(x, y) axis([-15, 15, -0.4, 1.2]) Indice: essayer : >> sin(0)/0 Opérations sur les vecteurs - Donner lexpression mathématique dont le calcul pourrait être réalisé avec les commandes : >> n=0:100; >> S=sum(2.^-n) - Ecrire les commandes Matlab réalisant le calcul : - Ecrire une fonction utilisant prod() et sum() pour calculer le produit des sommes de chaque ligne dune matrice 3X3 à valeurs aléatoires.

18 Programmation sous Matlab Exercice: Taylor On veut faire une expérience numérique en comparant la fonction sinus avec son approximation de Taylor à lordre 11. a)Générer le vecteur x de longueur 100 sétendant de 0 à 2. b)Générer le vecteur y égal à la série de Taylor sans reste de sin(0 +x) = sin(0) + x/1! (cos(0)) + x 2 /2! (-sin(0)) + … +... = y(x) jusquà lordre 11 (on utilisera la commande factorial). a)Représenter y et sin(x) sur le même graphique qui sera décoré.

19 19 Programmation sous Matlab Exercice: while, input, save, load, axis - En utilisant léditeur Matlab, écrire un programme qui permette à lutilisateur dentrer des données par paires « hauteur/poids » pour autant de personnes que nécessaire jusquà ce quil appuie sur la touche Entrée. Le programme sauvera lensemble des données sous la forme dune matrice mX2 dans un fichier ***.dat et dont le nom sera saisi par lutilisateur. Si vous navez aucune idée pour réaliser ce programme, vous pouvez permuter les lignes de code ci-dessous dans le bon ordre. Exécuter le programme et entrer les données ci-dessous (nom de fichier à utiliser hp.dat): Hauteur: Poids: % Entrée de données, sauvegarde clear k = 0; continuer = 1; while continuer end k = k + 1; X(1,k) = h; h = input('Entrer la hauteur ') x(2,k) = input('Entrer le poids ') if isempty(h), continuer = 0; break, end filename = input(Entrer le nom de fichier (.dat):', 's'); filename = [filename, '.dat']; save(filename, 'x', '/ascii') -Ecrire un programme qui charge les données du fichier hp.dat et les représente avec le symbôle +. Les axes couvriront le domaine [1.50, 2.00] et [60, 85] (utiliser la commande axis).


Télécharger ppt "1 Programmation sous Matlab Invite, fichiers *.m, répertoire, aide Fenêtre de commande : >> invitation à entrer des : - commandes, cad des instructions."

Présentations similaires


Annonces Google