Sei sulla pagina 1di 70

GRFICOS:2De3D

Funesgrficas2Delementares:
O MATLAB dispe de 4 funes bsicas para criar
grficos 2D. Estas diferenciamse principalmente pelo
tipodeescalaqueutilizamparaoseixos.Estasquatro
funessoasseguintes:
plot()criaumgrficoapartirdevectorese/oucolunas
dematrizes,comescalaslinearesemambososeixos.
loglog()idemcomescalalogartmica.
semilogx() idem com escala linear no eixo das
ordenadaselogartmicanoeixodasabcissas
semilogy() idem com escala linear no eixo das
abcissaselogartmicanoeixodasordenadas.
44

GRFICOS:2De3D______________________________

Existemfunesparaatribuirttulosaogrfico,aoseixos,
desenharumaquadrculaauxiliar,introduzirtexto,etc.
title('ttulo')atribuiumttuloaogrfico
xlabel('tal')atribuiumalegendaaoeixodasabcissas(com
xlabeloffdesaparece)
ylabel('qual')idemparaoeixodasordenadas(comylabel
offdesaparece)
text(x,y,'texto')introduz'texto'nolugarespecificadopelas
coordenadasxey(sexeysovectores,otextorepete
seporcadapardeelementos)
gtext('texto') introduz 'texto' com ajuda do rato: legend()
definelegendasparaasdistintaslinhasoueixosutilizados
nafigura
gridactivaagrelha(comgridoffdesaparece)

45

GRFICOS:2De3D______________________________

plot()afunochavedetodososgrficos2DemMATLAB.
J foi referido que o elemento bsico dos grficos
bidimensionaisovector.Utilizamsetambmsequnciasde
1, 2 ou 3 caracteres para indicar cores e tipos de linha. A
funoplot()nofazmaisdoquedesenharvectores.
Exemplo1:
x=[132453]
x=
132453
plot(x)

46

Figura5.1.Grficodovectorx=[132453].

GRFICOS:2De3D______________________________

FUNOplot
Exemplo2
x=0:pi/90:2*pi;
y=sin(x).*cos(x);
plot(x,y)
gridon
gridoff
xlabel(eixox(emradianos))
ylabel(eixoy)
title(y=sen(x)*cos(x))

47

GRFICOS:2De3D______________________________

FUNOplot
possvel incluir no ttulo ou na legenda dos eixos o
valordeumavarivelnumrica.Jqueoargumentodos
comandostitle,xlabeleylabelumavarivelcaracter,
precisotransformarasvariveisnumricas:
int2str(n) converte o valor da varivel inteira n em
caracter
num2str(x)converteovalordavarivelrealoucomplexa
xemcaracter

48

GRFICOS:2De3D______________________________

Textosobreogrfico
gtext(texto)
text(x,y,textoarepresentar)
Calcularascoordenadasdepontossobreacurva
ginput(n)
[x,y]=ginput(n)
Selecodotraoecordacurva
plot(x,y,opcao)
holdon
holdoff
49

GRFICOS:2De3D______________________________

Opesdeplot
yyellow

.point

solid

mmagenta

ocircle

:dotted

ccyan

xxmark

.dashdot

rred

+plus

dashed

ggreen

*star

bblue

ssquare

wwhite

ddiamond

kblack

vtriangle(down)
^triangle(up)
<triangle(left)
>triangle(right)
ppentagram

50

hhexagram

GRFICOS:2De3D______________________________

Exemplo3:Calculargraficamenteassoluesda
equao 2 xcos 2 x

=0 . 4

teta=0:pi/360:pi/4;
f1=(2*tetacos(2*teta))/2;
f2=0.4*ones(size(f1));
figure
plot(teta,f1,'g',teta,f2,'r')
axissquare
xlabel('Angulo(radianos)')
gtext('2xcos(2x))/2')
text(0.2,0.43,'y=0.4')
[teta0,y0]=ginput(1)
title(['Raizaproximada=',num2str(teta0)])

51

GRFICOS:2De3D______________________________

Selecodaescaladoseixos
axis([x0x1y0y1])
axisauto:escalapordefeito
axis off: desactiva a legendagem dos eixos,
desaparecendodoseixosassuaslegendaseagrid.
axison:activadenovo
axis xy: sistema de coordenadas cartesianas com
origemnocantoinferioresquerdo,eixooxdaesq.para
adta.eoydebaixoparacima.
axis equal: mesmos factores de escala para os dois
eixos
axis square: envolve com um quadrado a regio
delimitadapeloseixosactuais.

52

GRFICOS:2De3D______________________________

Impressodegrficos
printdps
dpsc

deps
depsc

%PostScriptforblackandwhiteprinters
%PostScriptforcolorprinters
%EncapsulatedPostScript
%EncapsulatedColorPostScript

