Anda di halaman 1dari 19

ProgrammationsousMatlab

Invite,fichiers*.m,rpertoire,aide

>>

Fentredecommande:
invitationentrerdes:
commandes,cad desinstructions
nomsdefonctionsavecleursargumentsdentreetdesortie
d f
i
l
d

d
i
nomsdeprogrammes
LLesfonctions(y=f(x))etlesprogrammes(suitedecommandes)sontdesfichiersavec
f ti
( f( )) t l
( it d
d )
t d fi hi
uneextension***.m.Nepasutiliserdescaractresexotiques:accents,tirets,chiffres
enpremireposition,...
Crerouditerunfichier =>cliquerFile/New/Mfile ouFile/Open danslecoin
suprieurgauchedumenuprincipal,trouver/selectionner/chargerlefichieren
doublecliquant
double
cliquantsursonnomet/oucommencerl
sur son nom et/ou commencer lditer
diterdanslafentreEditor.
dans la fentre Editor
Silechemindufichierexecuter nestpasdansleCurrent Directory nilistdansle
MATLAB search path,lefichierneserapasreconnuparMatlab.Danscecaschanger
MATLABsearch
path, le fichier ne sera pas reconnu par Matlab. Dans ce cas changer
derpertoirecourantencliquantsurlapetiteicne:

ProgrammationsousMatlab

Espacedetravail,crationdematrices, ;

Matlabmmorisetouteslesvariablesutiliseslorsdunesessionmoinsquela
commandeclear aittutilise.
Matlabmanipuleentreautresvariablesdesmatrices.Parexemplepourentrer:

Taperlescommandessuivantesetentrer:

%lespointvirgules
%
les pointvirgules entrelescrochetsmettentencolonne
entre les crochets mettent en colonne
%lepointvirguleenfindecommande,annulelaffichage

ProgrammationsousMatlab

Input,formatdaffichage

Lacommandeinput
p p
permetdentrerdesdonnesvialeclavier.
exemple:
Laffichageneprsentepaslavaleur stockeenmmoire.Utiliserlacommandeformat
pouraugmenterlenombrededcimalesaffichesouchangerlanaturedela
reprsentation:
%dcimalavec14digits

%notationscientifiquelong

%codagehexadcimal

%retourauformatcourt(formatpardfaut)
Lacommandefprintf permetdesaffichagespluscontrols...
3

ProgrammationsousMatlab

Plot,dcorations

>>temp=[25,12;20,9;22,10;16,9;14,5];
>>
temp=[25 12; 20 9; 22 10; 16 9; 14 5];
>>plot(temp)
>>title('thehighest/lowesttemperatureofthesedays')
>> ylabel('degrees[C]')
>>ylabel(
degrees[ C] ),xlabel(
xlabel('day')
day )

>>days=[11,12,14,16,17];
y [ , , , , ];
>>plot(days,temp)

>>plot(days,temp(:,1),'b*',days,temp(:,2),'ro')

%dcorations,...

ProgrammationsousMatlab
fonctionR R:

functiony=f1(x)
y=1./(1+8*x.^2);
end

Fonctions1entreet1sortie
>>f1(1)%valeurrenvoyepourx=1
f ( )
l

ans=0.1111
>>f1([0,1])%valeurrenvoyepourle
%vecteur[0,1]
[ ]
ans=10.1111

Fichierscriredans
lditeuretsauver

fonctionR2 R2 :

functiony=f49(x)
y
( )
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

>>f49([2;3])%valeurrenvoyepourx=[2;3]
ans=
35.0000
7.5000
>>f49(1)
???Attemptedtoaccessx(2);indexoutofbounds
becausenumel(x)=1.
Errorin==>f49at2
y(1)=x(1)*x(1)+4*x(2)*x(2)
( ) ( )* ( ) * ( )* ( ) 5;
5

ProgrammationsousMatlab

functiony=f49(x1,x2)
y(1)=x1*x1+4*x2*x2 5;
y(2)=2*x1*x1
( ) * *
2*x1
*
3*x2
*
2.5;
y=y(:);
end

function[y1,y2]=f49(x1,x2)
y1= x1*x1
y1=x1
x1+4
+ 4*x2*x2
x2 x2 5;
y2=2*x1*x1 2*x1 3*x2 2.5;
end

Fonctionsentresetsortiesmultiples

>>f49(2,3)%valeurrenvoyepourx1=2
%etx2=3
ans=
35.0000
7.5000

>>f49(2,3)%valeurrenvoyepourx1=2etx2=3
ans =
ans=
35.0000
>>[u,v]=f49(2,3)
u= 35
v= 7.5000

ProgrammationsousMatlab

Fonctions anonymes

fonctionR R:
>>f1=@(x)1./(1+8*x.^2); %crationdelapoignedefonctionf1(EN:handle)
>>f1(1/sqrt(8))
ans=0.5000
fonctionR2 R2 :
>>f49
f49 =@(x1,x2)[x1
@(x1, x2) [x1*x1
x1+4
4*x2*x2
x2 x2 5;2
5; 2*x1*x1
x1 x1 2
2*x1
x1 3
3*x2
x2 2.5];
>>f49(1,2)
ans=
40
12.0000
8.5000
8 5000

a x2+b x+c

30

>>a=1;b=2;c=3;%passagedeparamtres
>>parabole=@(x)a*x.^2+b*x+c;
>>ezplot(parabole,[5,5])

20
10
0
-5
5

0
x

ProgrammationsousMatlab

Polyval,indexationdesmatrices

Pourcalculerrapidementlesvaleursdunefonctionpolynomiale,onladfinit
simplementparsescoefficientsrangsparordredcroissant:
>>p=[1032];
%fonctionpolynomialep(x)=1x3 +0x2 3x+2
>> polyval (p [ 1 0 1 2 3 4 5])
>>polyval(p,[1012345])
ans=42042054112

Manipulation
Manipulationdematrices:
de matrices:
>>A=[123;456],B=[3;2;1]
>>A=[A;789]
%[..]=concatnation
A=123
456
789
>>B
B =[B,[1,0,
[B, [1, 0, 1]]
1] ] %
%leprimetranspose(ligne
le prime transpose (ligne =>colonne)
colonne)
B=31
20
>>A(2:3,1:2)
%lignes23etcolonne12
11
ans = 4 5
ans=45
78
>>A(3,3)=0
>>A(2,:)
%2ieme ligne,touteslescolonnes
A=123
ans=456
456
5 6
780
8

ProgrammationsousMatlab

Crationdevecteurs,taille

>>t=0:0.1:2
>>
t=0:01:2
t=[0.00.10.2...1.92.0]

% de zro 2 par pas de 0 1


%dezro2parpasde0.1

>>t=0:2
t=012

%pardfautlepasest+1

>>t=0:1:6
t = [0 1 2 3 4 5 6]
t=[0123456]

%pasngatif

>>D=zeros(4,1);D(2)=2;D(4)=3
D=0
2
0
3

%prdfinirunvecteurverticalnul

>>D(5)
???Indexexceedsmatrixdimensions.
>>D(0)=1;
???Indexintomatrixisnegativeorzero.

>>length(D)
>>
length(D)
ans=4
>>[M,N]=size(D)
M=4
N=1

>>D(1.2)
>>
D(1 2)
???Subscriptindicesmusteitherberealpositiveintegers..
9

ProgrammationsousMatlab

Oprationsaveclesmatrices

Marices

10

ProgrammationsousMatlab

Gnrationrapide,transformations

>>Z=zeros(2,3)
Z=000
000
>>E=ones(2,2)
E=11
1 1
11
>>I=eye(2)
I=1 0
I=10
01

%retournelamatriceidentit2X2

>>B
>>
B =fliplr(A)%flipleft
fliplr(A) %flip leftright
right
B=321
254
>>C=reshape(A,3,2)
C=15
43
22

>>D=flipud(A)%flipupdown
D=452
1 2 3
123
11

ProgrammationsousMatlab

Nombresalatoires

rand(m,n)retourneunematricemXndenombresalatoiresuniformment
d(
) t
ti
X d
b
l t i
if

t distribus.
di t ib
randn(m,n)retourneunematricemXndenombresalatoiresnormalement distribus.
>>u_noise=rand(1000,1)
>>
u noise rand(1000 1)
>>subplot(221),hist(u_noise,20)
>>u_noise1=2*u_noise1
>> subplot(222) hist(u noise1 20)
>>subplot(222),hist(u_noise1,20)

>>n_noise
>>
n noise =randn(1000,1)
= randn(1000 1)
>>subplot(223),hist(n_noise,20)
>>n_noise1 =n_noise/2+1
>> subplot(224) hist(n noise1 20)
>>subplot(224),hist(n_noise1,20)

12

ProgrammationsousMatlab
%exemple1
t=input(t=')
ift>0
f
sgnt=1;
else
sgnt=1;
end
d

If,floor,switch,while,for

%exemple2
point=input('point=')%notesur100
switchfloor(point/10)
(p
)
%floor(x):arrondilentier<ou=x
case9,grade=A
case8,grade=B
case7,grade=C
g
case6,grade=D
otherwisegrade=F
end

%exemple4
point=[76,85,91,1,65,87];
forn
for
n =1:length(point)
1:length(point)
ifpoint(n)>=80,pf(n,:)='pass';
elseifpoint(n)>=0,pf(n,:)='fail';
else%point(n)<0
pf(n, :) ='????';
pf(n,:)
???? ;
display('Quelquechosenevapas...')
end
end
pf

%exemple3
%
l 3
continuer=true;
whilecontinuer
x=rand
pause(0.2)
(0 2)
ifx>0.8,continuer=false;end
end

x=0.7140
x=0.5762
x=0.8668
Quelquechosenevapas...
pf=
fail
pass
pass
????
fail
pass
p
13

ProgrammationsousMatlab

Fichiers*.matet*.dat,load,save

Matlabutilise2typesdefichiersdedonnes.
Lepremierestenformatbinaire (***.mat),peutcontenirplusieursvariables,nepeut
pastreutilispardautresprogrammes.
LesecondestenformatASCII (***.dat),nepeutcontenirquunevariablemaispeut
l
trelupardautresprogrammes.
d

Nomde
N
d
fichier

Nomdes
variables

>>savemesdataABC%sauvelesvariablesA,BetCdanslefichier
>>
save mesdata A B C % sauve les variables A B et C dans le fichier mesdata
mesdata.mat
mat
Utiliserlacommandeload mesdatapourrechargerlesvariablesA,BetC.

>>savefileB Bascii%sauvelesvaleursdeBdanslefichierfileB.dat
Nomde
Nom
de
fichier

Nomdela
variable

format
14

ProgrammationsousMatlab

Exercice:quadraturedelafonctionsinc

LLedveloppementdeTaylorau1
d l
t d T l
1ier ordresansreste,constituelalgorithmedEuler
d
t
tit l l ith
dE l
pourintgrerunefonctionconnueg(x).
Soitg(t)=sinc(t)lafonctionintgreretG(t)sonintgrale
supposeinconnue.
a)MontrerquonalapproximationG(t+h)=G(t)+h*sinc(t).
b)Donnerl
b)
Donner lexpression
expressiondeG
de Gn=G(t+n
= G(t+n*h)
h)enfonctiondeG
en fonction de Gn1 =G(t+(n1)h)sousune
= G(t+(n1)h) sous une
formesimilairecelledonneena).
c)Reprsentersinc(t)(fonctionnativedansMatlab)surledomainediscrett
) p
( )(
)
[[1,1]avec
, ]
100points(length(t)=100)etenutilisantlafonctionlinspace.
d)Ondonnelaconditioninitiale:G(t=1)=0.Dduiredea)etb),unalgorithmepour
calculerG(t)sur[1,1].Raliserlalgorithmedansunprogramme.ReprsenterG(t)surle
mmegraphequec).
Sivousavezdesdifficults,permutezleslignesdecodesuivantesdanslebonordreetajouterunebouclefor..end:
h =t(2)t(1);
G(1)=0;
plot(t,G,'r')
G(i)=G(i1)+h*sinc(t(i1));
holdon
t =linspace(1,1,N);
plot(t,sinc(t),'.')
N=100;

ProgrammationsousMatlab

Exercice:drivenumrique

Ecrireunefonctiondf=derive(f,x) quicalculeladrivenumriquedfdelafonction
fsurledomainex.Ladriveseraestimeenutilisantunediffrencefiniecentre.
LLincrment
incrmentserax
sera x =max(x)/1000.Eneffet,sixestfixunefaiblevaleurarbitraire,
max(x)/1000. En effet, si x est fix une faible valeur arbitraire,
parexemple1012 etquelesvaleursdexsontgrandes,disonsdelordrede1010,ona
f(x)=f(x+1012)carlordinateurnedistinguepas2nombresdelordredegrandeurde
xetnediffrantquedunequantitinfrieureunecertainevaleurappele
q
q
pp
epsillon .Celarendimpossiblelecalculdeladiffrencefinie.
Ladfinitionchoisiepourxdonnerait:x=107 >>epsillon.
1.5

Effectueruntestdugenre:
1

>>x=10:0.01:10;
>>f=@sinc;
>>plot(x,f(x),x,derive(f,x))
>>gridon

05
0.5
0
-0.5
-1
-1.5
-10

-8

-6

-4

-2

10

ProgrammationsousMatlab

Reprsenterlafonctionsinc
Excuterceprogramme:
x=[100:100]*pi/25;
y=sin(x)./x;
plot(x,y)
axis([15 15 0 4 1 2])
axis([15,15,0.4,1.2])
Quelle diffrence avecceluici:
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

Exercice:NaN,sum,prod

O i
Oprationssurlesvecteurs
l
Donnerlexpressionmathmatiquedontlecalcul
pourraittreralisaveclescommandes:
p
>>n=0:100;
>>S=sum(2.^n)

EcrirelescommandesMatlabralisantlecalcul:

Ecrireunefonctionutilisantprod() etsum()pour
calculerleproduitdessommesdechaqueligne
dunematrice3X3valeursalatoires.
17

ProgrammationsousMatlab

Exercice:Taylor

Onveutfaireuneexpriencenumriqueencomparantlafonctionsinusavecson
approximationdeTaylorlordre11.
a)) Gnrerlevecteurxdelongueur100stendantde02.
l
d l
d
d
b) GnrerlevecteurygallasriedeTaylordesin(0+x)=sin(0)++...=
y(x)jusqulordre11(onutiliseralacommandefactorial).
c)) Reprsenteryetsin(x)surlemmegraphiquequiseradcor.
R t
t i ( )
l

hi
i
d
1

0.5

-0.5

-1

-1.5

-2

-2.5

ProgrammationsousMatlab

Exercice:while,input,save,load,axis

Enutilisantl
En utilisant lditeur
diteurMatlab,crireunprogrammequipermettel
Matlab crire un programme qui permette lutilisateur
utilisateurd
dentrer
entrerdesdonnes
des donnes
parpaires hauteur/poids pourautantdepersonnesquencessairejusqucequilappuiesurla
toucheEntre.LeprogrammesauveralensembledesdonnessouslaformedunematricemX2
dansunfichier***.dat etdontlenomserasaisiparlutilisateur.Sivousnavezaucuneidepour
raliserceprogramme,vouspouvezpermuterleslignesdecodecidessousdanslebonordre.
Excuterleprogrammeetentrerlesdonnescidessous(nomdefichierutiliserhp.dat):
Hauteur: 1.85
Hauteur:
1 85
Poids:
82

Ecrireunprogrammequichargeles
donnesdufichierhp.dat etles
reprsenteaveclesymble+.Les
axescouvrirontledomaine[1.50,2.00]
et [60 85] (utiliser la commande axis)
et[60,85](utiliserlacommandeaxis).

1.78
1
78
80

1.88
1
88
78

1.68
1
68
65

1.70
1
70
64

%Entrededonnes,sauvegarde
clear
k=0;
continuer=1;
while continuer
end
k=k+1;
x(k,1)=h;
h = input('Entrer
h=input(
Entrerlahauteur
la hauteur '))
x(k,2)=input('Entrerlepoids')
ifisempty(h),continuer=0;end
filename =input(Entrerlenomdefichier(.dat):','s');
filename=[filename,'.dat'];
save(filename,'x','/ascii')
19

Anda mungkin juga menyukai