Equaes Diferenciais em Matlab - mat.uc.pt alma/aulas/matcomp/documentos/IntroducaoaMatlab67 Aplicaes Informticas para Engenharia SrgioCruz Equaes Diferenciais em Matlab • O matlab

  • View
    217

  • Download
    2

Embed Size (px)

Text of Equaes Diferenciais em Matlab - mat.uc.pt alma/aulas/matcomp/documentos/IntroducaoaMatlab67 Aplicaes...

  • 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,