print djpeg<nn>
qualidade

Exemplo:

% imagem JPEG, nn = nvel de

printdjpeg90figura1(nn=75pordefeito)

53

GRFICOS:2De3D______________________________

Exemplo4:plot(vector,Matriz)
x=0:pi/180:2*pi;
y=sin(x);
z=cos(x);
plot(x,y,x,z)
A=[y'z']
plot(x,A)
A funo eval utilizase para funes definidas por um caracter.
y=eval(caracter)
Exemplo5:

54

f=sin(x)2*cos(x);
x=0:pi/90:2*pi;
y=eval(f);
plot(x,y)
axis([0602.4]);gtext(sen(x)2cos(x))

GRFICOS:2De3D______________________________

A funo fplot utilizase com funes definidas com um


caracter:fplot=(f,[02*piyminymax])
Exemplo6:
f=sin(x)2*cos(x);
fplot(f,[02*pi],g)
Estafunopodeutilizarsetambmnaforma:
[x,y]=fplot(f,[02*piyminymax])
e neste caso so devolvidos os vectores x e y, mas no
desenhadonada.
Parachamarumanovafigurausamosocomandofigureou
figure(n)paranosreferirmosumafigurajfeita.

55

Apagarafiguraactualclf
closeallapagatodasasfigurasclose(figure(n))an

GRFICOS:2De3D______________________________

FUNOsubplot
Uma janela grfica pode ser dividida em m parties
horizontais e n verticais, com o objectivo de nela
representar mltiplos grficos. Cada uma destas
subjanelas tem os seus prprios eixos, apesar de
outras propriedades serem comuns a toda a figura. A
formageraldestecomando:
subplot(m,n,i)
onde m e n so o nmero de subdivises em linhas e
colunas,eiasubdivisoqueseconverteemactiva.
As subdivises so numeradas consecutivamente
comeandopelasdaprimeiralinha.
56

GRFICOS:2De3D______________________________

Exemplo7:
subplot(121)
f=sin(x)2*cos(2*x);
fplot(f,[02*pi])
legend(sen(x)2cos(2x))
subplot(122)
fplot(sin,[04*pi],r)
legend(sen(x))

57

GRFICOS:2De3D______________________________

Outrasfunesgrficas2D
bar()criadiagramasdebarras.
barh()diagramasdebarrashorizontais.
bar3()diagramasdebarrascomaspecto3D.
bar3h()diagramasdebarrashorizontaiscomaspecto3D.
pie()grficosemformadetarte.
pie3()grficosemformadetarteeaspecto3D.
area()similaraplot(),masparaordenadasde0ay.
stairs()funoanlogaabar()semlinhasinternas.
errorbar()representasobreumgrficomediantebarrasvaloresdeerros.
compass()desenhaoselementosdeumvectorcomplexocomoum
conjuntodevectorespartindodeumaorigemcomum.
feather()desenhaoselementosdeumvectorcomplexocomoumconjunto
devectorespartindodeorigensuniformementeespaadassobreo eixode
abcissas
hist()desenhahistogramasdeumvector.

58

GRFICOS:2De3D______________________________

Representaodepolgonos
Funo especial para desenhar polgonos planos,
preenchendoosdeumadeterminadacor.
Aformageralaseguinte:
fill(x,y,c)
Se c um caracter de cor ('r','g','b','c','m','y','w','k'),
ou um vector de valores [r g b], o polgono
preenchido de forma uniforme e com a cor
especificada.
Secumvectordamesmadimensoquexey,os
seus elementos transformamse de acordo com um
mapa de cores determinado, e o preenchimento do
polgono no uniforme neste caso obtmse
interpolandoentreascoresdosvrtices.
59

GRFICOS:2De3D______________________________

Estecomandocommatrizesaplicasedaseguinteforma:
fill(A,B,C)
onde A e B so matrizes do mesmo tamanho. Neste caso
desenhase um polgono por cada par de colunas das
matrizes.Cpodeserumvectorlinhadecoresuniformespara
cada polgono, ou uma matriz do mesmo tamanho que as
anteriores para obter cores de preenchimento por
interpolao.

60

Exemplo8:
x=[1,2,1,0];
y=[0,1,2,1];
figure
fill(x,y,r)
title(rombo)

GRFICOS:2De3D______________________________
Funesgrficas3Delementares:
Afunoplot3anlogasuahomlogabidimensionalplot.
Asuaformamaissimplesaseguinte:
plot3(x,y,z)
Exemplo9:
teta=0:pi/80:8*pi;
x=1+2*cos(teta);
y=1+2*sin(teta);
z=4*teta;
plot3(x,y,z)
axis([13130120]);
xlabel('eixox')
ylabel('eixoy')
zlabel('eixoz')

61

GRFICOS:2De3D______________________________

Representaogrficadesuperfcies
mesh(x,y,Z),
Criaodeumamalha:[X,Y]=meshgrid(x,y)
Grficodamalhaconstruidasobreasuperfciez:
mesh(X,Y,Z),meshz(X,Y,Z)
Aindafazumaprojecosobreoplanoz=0:
meshc(X,Y,Z),linhasdecontornonoplanoz=0
Exemplo10:

62

x=[0:2:200];y=[0:50];
%Obtemosamalhadodomnio
[XY]=meshgrid(x,y);
length(x),length(y)
size(X),size(Y)
Z=X.^2Y.^2;
figure(1);mesh(X,Y,Z)
figure(2);meshz(X,Y,Z)
figure(3);meshc(X,Y,Z)

GRFICOS:2De3D______________________________

Omesmocomsurf(X,Y,Z),surfc(X,Y,Z),surfl(X,Y,Z)
Umaformadiferentederepresentarfunestridimensionaispormeio
deisolinhasoucurvasdenvel.Comcontour(x,y,Z)ecomcontour3
(X,Y,Z)geramosascurvasdenveldeumasuperfcie.
Existem legendas especiais: primeiro precisamos de saber os valores
docontorno
cs=contour(Z)elogopomosclabel(cs)ouclabel(cs,v)

63

pcolor(Z)desenhaumaprojecocomsombrasdecorsobreoplano.
AgamadecoresestemconsonnciacomasvariaesdamatrizZ.
As funes surf e pcolor tm diversas possibilidades referentes
formaemquesorepresentadasasfacetasoupolgonoscoloridos.As
trspossibilidadessoasseguintes:
shadingflat:sombreadocomcorconstanteparacadapolgono.Este
sombreadochamaseplanoouflat.
shadinginterp:estabelecequeosombreadosecalculapor
interpolaodecoresentreosvrticesdecadafaceta.Chamase
tambmsombreadodeGouraud.
shadingfaceted:consistenumsombreadoconstantecomlinhas
pretassobrepostas.Estaaopopordefeito.

GRFICOS:2De3D______________________________

Quando se pretende desenhar uma figura com um determinado mapa de cores


estabeleceseumacorrespondncia(ouummapping)entreosvaloresdafunoeas
coresdomapadecores.

caxis([cmin,cmax])%escalaomapadecores
colormap(opcao)(distintasescalasdecores)
hsv

64

hot
gray
bone
copper
pink
white
flag
lines
colorcube
vga
jet
prism
cool
autumn
spring
winter
summer

Huesaturationvaluecolormap.
Blackredyellowwhitecolormap.
Lineargrayscalecolormap.
Grayscalewithtingeofbluecolormap.
Linearcoppertonecolormap.
Pastelshadesofpinkcolormap.
Allwhitecolormap.
Alternatingred,white,blue,andblackcolormap.
Colormapwiththelinecolors.
Enhancedcolorcubecolormap.
Windowscolormapfor16colors.
VariantofHSV.
Prismcolormap.
Shadesofcyanandmagentacolormap.
Shadesofredandyellowcolormap.
Shadesofmagentaandyellowcolormap.
Shadesofblueandgreencolormap.
Shadesofgreenandyellowcolormap.

GRFICOS:2De3D______________________________

colorbar(horiz),colorbar(vertical)%barracomaescala
decores.
brightenajustaobrilhodecordomapadecores
[X,Y,Z]=sphere(n) faz uma representao da esfera unitria
comnpontosdediscretizao
[X,Y,Z]=cylinder(rad,n)fazumarepresentaodeumcilindro
unitrio com n pontos igualmente espaados cuja seco
dadapelacurvacujosraiosseguardamnovectorrad.(1,1)e
20valorespordefeito.
fill3(x,y,z,c)%polgonostridimensionais

65

GRFICOS:2De3D______________________________

Manipulaodegrficos
view:view(azimut,elev),view([xd,yd,zd]).
view(2)
view(3)
rotate(h,d,a)ourotate(h,d,a,o)
hoobjecto,dumvectorqueindicaadirecoea
umngulo,ouaorigemderotao
Aorepresentarfunestridimensionais,svezestambm
soteisosNaNs.Quandoumapartedoselementosda
matriz de valores Z so NaNs, essa parte da superfcie
norepresentada,permitindoverarestantesuperfcie.

66

GRFICOS:2De3D______________________________

hiddenoffdesactivaarepresentaodelinhasocultas
hiddenonactivaarepresentaodelinhasocultas

67

GRFICOS:2De3D______________________________

Transformaodecoordenadas
[ang,rad]=cart2pol(x,y)%Decartesianasparapolares
[ang,rad,z]=cart2pol(x,y,z)%Decartesianasparacilndricas
[x,y]=pol2cart(ang,rad)%Depolaresparacartesianas
[x,y,z]=pol2cart(ang,rad,z)%Decilndricasparacartesianas
[angx,angz,rad]=cart2sph(x,y,z)%Decartesianasparaesfricas
[x,y,z]=aph2cart(angx,angz,rad)%Deesfricasparacartesianas
Exemplo11:
%cilndricas
[ang,rad,z]=cart2pol(sqrt(3),1,2)
%esfricas
[ang1,ang2,rad1]=cart2sph(sqrt(3),1,2)
68

GRFICOS:2De3D______________________________
Criaodeanimaes
Para preparar pequenas animaes podemse utilizar as funes
movie, moviein e getframe. Uma animao composta de vrias
imagens, denominadas frames. A funo getframe devolve um
vector coluna com a informao necessria para reproduzir a
imagem que se acaba de representar na figura ou janela grfica
activa, por exemplo com a funo plot. O tamanho deste vector
colunadependedotamanhodajanela,masnodacomplexidadedo
grfico. A funo moviein(n) reserva memria para armazenar n
frames. Uma vez criada a animao podese visualizla com o
comandomovie.
Exemplo12:

69

forj=1:10
x=0:0.01:2*pi;
plot(x,sin(j*x)/2)
M(j)=getframe;
end
movie(M,10)

GRFICOS:2De3D______________________________

Exerccio5.1: Consideremos a equao de Van der


Waals. Considerase o benzeno para o qual a=18.78
atml2/mol2, b=0.1208 l/mol. Representar sobre um
mesmogrficoosdoissubgrficoscorrespondentesa:
Isotrmicasde100,200,300e400C
Isobricasde25,35,45e55atm
Cadacurvadeverepresentarsecomtraodiferenciado,
com o texto que indique a isolinha representada, assim
comoottulodogrficoealegendadoseixos.
P

a
V

R=0.0821eV=[2:100].
70

V b =RT

GRFICOS:2De3D______________________________

Exerccio5.1:

a=18.78;
b=0.1208;
R=0.0821;
subplot(1,2,1)
T=[373:100:673];
V=[2:100];
fac1=R./(Vb);
fac2=a./V.^2;
P=zeros(4,length(V));
P(1,:)=T(1)*fac1fac2;
P(2,:)=T(2)*fac1fac2;
P(3,:)=T(3)*fac1fac2;
P(4,:)=T(4)*fac1fac2;
plot(V,P(1,:),'',V,P(2,:),'',V,P(3,:),':',V,P(4,:),'.')
title('EquacaodeVanderWaals:Isotermicas')
xlabel('Volume,ltr.')
ylabel('Pressao,atm.')
axis([0,50,0,15])
legend('T=100C','T=200C','T=300C','T=400C')

71

GRFICOS:2De3D______________________________

subplot(1,2,2)
P=[25:10:55];
T=zeros(4,length(V));
fac1=(Vb)/R;
T(1,:)=((P(1)+fac2).*fac1)273.15;
T(2,:)=((P(2)+fac2).*fac1)273.15;
T(3,:)=((P(3)+fac2).*fac1)273.15;
T(4,:)=((P(4)+fac2).*fac1)273.15;
plot(V,T(1,:),'',V,T(2,:),'',V,T(3,:),':',V,T(4,:),'.')
title('EquacaodeVanderWaals:Isobaricas')
xlabel('Volume,ltr.')
ylabel('Temperatura,C')
legend('P=25atm.','P=35atm.','P=45atm.','P=55atm.')

72

GRFICOS:2De3D______________________________

73

GRFICOS:2De3D______________________________

Exerccio5.2
Dadaafunof(x,y)=xy,obternumajanelagrficaas
representaesseguintes:
A superfcie definida pela funo sobre o domnio
[10,10]*[10,10].
Aslinhasdecontornosobreasuperfcie
A projeco das linhas de contorno sobre o domnio
dedefinio
Aprojecodaslinhasdecontornosobreoplanoxy,
correspondentesaosvalores4,1,1e4.

74

GRFICOS:2De3D______________________________

75

Exerccio5.2
x=[10:0.5:10];y=x;
[X,Y]=meshgrid(x,y);
Z=X.*Y;
subplot(221)
mesh(X,Y,Z)
legend('z=xy')
xlabel('eixox')
ylabel('eixoy')
zlabel('eixoz')
title('superficiez=xy')
subplot(222)
contour3(Z)
gridoff
xlabel('eixox')
ylabel('eixoy')

GRFICOS:2De3D______________________________

76

zlabel('eixoz')
title('linhasdecontorno3D')
subplot(223)
cs=contour(Z);
contour(x,y,Z)
gridoff
clabel(cs)
xlabel('eixox')
ylabel('eixoy')
title('Projeccaodaslinhasdecontorno')
subplot(224)
contour(Z,[4,1,1,4])
gridoff
xlabel('eixox')
ylabel('eixoy')
title('Projeccaodaslinhasdecontorno')

GRFICOS:2De3D______________________________

77

GRFICOS:2De3D______________________________

Exerccio5.3
Representarasuperfciederevoluoobtidaaogirara
curvay=x2+1emtornodoeixoox
x=[0:0.1:1]

78

GRFICOS:2De3D______________________________

Exerccio5.3

79

x=[0:0.1:1];%pontosdediscretizacaodoeixoox
rad=x.^2+1;%vectorderaios
n=length(rad);%numeroderaios
cylinder(rad,n)%representacaodocilindro
xlabel('eixox')
ylabel('eixoy')
zlabel('eixoz')
[X,Y,Z]=cylinder(rad,n);
h=surf(X,Y,Z);%calculodoobjecto
rotate(h,[0,1,0],90)
%Aorodardesaparecemaslegendasdoseixos
xlabel('eixox')
ylabel('eixoy')
zlabel('eixoz')
view(15,15)%alteramosopontodeobservacao
gridoff
legend('f(x)=x^2+1')

GRFICOS:2De3D______________________________

80

PROGRAMAO
TodososficheirosdecomandosMatlabdevemtera
extenso.mesode2tipos:
Ficheirosdefunoaprimeiralinhaexecutvele
comeacomapalavrafunction
Ficheirosdeprogramanosofuneseconstroemse
medianteumasequnciadecomandos.Executamse
teclandoonomesemextenso
Exemplo1:
functiontemp_c=convert(temp_f);
%CRIARUMAFUNCAO
%PASSADEGRAUSFAC

temp_c=5/9*temp_f5/9*32;
81

PROGRAMAO________________________________

Comandosdeentrada/sada
input:permitenosintroduzirdados
variavel=input(mensagemparaoecr);
disp:mostraumtextonoecr
disp(Oalgoritmonoconvergiu)
menu:geraummenuquepermiteaoutilizadorescolher
entrediversasopes
opcao=menu(titulodamensagem,opcao1,...opcao_p)
error:informadaexistnciadeumerroepraa
execuodoprograma,devolvendoocontroloao
utilizador
82

PROGRAMAO________________________________

Programaodefunes
Aprimeiralinhaexecutvelecomeapelapalavra
function:
functionarg_sada=nome_funcao(arg_entrada)
Depois,quantoscomandossejamnecessrios,incluindo
comentrioscomosesetratassedeumficheiroprograma.
Oficheirodeveserguardadocomo:nome_funcao.m
Paradevolverocontroloaoprogramaapartirdequalquer
pontodeumafuno,bastaescreverocomandoreturn.
Exemplo2:
Construrumafunoquedefina,paraumgsideal,a
temperaturaemfunodapressoedovolume.
83

PROGRAMAO________________________________

functiont=gases(p,v,n)
%t=gases(p,v,n)
%funcaoqueconsideraaleidosgasesideais
%Argumentosdeentrada:
%pressaop(atmosferas)
%volumev(litros)
%numerodemolesn
%Argumentosdesaida:
%temperaturat(Kelvin)
%R=0.0821atm.litro/mol.grau
R=0.0821
t=p*v/(n*R);
___________________
Gravarcomogases.m
temp=gases(20,10,10)
84

PROGRAMAO________________________________

OmfilespodeexecutarsenapromptdoMatlabouapartir
deumalinhadeoutroficheiro.
O mfile no admite argumentos de entrada, simplesmente
trabalhacomdadosexistentesnoespaodetrabalho.
As variveis de uma funo so locais funo e as de um
ficheiromsoglobais.
Se queremos que uma varivel seja compartilhada por vrias
funes,temdedefinirseemtodaselascomoglobal:

85

globalvarivel
echoescrevecadacomandodoficheironoecr
pausesuspendeaexecuoatsepremirumatecla
keyboardidemealmdissopermiteintercalar
comandos.Aexecuoretomadacomreturn

PROGRAMAO________________________________

Testaronmerodeargumentos
nargin devolve o nmero de argumentos de entrada
comosquaisafunofoichamada.
nargout devolve o nmero de argumentos de sada
comosquaisafunofoichamada.
nargchk verifica se o nmero de argumentos de
entrada calculados com nargin est entre o valor
mximormnimoprevisto,senoderro.
nargchk(mnimo,mximo,nmero_entrada)

86

PROGRAMAO________________________________

Ciclos
fork=n1:incre:n2
...
end
fork=vector_coluna
...
end
Combreakinterrompidaaexecuo

Estruturasdecontrolo
if
end
87

if

if

else

elseif

end

end

if
elseif

while

else

end

end

PROGRAMAO________________________________
Operadoresrelacionaiselgicos
Menor:<Menorouigual:<=Maior:>Maiorouigual:>=
Igual:==Diferente:~=Ou:|E:&No:~
O resultado de realizar operaes relacionais ou lgicas
serum(1)severdadeiroouzero(0)sefalso
Outrasfunesrelacionaisoulgicas:
xor(x,y): (or exclusivo) devolve 0 se x ou y so no nulos e 1 caso
contrrio.
any(x):sexumvectordevolveum(1)sealgumacomponentedex
nonula.Seforumamatrizdevolveumvectorlinhacomum(1)para
cadacolunadamatrizxquetenhaalgumadassuaslinhasnonulase
zero(0)casocontrrio.
all(x):Sexumvectordevolveum(1)setodasassuascomponentes
sononulas.Seforumamatrizdevolveumvectorlinhacomum(1)
paracadacolunadamatrizxquetenhatodasassuaslinhasnonulas
ezero(0)casocontrrio.

88

PROGRAMAO________________________________

isempty(x):devolveum(1)seamatrizxvaziaezero(0)casocontrrio.
isequal(x1,x2,,xn):Devolveum(1)setodasasmatrizessoidnticase
zero(0)casocontrrio.

Estruturasdecontrolopredefinidas:

89

Exemplo3:
q=[];v=[1,1,2,1];
fori=1:length(v)
if(v(i)>=0)
q=q[q,1];
else
q=[q,0];
end
end
q=v>=0

PROGRAMAO________________________________

r=v==q
s=(v>=0)&(v<2)
y=v(abs(v)>=2)
A=[2,4,6;1,3,5];
[i,j]=find(A<3)
Desde o Matlab 5 que foi incorporada a estrutura switch que permite
realizar bifurcaes no programa atendendo ao resultado de uma
expresso:

90

switchexpressao
caseexpressao_0
comandos_0quedevemserexecutados
caseexpressao_1
comandos_1quedevemserexecutados
caseexpressao_2
comandos_2quedevemserexecutados
otherwise
comandosquedevemserexecutados
end

PROGRAMAO________________________________

Leituraeescritaemficheirosexternos
Aleituraeescritadeinformaoemficheirosexternos
efectuada essencialmente com os comandos fread e
fscanfparaleituraefprintfefwriteparaescrita.
Oprocedimentogeralemtodososcasos:
Abriroficheiroapartirdoqualsedesejalerounoqual
desejamosescrever.
Colocar o apontador de leitura ou escrita na posio
desejada.
Lerouescreverasvariveis.
Fecharoficheiro.

91

PROGRAMAO________________________________

