Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Introdução à Programação em MATLAB: Exemplos e Comandos Básicos, Notas de estudo de Engenharia Mecânica

Um breve tutorial sobre como utilizar a ferramenta matlab para realizar cálculos matemáticos e gráficos. O texto aborda os conceitos básicos de variáveis, atribuição de valores, listas, funções e gráficos, fornecendo exemplos práticos para cada tema. Além disso, o documento inclui informações sobre como importar e exportar dados, além de como criar e editar gráficos.

Tipologia: Notas de estudo

2014

Compartilhado em 23/07/2014

luis-felipe-suckert-quintas-4
luis-felipe-suckert-quintas-4 🇧🇷

4.7

(27)

121 documentos

1 / 32

Documentos relacionados


Pré-visualização parcial do texto

Baixe Introdução à Programação em MATLAB: Exemplos e Comandos Básicos e outras Notas de estudo em PDF para Engenharia Mecânica, somente na Docsity! MATLAB para o Curso de Mecanismos Ricardo Cury Ibrahim (versão 01/2005) Conteúdo 1 Introdução 1 2 Conceitos Gerais 1 3 Operações matemáticas simples 2 4 Armazenando dados em variáveis 3 5 Formato dos números 4 6 Utilizando funções matemáticas elementares 4 7 Listas 5 7.1 Operações matemáticas com listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 8 Matrizes 8 8.1 Operações matemáticas com matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 9 Loops e tomadas de decisão 12 9.1 Loops usando for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 9.2 Loops usando while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 9.3 Tomadas de decisão usando if-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 10 Plotando gráficos 14 11 Trabalhando com arquivos de dados 16 12 Arquivos de Roteiro - Arquivos M 18 13 Criando funções 19 14 Gráficos avançados 22 15 Animações 24 16 Utilizando polinômios 28 Mecanismos - PMR/EPUSP 3 4 Armazenando dados em variáveis Armazenar dados em variáveis é uma maneira muito útil de tratar com operações mais complexas. A associação de um determinado valor a uma variável é bem simples: >> a=2.75 a = 2.75 que associa o valor 2.75 à variável a. Podemos ter também: >> b=a+4.5 b = 7.25 Se você esquecer e quiser relembrar o valor armazenado numa determinada variável, basta digitar a variável em seguida ao prompt: >> a a = 2.75 Para saber todas as variáveis já usadas, basta usar o comando who, ou abrir a janela “Workspace”. Algumas regras devem ser seguidas para definição de variáveis. • o nome da variável deve sempre começar por uma letra • o nome da variável pode conter letras e números, mas não se deve usar os sı́mbolos especiais (!@#’%^&, etc.) • o MATLAB é sensı́vel ao uso de letras maiúsculas e minúsculas. valor37, Valor37 e VALOR37 são três variáveis diferentes. Algumas variáveis já são predefinidas e não podem mais ser utilizadas. É o caso, por exemplo, de pi que é a razão do perı́metro de uma circunferência pelo seu diâmetro. Note que, excepcionalmente, i ou j representam o número imaginário √ −1, mas também poder ser usados em variáveis. Para deixar de usar uma determinada variável numa seção do MATLAB, basta usar o comando clear seguido do nome da variável que se deseja excluir da memória. No MATLAB é possı́vel salvar em arquivo todas as variáveis definidas num determinado trabalho para uso posterior. Para tanto, basta clicar no menu File e selecionar Save Workspace as. . . para salvar sua seção de trabalho atual. As variáveis podem ser recuperadas usando a opção Load no menu File. Mecanismos - PMR/EPUSP 4 5 Formato dos números O MATLAB pode utilizar números em diversos formatos. Uma listagem completa pode ser obtida usando o comando help format. O formato default é o format short, em que números reais são mostrados com 4 algarismos após o ponto decimal. Para mudar o formato em uso basta dar o comando format seguido do nome do formato desejado. Para mudar do formato default para o formato real longo, usa-se o comando: >> format long Como exercı́cio, experimente com os diversos formatos disponı́veis. 6 Utilizando funções matemáticas elementares O MATLAB contém diversas funções matemáticas elementares (trigonométricas, para números complexos, logarı́tmicas, e numéricas) que são muito úteis em vários tipos de aplicações. Consulte o help para funções matemáticas elementares (uma maneira é usar o comando help elfun) para uma listagem completa. Para o nosso curso, algumas funções podem ser destacadas. Pratique com elas! Experimente com as seguintes funções: abs(x); conj(x); real(x); imag(x); angle(x); exp(x); log(x); log10(x); sqrt(x); rem(x,y); round(x); ceil(x); floor(x); sin(x); asin(x); etc. Entre um número complexo qualquer, como no exemplo abaixo, e experimente com as diversas funções pertinentes (abs(x), angle(x), conj(x), real(x), imag(x)) >> nc1 = -4 + 3i nc1 = -4.0000 + 3.0000i Descubra se os argumentos das funções trigonométricas como sin(x), cos(x), tan(x) devem ser em radiano ou em grau. Também é importante para o nosso curso a Expressão de Euler: eiθ = cos(θ) + i sin(θ). No Matlab a função exp(x) também pode receber como argumento um número complexo. Por exemplo, para inserir RAO2e iθ2 , onde RAO2 = 4 e θ2 = 30 ◦ = pi/6 basta fazer: >> R=4; >> T2=pi/6; >> R*exp(i*T2) ans = 3.4641 + 2.0000i Mecanismos - PMR/EPUSP 5 7 Listas Uma lista ou um vetor é uma coleção de dados de um mesmo tipo e unidimensional, ou seja, a cada elemento se pode associar um ı́ndice único. A lista é um dos elementos mais úteis no MATLAB. A maneira mais simples de se criar uma lista no MATLAB é escrevendo seus elementos um a um separados por vı́rgula ou por espaço dentro de colchetes. >> L1 = [12,exp(1),pi,i] L1 = 12.0000 2.7183 3.1416 0 + 1.0000i ou então, >> L1 = [12 exp(1) pi i] L1 = 12.0000 2.7183 3.1416 0 + 1.0000i Note que esta é uma lista (ou vetor) horizontal. Para criar uma lista vertical (coluna), basta separar seus elementos por ponto e vı́rgula. >> L1 = [12;exp(1);pi;i] L1 = 12.0000 2.7183 3.1416 0 + 1.0000i Ou então, use o sinal de apóstrofo para representar a transposta do vetor linha em seguida ao sinal de ponto: >> L1 = [12 exp(1) pi i].’ L1 = 12.0000 2.7183 3.1416 0 + 1.0000i É importante observar que se não fosse usado o sinal de ponto antes do apóstrofo o resultado seria o conjugado da transposta, no caso de listas com números complexos. Verifique você mesmo! Utilizaremos, em seguida, um exemplo muito comum nos livros sobre MATLAB. Imagine que se queira plotar uma determinada função, co-seno por exemplo. Escolhe-se um determinado intervalo de interesse. Diversos elementos compreendidos no intervalo constituem uma lista no eixo horizontal do gráfico a ser plotado. Então, para cada elemento, calcula-se o valor correspondente da função desejada. Essa operação Mecanismos - PMR/EPUSP 8 Warning: Divide by zero. ans = Columns 1 through 7 0 0.1111 0.2500 0.4286 0.6667 1.0000 1.5000 Columns 8 through 11 2.3333 4.0000 9.0000 Inf >> L2.*L3 %multiplicacao de L2 por L3 elemento a elemento ans = Columns 1 through 7 0 0.0900 0.1600 0.2100 0.2400 0.2500 0.2400 Columns 8 through 11 0.2100 0.1600 0.0900 0 Repare, entretanto, nas seguintes operações: >> L2*L3 %tentativa de multiplicacao de uma matriz (1x11) por outra (1x11) ??? Error using ==> * Inner matrix dimensions must agree. >> L2*L3.’ %multiplicacao de uma matriz (1x11) por outra (11x1) ans = 1.6500 Note a maneira de se executar uma multiplicação ou uma divisão entre listas. Deve-se usar o sinal de ponto (.) antes do sı́mbolo da operação de multiplicação ou divisão. Operações entre listas só podem ser executadas se as listas forem de mesma dimensão (mesmo número de elementos). Repare a diferença entre a divisão direita (/) e a divisão esquerda (\). Note também os resultados e os avisos de divisão por zero. 8 Matrizes A maneira mais simples de se criar uma matriz em MATLAB é inserindo seus elementos um a um, como uma lista, mas separando cada linha da matriz por ponto e vı́rgula: >> format bank >> M1=[3 49 pi; 2^5,0.87,0.2-10*i;100 200 200] M1 = Mecanismos - PMR/EPUSP 9 3.00 49.00 3.14 32.00 0.87 0.20 100.00 200.00 200.00 Repare que o formato dos números (ver seção 5) foi modificado para bank. O que aconteceria se a mesma matriz fosse definida com o formato default do MATLAB (short)? Um elemento de uma matriz bidimensional pode ser referenciado através de seus dois ı́ndices: >> M1(2,3) ans = 0.20 As listas (vetores) vistas anteriormente podem ser consideradas um caso particular de matriz unidimensional. Em geral, as matrizes bidimensionais em MATLAB podem ser consideradas como sendo formadas por linhas (ou colunas) de listas. Por exemplo, sejam dadas duas listas definidas abaixo: >> format >> Lis1=linspace(1,10,10) Lis1 = 1 2 3 4 5 6 7 8 9 10 >> Lis2=linspace(0.1,1,10) Lis2 = Columns 1 through 7 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 Columns 8 through 10 0.8000 0.9000 1.0000 Pode-se facilmente criar matrizes com estas listas: >> Mat1=[Lis1;Lis2] Mat1 = Columns 1 through 7 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 Columns 8 through 10 8.0000 9.0000 10.0000 0.8000 0.9000 1.0000 >> Mat2=[Lis1.’ Lis2.’] Mecanismos - PMR/EPUSP 10 Mat2 = 1.0000 0.1000 2.0000 0.2000 3.0000 0.3000 4.0000 0.4000 5.0000 0.5000 6.0000 0.6000 7.0000 0.7000 8.0000 0.8000 9.0000 0.9000 10.0000 1.0000 É possı́vel referenciar todos os elementos de uma linha ou coluna utilizando-se o sinal de dois pontos (:), >> Mat1(2,:) ans = Columns 1 through 7 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 Columns 8 through 10 0.8000 0.9000 1.0000 >> Mat2(5,:) ans = 5.0000 0.5000 >> Mat1(:,7) ans = 7.0000 0.7000 >> Mat2(:,1) ans = 1 2 3 4 5 Mecanismos - PMR/EPUSP 13 Para se criar uma lista que tenha ordem de formação mais complexa do que o visto na seção 7, podemos usar o comando for >> x=2; >> y=5; >> for k=1:3 for l=1:3 M1(k,l)=sin(x); x=y+x; y=y/k; end end >> M1 M1 = 0.9093 0.6570 -0.5366 -0.9614 -0.0089 -0.5914 0.5788 0.9465 0.9928 Note que as operações compreendidas entre um par for end são executadas em cada iteração. Descubra o por quê do uso do sinal de ponto e vı́rgula no final das expressões. O que aconteceria se não fosse usado o ponto e vı́rgula? 9.2 Loops usando while O comando while é usado de forma análoga ao comando for. A diferença fundamental é que com o uso do while os comandos são repetidos até que se satisfaça uma determinada condição. Veja no exemplo a seguir. >> v1=5; >> n=1; >> while v1>0.5 L(n)=n*v1; n=n+1; v1=v1-v1/2; end >> L L = 5.0000 5.0000 3.7500 2.5000 Mecanismos - PMR/EPUSP 14 9.3 Tomadas de decisão usando if-else É usado de forma análoga a outras linguagens de programação. Não há muito o que explicar já que deve ser do conhecimento de todos. Repare que deve terminar com o comando end. Exemplo: >> for m=1:3 for n=1:3 if m==n M2(m,n)=1; elseif m<n M2(m,n)=2; else M2(m,n)=0; end end end >> M2 M2 = 1 2 2 0 1 2 0 0 1 Note que se houver apenas duas possibilidades a verificar deve-se usar if-else-end, enquanto que se houver três ou mais possibilidades a verificar deve-se usar if-elseif-...-elseif-else-end. 10 Plotando gráficos O MATLAB é bastante versátil para criação de gráficos em diversos estilos (bidimensional, tridimensional, barras, polar, etc.). Vamos plotar a função co-seno com listas x e y. Para gráficos simples bidimensionais deve-se usar a função plot. >> x=linspace(-pi/2,20,50); >> y=cos(x); >> plot(x,y) >> Logo em seguida a esse comando, deve ser aberta uma nova janela gráfica com o gráfico da função desejada. Para se obter o gráfico com grades para facilitar a leitura, use a função grid on. Note que o MATLAB ajusta os eixos automaticamente. Mecanismos - PMR/EPUSP 15 Figura 1: Exemplo de gráfico simples da função co-seno. Como salvar o gráfico num formato que possa ser inserido por um editor de textos? Na janela do gráfico, é só clicar no menu File → Export. . . e escolher o formato desejado. Ou, se preferir trabalhar na janela de comandos, use a função print adequadamente. Dê um help print. Para adicionar tı́tulos aos eixos e ao gráfico, siga o modelo abaixo: >> xlabel(’Eixo x’) >> ylabel(’Eixo y’) >> title(’Gráfico cos(x)’) Figura 2: Exemplo de gráfico simples da função co-seno com t́ıtulos. Mecanismos - PMR/EPUSP 18 >> M=dlmread(’dados2.dat’) Para atribuir as variáveis originais x, A, B, C, D a cada coluna: >> x=M(:,1) >> A=M(:,2) >> B=M(:,3) >> C=M(:,4) >> D=M(:,5) 12 Arquivos de Roteiro - Arquivos M O Matlab permite o uso de arquivos com extensão m para elaboração de funções e roteiros (scripts). Desta forma, qualquer usuário pode criar sua própria função, ou arquivar uma seqüência de comandos. Com isso consegue-se maior praticidade e economia de tempo em operações longas e/ou repetitivas. Os arquivos M devem ter formato txt (ascii). Qualquer editor de texto que salva em formato txt pode ser utilizado. Entretanto, o próprio Matlab possui um editor de textos integrado que é mais conveniente por distinguir diversas operações com cores diferentes e por fazer verificação automática de sintaxe de programação (por exemplo, abertura e fechamento de parênteses). É importante colocar a pasta onde o roteiro foi salvo na lista de caminhos ativos do Matlab para que ele possa ser utilizado. Caso contrário o Matlab responderá com uma mensagem de erro dizendo não ter encontrado nenhum arquivo ou função com esse nome. Como exemplo, vamos considerar a ação de se importar uma série de dados na forma de tabela que estão armazenados em arquivos, e que se deseje plotar os gráficos correspondentes. Se houver vários arquivos e/ou várias colunas de dados a plotar por arquivo, será mais conveniente elaborar um arquivo M do que digitar cada comando repetitivamente na janela principal do Matlab. Vamos usar o arquivo dados2.dat criado na seção anterior. O arquivo com nome roteiro1.m preparado no editor do Matlab é mostrado na figura 5. Figura 5: Roteiro para importação de dados do arquivo dados2.dat. Para rodar este arquivo basta dar o comando roteiro1 na janela de comandos do Matlab (não se esqueça de verificar se o diretório em que foi salvo o arquivo roteiro1.m está na lista de caminhos ativos). Mecanismos - PMR/EPUSP 19 13 Criando funções O usuário pode criar suas próprias funções para facilitar seu trabalho. Basta seguir a sintaxe adequada. É importante notar que as variáveis internas de uma função são apenas locais, ou seja, não são utilizáveis na janela de comando; a não ser que a variável seja retornada como resultado pela função. De uma forma geral, a primeira linha do arquivo deve começar com a declaração da função. A função deve ser criada como se fosse um arquivo roteiro (seção 12). Vários exemplos são dados a seguir: function funcao1(p1,p2,p3) %declara a funç~ao de nome funcao1, com %três argumentos de entrada (p1,p2,p3), e que n~ao retorna nada. function []=funcao1(p1,p2,p3) %declara a funç~ao de nome funcao1, com %três argumentos de entrada (p1,p2,p3), e que n~ao retorna nada. function y=funcao2(p1,p2) %declara a funç~ao de nome funcao2, com duas %entradas (p1 e p2) e uma saı́da y function [y1,y2,y3]=funcao3(p1,p2) %declara a funç~ao de nome funcao3, com duas %entradas (p1 e p2) e três saı́das y1, y2 e y3 A função criada deve ser salva com o mesmo nome, acrescentando a extensão m. Por exemplo, a primeira função definida anteriormente deverá ter seu arquivo salvo com o nome funcao1.m. Deve-se tomar cuidado para não utilizar nomes de funções já existentes no Matlab. Em seguida, podem ser inseridas informações de uso da função sob a forma de comentários (%). Toda essa informação pode ser acessada da janela principal de comandos do Matlab através do comando help nome_funç~ao. Para a primeira função definida podemos ter: function funcao1(p1,p2,p3) %FUNCAO1 executa uma determinada aç~ao %A aç~ao utiliza os argumentos de entrada nas formas: p1 é um número %inteiro positivo; p2 é um vetor; p3 é um número complexo. O corpo da função, contendo todos os comandos a serem executados, vem após as linhas de informação. Comentários podem ser colocados em qualquer parte utilizando o sı́mbolo %. Mecanismos - PMR/EPUSP 20 Exemplo 1 A função exemplo1.m, na figura 6, faz a conversão de valores em polegadas para metros, ou de metros para polegadas. Figura 6: Exemplo de função. Veja vários exemplos de utilização desta função na figura 7. Figura 7: Execução da função exemplo1 na janela de comando do Matlab. Exemplo 2 Neste segundo exemplo será visto como passar uma expressão literal (string) para dentro de uma função e como converter essa string em comandos executáveis pelo Matlab. Suponha que seja necessário realizar o cálculo de uma função complexa para um número grande de valores, por exemplo, de 0 a 20 em variações de 0.50. Seja a função y = 2x3.15 + cos(x) + e−4x e sua derivada dy dx = 6.30x2.15 − sin(x)− 4e−4x. Mecanismos - PMR/EPUSP 23 axis off %para desabilitar a visualizacao dos eixos e suas propriedades axis on %para habilitar a visualizacao dos eixos e suas propriedades %definidas anteriormente axis equal %iguala os limites dos eixos axis(a) %retorna aos limites de eixos anteriores guardados na variavel a. Mas, %note que o tamanho do grafico foi alterado axis normal %ocupa o maximo espaco possivel da janela axis auto %ajusta automaticamente os limites do grafico axis(a) axis ij%inverte os limites do eixo y (inicia com o ymin no canto esquerdo superior) axis xy %retorna o eixo y axis square %da’ um formato quadrado ao grafico, mantendo os limites da variavel a. axis normal %retorna ao formato que ocupa o maximo espaco da janela axis ’auto x’ %ajusta automaticamente apenas o limite do eixo x axis manual %controle manual de eixos hold on %mantem o grafico plotado atual plot(x,cos(x),’Color’,’k’) %acrescenta o grafico cos(x) com a linha em cor codigo %[R G B]=[0.1 0.9 0.8] ao grafico anterior. Os tres parametros RGB podem %assumir valores entre 0 e 1. c=plot(x,cos(x),’k:’) %desenha novamente a funcao cos(x), mas em linhas pontilhadas %e com a cor preta. Note que a linha cos(x) anterior continua presente. %A variavel c esta nomeando esta nova linha. set(c,’LineWidth’,3) %modifica a largura da linha c. Veja o help do comando set set(c,’LineStyle’,’none’,’Marker’,’d’,... %... indica que o comando continua ’MarkerFaceColor’,’r’,’LineWidth’,1,’MarkerSize’,8) %modifica para a linha c: LineStyle=none nao plota linha; Marker=d marcas %em formato de diamante; MarkerFaceColor=r preenche as marcas com a cor %vermelha; LineWidth=1 reduz a linha para largura 1 (no caso a unica linha %ativa c e’ o marcador); MarkerSize=8 tamanho do marcador 8. Mecanismos - PMR/EPUSP 24 15 Animações Nesta seção serão vistos alguns recursos importantes para gerar animações de gráficos. Estes recursos poderão ser usados em simulações animadas de mecanismos. É importante ter lido a seção 14. Considere um elo (corpo rı́gido) preso por uma junta de revolução e que realiza rotação pura, figura 9. Serão definidos apenas 3 pontos deste elo: origem (O) e dois pontos particulares de interesse (A e P). Figura 9: Mecanismo plano em rotação pura em torno do ponto O. O roteiro rotp1.m mostra como gerar uma animação desse mecanismo sem manter os quadros anteriores, ou seja, criando e apagando quadros em sequência. De outra forma, o roteiro rotp2.m mostra como gerar uma animação do mecanismo mantendo as posições das sequências anteriores. Há poucas, mas importantes, modificações entre os dois roteiros. %rotp1.m %roteiro para criar animacao de um corpo rigido em rotacao pura no plano XY %ESTA ANIMACAO NAO MANTEM OS QUADROS ANTERIORES clear %limpa da memoria todas as variaveis close %fecha todas as janelas graficas abertas figure(3); %abre a janela grafica numero 3 R_AO=5; %distancia entre os pontos A e O do elo 2 R_PA=2; %distancia entre os pontos P e A do elo 2 T2_0=pi/9; %angulo theta 2 inicial da linha entre os pontos O e A Alpha=2*pi/3; %angulo fixo entre as linhas PA e AO Ax_0=R_AO*cos(T2_0); %componente x do ponto A inicial Ay_0=R_AO*sin(T2_0); %componente y do ponto A inicial Px_0=Ax_0+R_PA*cos(T2_0+Alpha); %componente x do ponto P inicial Py_0=Ay_0+R_PA*sin(T2_0+Alpha); %componente y do ponto P inicial Lx=[0, Ax_0, Px_0, 0]; %coordenadas em x da sequencia de pontos a plotar Ly=[0, Ay_0, Py_0, 0]; %coordenadas em y da sequencia de pontos a plotar Mecanismos - PMR/EPUSP 25 h=plot(Lx,Ly,’-ob’); %plotagem em linha continua, marcador circular e cor azul axis([-10 10 -10 10]) %limites dos eixos x e y axis square %transforma a area de plotagem em quadrado grid on %ativa as grades I=18; %I=numero de iteracoes desejadas for k=1:I %variacoes T2=(k-1)*(2*pi/I)+T2_0; %calculo do angulo theta2 da sequencia de frames Ax=R_AO*cos(T2); %calculo da posicao atual do ponto Ax Ay=R_AO*sin(T2); %calculo da posicao atual do ponto Ay Px=Ax+R_PA*cos(T2+Alpha); %calculo da posicao atual do ponto Px Py=Ay+R_PA*sin(T2+Alpha); %calculo da posicao atual do ponto Py Lx=[0, Ax, Px, 0]; %coordenadas em x atual da sequencia de pontos a plotar Ly=[0, Ay, Py, 0]; %coordenadas em y atual da sequencia de pontos a plotar set(h,’XData’,Lx,’YData’,Ly,’EraseMode’,’xor’) %plota os pontos O, A e P %calculados , e define EraseMode como xor para nao manter a figura no %proximo quadro. Para manter a figura, use EraseMode=normal ou none axis([-10 10 -10 10]) %limites dos eixos x e y axis square %transforma a area de plotagem em quadrado grid on %ativa as grades t1=text(Ax+0.5,Ay+0.5,’A’,’Visible’,’on’,’EraseMode’,’xor’); %cria o texto %’A’ na coordenada [Ax+0.5,Ay+0.5], com EraseMode=xor para nao manter %no proximo quadro. Tambem, habilita Visible=on. t2=text(Px+0.5,Py+0.5,’P’,’Visible’,’on’,’EraseMode’,’xor’); %cria o texto %’P’ na coordenada [Px+0.5,Py+0.5], com EraseMode=xor para nao manter %no proximo quadro. Tambem, habilita Visible=on. xlabel(’Eixo X’); ylabel(’Eixo Y’); T2g=T2*180/pi; %converte o angulo T2 em graus T2gs=num2str(T2g); %converte o numero T2g em string t3=text(-3,-8,[’Theta2= ’,T2gs],’BackgroundColor’,’w’,’EdgeColor’,’b’,... ’FontSize’,14); %cria texto com background branco, borda azul e tamanho de fonte 14. M(k) = getframe(gcf,[0 0 550 400]); %comando getframe para transformar a Mecanismos - PMR/EPUSP 28 Como exercı́cio, faça as modificações necessárias para salvar esses dados gerados nos roteiros das animações em um arquivo para análise posterior. 16 Utilizando polinômios Nesta seção veremos como trabalhar com funções polinomiais. A manipulação de polinômios é feita, basicamente, com seus coeficientes formando uma lista (vetor) horizontal. Por outro lado, as raı́zes de um polinômio formam uma lista vertical. Vejamos um exemplo simples, o polinômio x2 − 5x + 6, o qual tem como raı́zes os valores 2 e 3. Sua representação pode ser feita com a lista p1. Repare a ordem de disposição dos coeficientes: >> p1=[1 -5 6] p1 = 1 -5 6 Suas raı́zes podem ser encontradas com a função roots: >> r1=roots(p1) r1 = 3 2 Descubra o que faz a função poly. Qual seria o resultado de poly([2;3])? Em seguida, veremos como determinar o valor de uma função polinomial para um determinado valor da variável de entrada. Para o mesmo polinômio p1 definido acima, qual seria o resultado se x = 59.2? Basta usar a função polyval. >> f1=polyval(p1,59.2) f1 = 3.2146e+003 Mais interessante do que isso, a variável x pode ser uma lista ou matriz. Veja como plotar a função p1 para valores entre −20 e 20: >> x1=linspace(-20,20,300); >> y1=polyval(p1,x1); >> plot(x1,y1,’g’); grid on >> xlabel(’x’) >> ylabel(’x^2 -5x +6’) Diversas operações podem ser efetuadas entre dois polinômios: soma, subtração, multiplicação, divisão. Para soma e subtração deve-se considerar as listas dos coeficientes dos polinômios e efetuar a operação Mecanismos - PMR/EPUSP 29 −20 −15 −10 −5 0 5 10 15 20 −100 0 100 200 300 400 500 600 x x2 − 5x + 6 conforme visto na seção 7.1. Para multiplicação deve-se usar a função conv, enquanto que para divisão a função deconv. Em todas as operações mencionadas acima, as listas devem ter número de elementos compatı́vel com a ordem do polinômio. Deve-se completar com zeros até que essa condição seja satisfeita. Além disso, no caso de soma e subtração, as listas devem ser de mesma ordem. Por exemplo, para efetuar a multiplicação do polinômio p1 = x2−5x+6 usado acima com o polinômio p2 = x5 + 7x3 + 1: >> p2=[1 0 7 0 0 1] p2 = 1 0 7 0 0 1 >> p3=conv(p1,p2) p3 = 1 -5 13 -35 42 1 -5 6 Mas, para executar a soma dos dois polinômios devem ser utilizadas listas de mesma dimensão: >> p1_1=[0 0 0 1 -5 6] %lista p1 modificada p1_1 = 0 0 0 1 -5 6 >> p4=p1_1 + p2 p4 = 1 0 7 1 -5 7 Por fim, veremos como determinar os resı́duos, polos e termos diretos de uma fração de dois polinômios no método da expansão em frações parciais. Dada uma fração de dois polinômios B(s) e A(s), podemos decompô-la numa soma de frações parciais, B(s) A(s) = k(s) + r(1) s− p(1) + r(2) s− p(2) + . . . + r(n) s− p(n) Mecanismos - PMR/EPUSP 30 Para isso, usa-se a função residue, que retorna como resposta três listas: resı́duos, polos e termos livres. Por exemplo, para a fração de polinômios B(s) A(s) = s3 + 5s2 + 9s + 7 (s + 1)(s + 2) terı́amos a seguinte operação no MATLAB: >> num=[1 5 9 7] num = 1 5 9 7 >> den=poly([-1;-2]) den = 1 3 2 >> [r,p,k]=residue(num,den) r = -1 2 p = -2 -1 k = 1 2 Ou seja, B(s) A(s) = s + 2 + −1 s + 2 + 2 s + 1 Note que neste caso o numerador é um polinômio de ordem maior que o denominador, resultando, portanto, num termo livre k não nulo. A função residue do MATLAB também serve para executar a operação inversa, ou seja, dadas as listas verticais dos resı́duos e dos polos e a lista horizontal dos termos livres, ela determina as listas horizontais dos polinômios do numerador e do denominador: >> [n,d]=residue(r,p,k) n = 1 5 9 7 d = 1 3 2
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved