View
217
Download
2
Embed Size (px)
67
Apl
ica
es
Info
rmt
icas
par
a En
genh
aria
Srgio Cruz
Equaes Diferenciais em Matlab O matlab apenas calcula solues numricas de sistemas de
equaes diferenciais de primeira ordem. Para resolver equaes diferenciais de ordem superior deve convert-las, por intermdio de uma mudana de variveis, em equaes diferenciais de 1 ordem
Antes de definir o sistema de equaes no matlab tem de, previamente, manipular manualmente tal sistema de modo a que ele fique na forma dV/dt=f(t,V), onde V um vector com as funes do sistema. Por outras palavras, o sistema tem de ficar num formato do tipo dy1/dt =...; dy2/dt =...., etc)
68
Apl
ica
es
Info
rmt
icas
par
a En
genh
aria
Srgio Cruz
Tratamento de Dados de Entrada O comando isempty permite verificar se uma dada varivel est vazia.
Por exemplo, se pedir ao utilizador um nmero e ele apenas premir a tecla , a varivel associada ficar vazia e o comando acima referido devolve o valor lgico Verdadeiro. Um exemplo:
A=input('Introduza uma matriz:');if isempty(A)
disp('No introduziu qualquer matriz')else
disp('A inversa da matriz que acabou de introduzir :')disp(inv(A))
end
Prima F1 e faa uma busca por is. Seleccione a primeira linha dos resultados da busca e observe o conjunto de funes que o matlabdisponibiliza para verificar o tipo de dados que o utilizador introduziu
69
Apl
ica
es
Info
rmt
icas
par
a En
genh
aria
Srgio Cruz
Funes na Janela de Comando Pode definir funes na prpria janela de comando (ou ficheiro
.m) usando o comando inline. Trs exemplos:
f=inline('0.1*exp(x)+sin(x)-5-x') % Define a funo ffplot(f,[0 5]); % Grfico 2D de f(x)
f=inline('x^2+3*y') % Define a funo de duas variveis independentesz=f(3,4) % z toma o valor da funo nos pontos (3,4)
f=inline(sin(x1)+x2,x1,x2) % Define uma funo f de variveis % independentes x1 e x2
70
Apl
ica
es
Info
rmt
icas
par
a En
genh
aria
Srgio Cruz
Interpolaes em Matlab O matlab possui comandos que permitem efectuar interpolaes de uma
dada funo, sendo conhecido apenas um conjunto finito de pontos(abcissas) e respectivas imagens (ordenadas)
Existem diferentes mtodos para efectuar uma interpolao. O matlab, por defeito, efectua uma interpolao linear mas o utilizador pode escolher um outro mtodo se assim o entender
Os comandos interp1, interp2, interp3 e interpn permitem obter interpolaes de uma dada funo a uma dimenso, duas dimenses, trs dimenses e n dimenses, respectivamente
Os elementos dos vectores que constituem os parmetros de entrada das funes interpoladoras devem ser dispostos de forma montona (isto , sempre de forma crescente ou decrescente), excepto para interp1. No entanto, tais pontos podem estar espaados de forma irregular
71
Apl
ica
es
Info
rmt
icas
par
a En
genh
aria
Srgio Cruz
Interpolaes em Matlab Um exemplo de interpolao a 1
dimenso:
x=0:5; y=sin(x);xi=linspace(0,5,60);% interpolao com splines cbicosyi=interp1(x,y,xi,'spline');% grfico para aferir a qualidade da
interpolaoplot(x,y,'*',xi,yi)
72
Apl
ica
es
Info
rmt
icas
par
a En
genh
aria
Srgio Cruz
Interpolaes em Matlab Um exemplo de interpolao linear a 2 dimenses:
% Desenha um grfico 3D da funo z=f(x,y)=x^2+y^2xe = -2:0.1:2; ye = -3:0.1:3; % repare que o espaamento dos pontos de 0.1 !![Xe,Ye]=meshgrid(xe,ye);Ze=Xe.^2+Ye.^2;subplot(3,1,1), mesh(Xe,Ye,Ze) % representa o grfico da funo f exacta
%====== VAMOS COMEAR A INTERPOLAO AQUI =====x= -2:1:2; y= -3:1:3; % Admite-se que s se conhece a funo nestes pontos[X,Y]=meshgrid(x,y);Z=X.^2+Y.^2; % Valores da funo a usar na interpolaosubplot(3,1,2), mesh(X,Y,Z) % representa o grfico da funo f conhecidaZi=interp2(x,y,Z,Xe,Ye); % obtm-se uma interpolao linear da funo fsubplot(3,1,3), mesh(Xe,Ye,Zi) % representa o grfico da funo f interpolada
73
Apl
ica
es
Info
rmt
icas
par
a En
genh
aria
Srgio Cruz
Interpolaes em Matlab Uma forma ligeiramente diferente de interpolar a 2 dimenses (talvez
menos intuitiva pois x um vector linha e y um vector coluna):
x = -2:2;y = [-2:2];z = (sin(y).*exp(-y.^2))*(sin(x).*exp(-x^2));xi = linspace(-2,2,100);yi = linspace(-2,2,100);zi = interp2(x,y,z,xi,yi);mesh(xi,yi,zi)
74
Apl
ica
es
Info
rmt
icas
par
a En
genh
aria
Srgio Cruz
Tratamento de Erros Try e Catch Quando surge um erro num programa executado em matlab, ele sinaliza tal
erro e aborta a execuo do programa (ficheiro .m)
Se pretender apanhar o referido erro e ter uma aco correctiva do mesmo (tratamento adequado dos dados), sem abortar a execuo doficheiro em causa, tem ao seu dispor os comandos try e catch
A sintaxe no uso destes comandos a seguinte
try% fragmento de cdigo 1 que o matlab vai tentar executar sempre
catch% fragmento de cdigo que o matlab vai executar se houver um erro no fragmento de cdigo anterior (situado entre try e catch)
end % fim dos comandos try-catch
75
Apl
ica
es
Info
rmt
icas
par
a En
genh
aria
Srgio Cruz
Tratamento de Erros Try e Catch Um exemplo muito simples no uso de try e catch:
clcA=zeros(4,3)B=eye(4,4)try
C=A*B;disp('O produto de A por B igual a:')disp(C)
catchC=NaN;disp('As matrizes A e B no podem ser multiplicadas')
end
76
Apl
ica
es
Info
rmt
icas
par
a En
genh
aria
Srgio Cruz
Gravao/Leitura de Dados Para alm de efectuar clculos em matlab, torna-se importante armazenar os
resultados obtidos em ficheiro e l-los a partir de ficheiros previamente gravados
Foi visto anteriormente que o matlab dispe dos comandos save e load para gravar/ler num/de ficheiro (por defeito grava ficheiros com extenso .mat, prprios do matlab) as variveis do ambiente de trabalho. Usando o parmetro -ascii a gravao ser efectuada num ficheiro de texto (Ex: >> save -ascii c:\teste.txt a b%grava as variveis a e b num ficheiro de texto)
Ao gravar as variveis em ficheiros .mat, tem a vantagem de poder ler apenas algumas variveis do ficheiro. O mesmo exemplo anterior: >> save teste a b; clear all; load teste a; %neste caso so gravadas as variveis a e b mas apenas a lida do ficheiro
Para alm dos comandos load e save, o matlab possui outros comandos por forma a exportar dados para serem usados por outras ferramentas de anlise e vice-versa. O matlab suporta os tipos de dados mais frequentes (ficheiros de texto, binrios, Excel (xls), etc)
77
Apl
ica
es
Info
rmt
icas
par
a En
genh
aria
Srgio Cruz
Gravao/Leitura de Dados O comando fprintf permite formatar dados e grav-los em ficheiro (ou afix-
los no ecr). Sintaxe: fprintf (ficheiro_ID, formatosaida, variavelsaida)
Este comando faz o seguinte: grava a(s) variavelsaida no ficheiro apontado por ficheiro_ID, de acordo com o
formatosaida especificado omitindo ficheiro_ID, o comando afixa o resultado no ecr!! formatosaida uma string com informao acerca da formatao a dar (s)
varivel(is) a gravar. Envolve o uso do caracter % e permite especificar um conjunto de aspectos que sero apresentados de seguida. permitido o uso de caracteres especiais (de controlo), tais como \n, \r, \t, \b, \f (nova linha, , tab, espao para trs e nova pgina, respectivamente)
Obtenha mais informaes sobre este comando digitando help fprintf
78
Apl
ica
es
Info
rmt
icas
par
a En
genh
aria
Srgio Cruz
Gravao/Leitura de Dados Alguns exemplos no uso de fprintf:
>> x=3; fprintf('A raiz quadrada de %g %8.6f \n',x,sqrt(x));A raiz quadrada de 3 1.732051
No exemplo anterior, %g indica que a primeira varivel deve ser afixada usando uma notao o mais compacta possvel e %8.6f indica que a segunda varivel deve ser afixada num formato de vrgula fixa com um nmero mximo de oito caracteres (incluindo a vrgula!!), e 6 casas decimais
Repare que como temos de afixar dois nmeros (x e sqrt(x)) conveniente usaram-se dois cdigos de converso na string de formatao. Experimente omitir por exemplo o primeiro cdigo de converso (%g) e observe os resultados obtidos
Apresenta-se de seguida uma tabela com alguns cdigos de converso vulgarmente usados:
79
Apl
ica
es
Info
rmt
icas
par
a En
genh
aria
Srgio Cruz
Gravao/Leitura de Dados
Notao mais compacta entre os resultados obtidos com %e e %f (omitindo zeros sem significado)%g
Notao cientfica (%E tambm admissvel)%e
Nmero em notao de vrgula fixa %f
Nmero em notao decimal (com sinal)%d
Converte string de caracteres%s
Descrio da conversoCdigo
80
Apl
ica
es
Info
rmt
icas
par
a En
genh
aria
Srgio Cruz
Gravao/Leitura de Dados Para alm do tipo de converso a efectuar (%d, %f,