ParaAbrirficheirosocomandofopen
ident=fopen(nomedeficheiro)
Emidentguardadoumnmerodeidentificao(sefor
(1)oficheironopdeseraberto.
ParaFecharficheirosocomandofclose
fclose(ident)
fclose(all)
verif=fclose(all)
Posicionamientodoapontador.
1.Posicionar o apontador no incio do ficheiro com
nmerodeidentificaoident:frewind(ident)

92

2.Posicionaroapontadordentrodeumficheiro:
test=fseek(ident,posi,origem)

PROGRAMAO________________________________

Este comando coloca o apontador do ficheiro ident na


posioindicadaemposi:
.Seposi>0moveposibytesparaafrente.
.Seposi<0moveposibytesparatrs.
.Seposi=0oapontadornosemove.
A varivel caracter origem indica de onde se comea a
moveroapontador.
.bof:principiodoficheiro.
.cof:posioactualnoficheiro.
.eof:finaldoficheiro.
A execuo do comando fseek devolve a varivel test
quevaler(1)sealgofalhar.
Paraconheceraposiodoapontador:posi=ftell(ident)

Leituradedados
93

Devemos distinguir entre ficheiros formatados e no


formatados.

PROGRAMAO________________________________

Leituradedadosformatados:
[dados,contador]=fscanf(ident,formato,quantos)
1.Ldadosdoficheiroident.
2.Osdadoslidosguardamseemdados.
3.quantos,indicaquantosdadosvamosler.
.umescalark
.um vector[n,m], neste caso lerseo os dados
necessrios para preencher uma matriz de ordem n x m,
colunaacoluna.
.inftodososdadosdoficheiro.
4.Avarivelcontadorindicaquantosforamlidoscomxito.
5.Avarivelformatoindicaoformatodeleitura:
%d:decimais;%e:notaoexponencial

94

PROGRAMAO________________________________

%f:notaodepontofixo;
%g:noconsideraoszerosnosignificativos.
%s:varivelcaracter
Leituradedadosnoformatados:
dados=fread(ident,quantos,precisao)

Escritaemficheiro
Escritadedadosformatados:
contador=fprintf(ident,formato,dados,controlos)
\nlinhanova

95

\tavanaatposioseguintedetabulao

PROGRAMAO________________________________

Escritadedadosnoformatados:
contador=fwrite(ident,dados,precisao)
Exercicio6.1:
Utilizandoestruturasdecontroloconstruirumafunoque
calculeasraizesdeumaequaodesegundograu
ax2+bx+c=0

96

PROGRAMAO________________________________

Exercicio6.1:

functionraiz=sole2(a,b,c)
%raiz=sole2(a,b,c)
%solucaodaequacaodesegundograu
%ax^2+bx+c=0,a~=0
%
if(nargin~=3)
error(Onumerodeargumentosdeentradadeveser3)
end
discri=b^24*a*c;
raiz=[];
if(discri==0)
raiz=b/(2*a);
disp([Raizdupla=,num2str(raiz)])
return
elseif(discri>0)

97

PROGRAMAO________________________________

raiz(1)=(b+sqrt(discri))/(2*a);

raiz(2)=(bsqrt(discri))/(2*a);
disp([Raizesreaissimples=,num2str(raiz)])
return
else
raiz(1)=(b+sqrt(discri)*i)/(2*a);
raiz(2)=(bsqrt(discri)*i)/(2*a);
disp([Raizescomplexas=,num2str(raiz)])
return
end
Estafunoexecutasedoseguintemodo:
raiz=sole2(2,3,1);
raiz=sole2(1,0,1);

98

PROGRAMAO________________________________

Exercicio6.2:
Programaparaleituradedados

99

Nome
FernandoGomesPereira
SusanaRodriguesPeres
CarlosLealAlvarinho
ArturGomesAlvarinho
SlviaTaslvares
AndreiaGalegoNunes
AliceCavaleiroLeal
AntnioFragaGomes
BeatrizMachadoGomes
LauraTobiasMacieira
JooRicoFraga
AndrPenaGomes
LusBrancoVila
SandraPontesGalego
IsoldaPretoGomes
TeresaCieiroGonavles
RicardoLopesAmigo

Anlise
6
14
16
10
17
6
12
10
8
14
8
12
16
16
10
8
16

lgebraFsica
12
10
8
6
16
14
8
10
16
18
6
4
16
16
14
12
6
10
16
10
14
10
16
10
12
12
17
14
10
12
4
10
12
4

Estatstica
14
2
17
17
17
8
10
10
8
18
10
12
8
18
12
6
18

PROGRAMAO________________________________

100

Exercicio6.2:
ident=fopen('dados.m');
frewind(ident)
variavais=[];
fori=1:5
variavel=fscanf(ident,'%s',1);
long_v(i)=length(variaveis)+length(variavel);
variaveis=[variaveisvariavel];
if(i==1)
fprintf(1,'\t%s\t\t',variavel)
else
fprintf(1,'\t%s\t',variavel)
end
end
nomes=[];
notas=[];

PROGRAMAO________________________________

fori=1:17
nome=fscanf(ident,'%s,%c',1);
apelido1=fscanf(ident,'%s,%c',1);
apelido2=fscanf(ident,'%s,%c',1);
l=3*(i1)
long_n(l+1)=length(nomes)+length(nome);
long_n(l+2)=long_n(l+1)+length(apelido1);
long_n(l+3)=long_n(l+2)+length(apelido2);
nomes=[nomesnomeapelido1apelido2];
notas=[notas;fscanf(ident,'%i',4)'];
fprintf(1,'\n%9s%s%9s',nome,apelido1,apelido2)
fprintf(1,'\t%i\t\t%i\t\t%i\t\t%i',notas(i,:))
end
fclose(ident)
101

ANLISENUMRICA
Neste captulo introduziremos a anlise numrica de
problemas bsicos relacionados com o estudo de
funes de uma e vrias variveis, a aproximao de
extremoslocaisouoclculodezerosdeumafuno.
O clculo dos mnimos locais de uma funo de uma
varivelfazseutilizandooseguintecomando:
min=fminbnd(funcao,a,b,opcoes)
Exemplo1:
Calcular um mnimo local da funo f(x)=3x44x3 no
intervalo[12]
fminbnd(3*x^44*x^3,1,2)

102

ANLISENUMRICA_____________________________

Calcularummximo de fnointervalo [a,b]omesmoque


calcularummnimodef
fminbnd('(3*x^44*x^3)',1,2)
fminbnd('(3*x^44*x^3),0,2)
O clculo de mnimos locais para funes de vrias
variveispodelevarseacaboexecutando:

103

min=fminsearch(funcao,x0)
A diferena que em vez de dar um intervalo damos um
vector x0 que indica o ponto em torno do qual desejamos
minimizarafuno.
Exemplo2:
Minimizarafunof(x)=sen(xy)emtornode[0,0]
fminsearch(sin(x(1)*x(2)),[0,0])

ANLISENUMRICA_____________________________

Para calcular os zeros de uma funo temos o comando


fzero
raiz=fzero(funcao,x0)
Calculaarazdafunof(x)=0apartirdopontoinicialx0
Exemplo3:

Calcularumasoluodaequaosen(x)2cos(2x)+x2=22.
Estaf(x)=sen(x)2cos(2x)+x22+2=0.
A funo contnua e para a escolha do ponto inicial
procuramosumintervaloondeafunomudedesinal,[0,10]
x=0;eval(sin(x)2*cos(2*x)+x^2pi^2+2)
x=10;eval(sin(x)2*cos(2*x)+x^2pi^2+2)

104

ANLISENUMRICA_____________________________

No intervalo [0,10] h uma mudana de sinal e isto


implica que existe pelo menos um zero. Escolhemos
x0=5:
x=fzero(sin(x)2*cos(2*x)+x^2pi^2+2,5)
eval(sin(x)2*cos(2*x)+x^2pi^2+2)

105

ANLISENUMRICA_____________________________

Mtodosdeintegraonumrica:
Podemos calcular a rea sob curvas F(x) por
integraonumrica.
.Integraodefunesunidimensionais
quad
quadl
.Integraodupla
dblquad
Exemplo4:
ia=quad(sin(x)+1,0,2*pi);%(6.2832)
xmin=pi;xmax=2*pi;
ymin=0;ymax=pi;
result=dblquad('y*sin(x)+x*cos(y)',...
xmin,xmax,ymin,ymax)
%9.8698
106

ANLISENUMRICA_____________________________

int('sin(x)^2*cos(x)^2',0,4*pi)%1/2*pi=1.5708
ia=quad('sin(x).^2.*cos(x).^2',0,4*pi)%1.0051e030
ial=quadl('sin(x).^2.*cos(x).^2',0,4*pi)%1.5708

107

ANLISENUMRICA_____________________________

Mtodosderesoluodeequaesdiferenciais
Resoluo de problemas de valores iniciais para
equaesdiferenciaisordinrias(ODEs)
[T,Y]=solver(F,tspan,y0)
.solver:algoritmoderesoluodeODEs:
ode45,ode23,ode113,ode15s,ode23s
.F:stringcontendoonomedoficheiroODE.
.tspanvectordelimites[t0tfinal]deintegrao.
.y0vectorcolunadecondiesiniciaisemt0

108

ANLISENUMRICA_____________________________

109

Solvers

ode45
ode23
ode113
ode15s
ode23s

Eq.Dif.Norgidas.Ordemmdia
Eq.Dif.Norgidas.Ordembaixa
Eq.Dif.Norgidas.Ordemvarivel
Eq.Dif.rgidas.Ordemvarivel
Eq.Dif.rgidas.Ordembaixa

Opoes

odeset
odeget

Criar/modificaropes
Obteropes

Sadas

odeplot
odephas2
odephas3
odeprint

Representarsriestemporais
Representarfasesbidimensionais
Representarfasestridimensionais
Sadaparaajaneladecomandos

ANLISENUMRICA_____________________________

Exemplo5:
AequaodeVanderPol

y 1 1 y 12 y 1 y 1 =0
''

'

Reescrevemososistema
''

y1 = y 2

y '2 = 1 y 12 y 2 y 1

EscrevemosoficheiroODE
110

ANLISENUMRICA_____________________________

functiondy=vdp1(t,y)
dy=[y(2);(1y(1)^2)*y(2)y(1)];
Chamamososolver
[T,Y]=ode45(vdp1,[020],[2;0]);
plot(T,Y(:,1),'',T,Y(:,2),'')
title('SolucaodaequacaodeVanderPol,\mu=1')
xlabel('TempoT')
ylabel('SolucaoY')
legend('Y1','Y2')
111

ANLISENUMRICA_____________________________

112

AJUDA
AajudaomaisimportantenoMatlab,
helpnome_comando
helpnome_toolbox
PodemosverexemplosdeaplicaesdeMatlabescrevendo:

demo

Parasabermais:http://www.mathworks.com/
http://www.mathworks.com/access/helpdesk/help/toolbox/compiler/compiler.shtml
EstaltimafazrefernciaaoscompiladoresdeCdoMatlab,osmexfiles

113

Potrebbero piacerti anche